summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/func_ref.cpp6
-rw-r--r--core/globals.cpp33
-rw-r--r--core/globals.h3
-rw-r--r--core/input_map.cpp4
-rw-r--r--core/input_map.h8
-rw-r--r--core/io/compression.cpp23
-rw-r--r--core/io/compression.h2
-rw-r--r--core/io/networked_multiplayer_peer.cpp19
-rw-r--r--core/io/networked_multiplayer_peer.h19
-rw-r--r--core/io/resource_format_binary.cpp3
-rw-r--r--core/io/resource_format_xml.cpp4
-rw-r--r--core/io/stream_peer.cpp144
-rw-r--r--core/io/stream_peer.h36
-rw-r--r--core/math/math_2d.h9
-rw-r--r--core/math/vector3.cpp10
-rw-r--r--core/method_bind.h19
-rw-r--r--core/object.cpp145
-rw-r--r--core/object.h16
-rw-r--r--core/object_type_db.cpp2
-rw-r--r--core/object_type_db.h4
-rw-r--r--core/os/input.cpp2
-rw-r--r--core/os/input.h20
-rw-r--r--core/os/input_event.cpp50
-rw-r--r--core/os/os.cpp3
-rw-r--r--core/os/os.h8
-rw-r--r--core/path_db.cpp4
-rw-r--r--core/register_core_types.cpp1
-rw-r--r--core/script_debugger_remote.cpp6
-rw-r--r--core/script_language.cpp1
-rw-r--r--core/script_language.h25
-rw-r--r--core/string_db.cpp6
-rw-r--r--core/translation.cpp438
-rw-r--r--core/undo_redo.cpp77
-rw-r--r--core/undo_redo.h12
-rw-r--r--core/variant.h2
-rw-r--r--core/variant_call.cpp16
-rw-r--r--core/variant_op.cpp2
-rw-r--r--doc/base/classes.xml1350
-rw-r--r--drivers/gles2/rasterizer_gles2.cpp14
-rw-r--r--drivers/gles2/rasterizer_gles2.h2
-rw-r--r--main/input_default.cpp119
-rw-r--r--main/input_default.h31
-rw-r--r--main/main.cpp6
-rw-r--r--modules/enet/SCsub2
-rw-r--r--modules/enet/networked_multiplayer_enet.cpp521
-rw-r--r--modules/enet/networked_multiplayer_enet.h62
-rw-r--r--modules/enet/protocol.c3
-rw-r--r--modules/enet/register_types.cpp1
-rw-r--r--modules/enet/win32.c2
-rw-r--r--modules/gdscript/gd_compiler.cpp6
-rw-r--r--modules/gdscript/gd_editor.cpp40
-rw-r--r--modules/gdscript/gd_function.cpp3
-rw-r--r--modules/gdscript/gd_function.h12
-rw-r--r--modules/gdscript/gd_parser.cpp99
-rw-r--r--modules/gdscript/gd_parser.h8
-rw-r--r--modules/gdscript/gd_script.cpp92
-rw-r--r--modules/gdscript/gd_script.h106
-rw-r--r--modules/gdscript/gd_tokenizer.cpp10
-rw-r--r--modules/gdscript/gd_tokenizer.h4
-rw-r--r--modules/gridmap/grid_map_editor_plugin.cpp47
-rw-r--r--modules/gridmap/grid_map_editor_plugin.h1
-rw-r--r--modules/visual_script/register_types.cpp31
-rw-r--r--modules/visual_script/visual_script.cpp434
-rw-r--r--modules/visual_script/visual_script.h56
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.cpp797
-rw-r--r--modules/visual_script/visual_script_builtin_funcs.h5
-rw-r--r--modules/visual_script/visual_script_editor.cpp1032
-rw-r--r--modules/visual_script/visual_script_editor.h60
-rw-r--r--modules/visual_script/visual_script_expression.cpp1523
-rw-r--r--modules/visual_script/visual_script_expression.h280
-rw-r--r--modules/visual_script/visual_script_flow_control.cpp360
-rw-r--r--modules/visual_script/visual_script_flow_control.h67
-rw-r--r--modules/visual_script/visual_script_func_nodes.cpp1789
-rw-r--r--modules/visual_script/visual_script_func_nodes.h142
-rw-r--r--modules/visual_script/visual_script_nodes.cpp1743
-rw-r--r--modules/visual_script/visual_script_nodes.h425
-rw-r--r--modules/visual_script/visual_script_yield_nodes.cpp17
-rw-r--r--modules/visual_script/visual_script_yield_nodes.h1
-rw-r--r--platform/android/build.gradle.template1
-rw-r--r--platform/javascript/SCsub3
-rw-r--r--platform/javascript/detect.py7
-rw-r--r--platform/javascript/javascript_eval.cpp169
-rw-r--r--platform/javascript/javascript_eval.h (renamed from tools/ios_xcode_template/godot_ios/main.m)34
-rw-r--r--platform/javascript/os_javascript.cpp5
-rw-r--r--platform/javascript/os_javascript.h5
-rw-r--r--platform/osx/SCsub1
-rw-r--r--platform/osx/detect.py2
-rw-r--r--platform/osx/joystick_osx.cpp623
-rw-r--r--platform/osx/joystick_osx.h125
-rw-r--r--platform/osx/os_osx.h3
-rw-r--r--platform/osx/os_osx.mm9
-rw-r--r--platform/windows/detect.py5
-rw-r--r--platform/windows/os_windows.cpp2
-rw-r--r--platform/x11/os_x11.cpp6
-rw-r--r--scene/2d/camera_2d.cpp50
-rw-r--r--scene/2d/camera_2d.h4
-rw-r--r--scene/2d/canvas_item.cpp11
-rw-r--r--scene/2d/canvas_item.h4
-rw-r--r--scene/2d/node_2d.cpp53
-rw-r--r--scene/2d/node_2d.h6
-rw-r--r--scene/2d/physics_body_2d.cpp119
-rw-r--r--scene/2d/physics_body_2d.h15
-rw-r--r--scene/2d/ray_cast_2d.cpp36
-rw-r--r--scene/2d/ray_cast_2d.h4
-rw-r--r--scene/3d/immediate_geometry.cpp8
-rw-r--r--scene/3d/immediate_geometry.h2
-rw-r--r--scene/gui/base_button.cpp11
-rw-r--r--scene/gui/control.cpp58
-rw-r--r--scene/gui/control.h11
-rw-r--r--scene/gui/dialogs.cpp2
-rw-r--r--scene/gui/graph_edit.cpp277
-rw-r--r--scene/gui/graph_edit.h13
-rw-r--r--scene/gui/graph_node.cpp104
-rw-r--r--scene/gui/graph_node.h17
-rw-r--r--scene/gui/item_list.cpp18
-rw-r--r--scene/gui/item_list.h4
-rw-r--r--scene/gui/line_edit.cpp79
-rw-r--r--scene/gui/line_edit.h8
-rw-r--r--scene/gui/slider.cpp9
-rw-r--r--scene/gui/texture_progress.cpp1
-rw-r--r--scene/gui/tree.cpp93
-rw-r--r--scene/gui/tree.h10
-rw-r--r--scene/main/node.cpp556
-rw-r--r--scene/main/node.h45
-rw-r--r--scene/main/scene_main_loop.cpp363
-rw-r--r--scene/main/scene_main_loop.h25
-rw-r--r--scene/resources/default_theme/default_theme.cpp7
-rw-r--r--scene/resources/default_theme/graph_node.pngbin752 -> 762 bytes
-rw-r--r--scene/resources/default_theme/graph_node_comment.pngbin0 -> 506 bytes
-rw-r--r--scene/resources/default_theme/graph_node_comment_focus.pngbin0 -> 482 bytes
-rw-r--r--scene/resources/default_theme/graph_node_selected.pngbin920 -> 933 bytes
-rw-r--r--scene/resources/default_theme/theme_data.h19
-rw-r--r--scene/resources/default_theme/window_resizer.pngbin0 -> 181 bytes
-rw-r--r--scene/resources/scene_format_text.cpp4
-rw-r--r--servers/physics_2d/physics_2d_server_sw.cpp4
-rw-r--r--servers/physics_2d/physics_2d_server_sw.h2
-rw-r--r--servers/physics_2d/physics_2d_server_wrap_mt.h4
-rw-r--r--servers/physics_2d/space_2d_sw.cpp33
-rw-r--r--servers/physics_2d/space_2d_sw.h2
-rw-r--r--servers/physics_2d_server.cpp6
-rw-r--r--servers/physics_2d_server.h4
-rw-r--r--servers/visual/rasterizer.h3
-rw-r--r--servers/visual/rasterizer_dummy.cpp2
-rw-r--r--servers/visual/rasterizer_dummy.h2
-rw-r--r--servers/visual/visual_server_raster.cpp3
-rw-r--r--servers/visual/visual_server_raster.h2
-rw-r--r--servers/visual/visual_server_wrap_mt.h2
-rw-r--r--servers/visual_server.cpp2
-rw-r--r--servers/visual_server.h2
-rw-r--r--tools/SCsub3
-rw-r--r--tools/addheader/files158
-rw-r--r--tools/addheader/header.txt12
-rw-r--r--tools/buildstuff/zlib_freetype231_jpeg_libpng-bin-win32-vs81.zipbin3557519 -> 0 bytes
-rw-r--r--tools/dist/docker/Dockerfile (renamed from tools/docker/Dockerfile)0
-rw-r--r--tools/dist/docker/README.md (renamed from tools/docker/README.md)0
-rw-r--r--tools/dist/docker/scripts/install-android-tools (renamed from tools/docker/scripts/install-android-tools)0
-rw-r--r--tools/dist/html_fs/godot.html (renamed from tools/html_fs/godot.html)0
-rw-r--r--tools/dist/html_fs/godotfs.js (renamed from tools/html_fs/godotfs.js)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/data.pck (renamed from platform/iphone/xcode/godot_xcode/data.pck)0
-rwxr-xr-xtools/dist/ios_xcode/godot_xcode/godot_debug.iphone (renamed from platform/iphone/xcode/godot_xcode/godot_debug.iphone)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj (renamed from platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata (renamed from platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png)bin564 -> 564 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png)bin683 -> 683 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h@2x.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png)bin817 -> 817 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png)bin1676 -> 1676 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h@3x.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png)bin2582 -> 2582 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape-736h.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png)bin2582 -> 2582 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png)bin3131 -> 3131 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png)bin634 -> 634 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png)bin3070 -> 3070 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png)bin589 -> 589 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default@2x~iphone.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png)bin515 -> 515 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Default~iphone.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png)bin309 -> 309 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png)bin250 -> 250 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png)bin253 -> 253 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png)bin253 -> 253 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png)bin259 -> 259 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png)bin260 -> 260 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png)bin265 -> 265 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png)bin242 -> 242 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png)bin240 -> 240 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png)bin243 -> 243 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png)bin243 -> 243 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png)bin243 -> 243 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png)bin244 -> 244 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png)bin244 -> 244 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png)bin246 -> 246 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png)bin245 -> 245 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png)bin262 -> 262 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png)bin247 -> 247 bytes
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes (renamed from platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings (renamed from platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/godot_ios-Info.plist (renamed from platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist)0
-rw-r--r--tools/dist/ios_xcode/godot_xcode/godot_ios/main.m (renamed from platform/iphone/xcode/godot_xcode/godot_ios/main.m)0
-rwxr-xr-xtools/dist/ios_xcode/godot_xcode/godot_opt.iphone (renamed from platform/iphone/xcode/godot_xcode/godot_opt.iphone)0
-rwxr-xr-xtools/dist/osx_template.app/Contents/Info.plist (renamed from tools/osx_template.app/Contents/Info.plist)0
-rw-r--r--tools/dist/osx_template.app/Contents/PkgInfo (renamed from tools/Godot.app/Contents/PkgInfo)0
-rw-r--r--tools/dist/osx_template.app/Contents/Resources/icon.icns (renamed from tools/osx_template.app/Contents/Resources/icon.icns)bin120942 -> 120942 bytes
-rwxr-xr-xtools/dist/osx_tools.app/Contents/Info.plist (renamed from tools/Godot.app/Contents/Info.plist)0
-rw-r--r--tools/dist/osx_tools.app/Contents/PkgInfo (renamed from tools/osx_template.app/Contents/PkgInfo)0
-rw-r--r--tools/dist/osx_tools.app/Contents/Resources/Godot.icns (renamed from tools/Godot.app/Contents/Resources/Godot.icns)bin120942 -> 120942 bytes
-rw-r--r--tools/doc/doc_data.cpp23
-rw-r--r--tools/doc/doc_dump.cpp (renamed from tools/docdump/doc_dump.cpp)0
-rw-r--r--tools/doc/doc_dump.h (renamed from tools/docdump/doc_dump.h)0
-rw-r--r--tools/docdump/SCsub5
-rw-r--r--tools/editor/animation_editor.cpp16
-rw-r--r--tools/editor/create_dialog.cpp23
-rw-r--r--tools/editor/create_dialog.h5
-rw-r--r--tools/editor/editor_data.cpp2
-rw-r--r--tools/editor/editor_dir_dialog.cpp14
-rw-r--r--tools/editor/editor_help.cpp167
-rw-r--r--tools/editor/editor_help.h17
-rw-r--r--tools/editor/editor_node.cpp4
-rw-r--r--tools/editor/editor_settings.cpp31
-rw-r--r--tools/editor/editor_settings.h2
-rw-r--r--tools/editor/filesystem_dock.cpp46
-rw-r--r--tools/editor/filesystem_dock.h11
-rw-r--r--tools/editor/icons/2x/icon_mini_aabb.pngbin0 -> 697 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_array.pngbin0 -> 326 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_boolean.pngbin0 -> 434 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_color.pngbin0 -> 411 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_color_array.pngbin0 -> 445 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_dictionary.pngbin0 -> 371 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_float.pngbin0 -> 355 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_float_array.pngbin0 -> 451 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_image.pngbin0 -> 450 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_input.pngbin0 -> 409 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_int_array.pngbin0 -> 384 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_integer.pngbin0 -> 367 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_matrix3.pngbin0 -> 391 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_matrix32.pngbin0 -> 573 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_object.pngbin0 -> 507 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_path.pngbin0 -> 435 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_plane.pngbin0 -> 424 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_quat.pngbin0 -> 509 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_raw_array.pngbin0 -> 382 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_rect2.pngbin0 -> 431 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_rid.pngbin0 -> 349 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_string.pngbin0 -> 437 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_string_array.pngbin0 -> 479 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_transform.pngbin0 -> 431 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_variant.pngbin0 -> 405 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_vector2.pngbin0 -> 541 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_vector2_array.pngbin0 -> 485 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_vector3.pngbin0 -> 509 bytes
-rw-r--r--tools/editor/icons/2x/icon_mini_vector3_array.pngbin0 -> 416 bytes
-rw-r--r--tools/editor/icons/icon_loop_interpolation.pngbin0 -> 374 bytes
-rw-r--r--tools/editor/icons/icon_mini_aabb.pngbin205 -> 367 bytes
-rw-r--r--tools/editor/icons/icon_mini_array.pngbin193 -> 210 bytes
-rw-r--r--tools/editor/icons/icon_mini_boolean.pngbin203 -> 256 bytes
-rw-r--r--tools/editor/icons/icon_mini_color.pngbin202 -> 253 bytes
-rw-r--r--tools/editor/icons/icon_mini_color_array.pngbin201 -> 337 bytes
-rw-r--r--tools/editor/icons/icon_mini_dictionary.pngbin192 -> 230 bytes
-rw-r--r--tools/editor/icons/icon_mini_float.pngbin211 -> 233 bytes
-rw-r--r--tools/editor/icons/icon_mini_float_array.pngbin210 -> 275 bytes
-rw-r--r--tools/editor/icons/icon_mini_image.pngbin211 -> 257 bytes
-rw-r--r--tools/editor/icons/icon_mini_input.pngbin201 -> 236 bytes
-rw-r--r--tools/editor/icons/icon_mini_int_array.pngbin198 -> 262 bytes
-rw-r--r--tools/editor/icons/icon_mini_integer.pngbin196 -> 228 bytes
-rw-r--r--tools/editor/icons/icon_mini_matrix3.pngbin220 -> 236 bytes
-rw-r--r--tools/editor/icons/icon_mini_matrix32.pngbin216 -> 320 bytes
-rw-r--r--tools/editor/icons/icon_mini_object.pngbin210 -> 289 bytes
-rw-r--r--tools/editor/icons/icon_mini_path.pngbin211 -> 254 bytes
-rw-r--r--tools/editor/icons/icon_mini_plane.pngbin207 -> 249 bytes
-rw-r--r--tools/editor/icons/icon_mini_quat.pngbin205 -> 309 bytes
-rw-r--r--tools/editor/icons/icon_mini_raw_array.pngbin214 -> 248 bytes
-rw-r--r--tools/editor/icons/icon_mini_rect2.pngbin216 -> 267 bytes
-rw-r--r--tools/editor/icons/icon_mini_rid.pngbin205 -> 222 bytes
-rw-r--r--tools/editor/icons/icon_mini_string.pngbin198 -> 258 bytes
-rw-r--r--tools/editor/icons/icon_mini_string_array.pngbin216 -> 296 bytes
-rw-r--r--tools/editor/icons/icon_mini_transform.pngbin216 -> 264 bytes
-rw-r--r--tools/editor/icons/icon_mini_variant.pngbin254 -> 240 bytes
-rw-r--r--tools/editor/icons/icon_mini_vector2.pngbin217 -> 301 bytes
-rw-r--r--tools/editor/icons/icon_mini_vector2_array.pngbin216 -> 284 bytes
-rw-r--r--tools/editor/icons/icon_mini_vector3.pngbin219 -> 285 bytes
-rw-r--r--tools/editor/icons/icon_mini_vector3_array.pngbin212 -> 264 bytes
-rw-r--r--tools/editor/icons/source/icon_mini_aabb.svg107
-rw-r--r--tools/editor/icons/source/icon_mini_array.svg130
-rw-r--r--tools/editor/icons/source/icon_mini_boolean.svg131
-rw-r--r--tools/editor/icons/source/icon_mini_color.svg126
-rw-r--r--tools/editor/icons/source/icon_mini_color_array.svg250
-rw-r--r--tools/editor/icons/source/icon_mini_dictionary.svg150
-rw-r--r--tools/editor/icons/source/icon_mini_float.svg147
-rw-r--r--tools/editor/icons/source/icon_mini_float_array.svg133
-rw-r--r--tools/editor/icons/source/icon_mini_image.svg156
-rw-r--r--tools/editor/icons/source/icon_mini_input.svg146
-rw-r--r--tools/editor/icons/source/icon_mini_int_array.svg94
-rw-r--r--tools/editor/icons/source/icon_mini_integer.svg143
-rw-r--r--tools/editor/icons/source/icon_mini_matrix3.svg140
-rw-r--r--tools/editor/icons/source/icon_mini_matrix32.svg145
-rw-r--r--tools/editor/icons/source/icon_mini_object.svg111
-rw-r--r--tools/editor/icons/source/icon_mini_path.svg142
-rw-r--r--tools/editor/icons/source/icon_mini_plane.svg124
-rw-r--r--tools/editor/icons/source/icon_mini_quat.svg123
-rw-r--r--tools/editor/icons/source/icon_mini_raw_array.svg103
-rw-r--r--tools/editor/icons/source/icon_mini_rect2.svg170
-rw-r--r--tools/editor/icons/source/icon_mini_rid.svg140
-rw-r--r--tools/editor/icons/source/icon_mini_string.svg236
-rw-r--r--tools/editor/icons/source/icon_mini_string_array.svg289
-rw-r--r--tools/editor/icons/source/icon_mini_transform.svg96
-rw-r--r--tools/editor/icons/source/icon_mini_variant.svg138
-rw-r--r--tools/editor/icons/source/icon_mini_vector2.svg149
-rw-r--r--tools/editor/icons/source/icon_mini_vector2_array.svg129
-rw-r--r--tools/editor/icons/source/icon_mini_vector3.svg142
-rw-r--r--tools/editor/icons/source/icon_mini_vector3_array.svg129
-rw-r--r--tools/editor/io_plugins/editor_font_import_plugin.cpp23
-rw-r--r--tools/editor/plugins/canvas_item_editor_plugin.cpp257
-rw-r--r--tools/editor/plugins/canvas_item_editor_plugin.h9
-rw-r--r--tools/editor/plugins/color_ramp_editor_plugin.cpp2
-rw-r--r--tools/editor/plugins/material_editor_plugin.cpp2
-rw-r--r--tools/editor/plugins/mesh_editor_plugin.cpp2
-rw-r--r--tools/editor/plugins/script_editor_plugin.cpp40
-rw-r--r--tools/editor/plugins/script_editor_plugin.h9
-rw-r--r--tools/editor/plugins/shader_graph_editor_plugin.cpp18
-rw-r--r--tools/editor/plugins/spatial_editor_plugin.cpp69
-rw-r--r--tools/editor/plugins/spatial_editor_plugin.h3
-rw-r--r--tools/editor/plugins/sprite_frames_editor_plugin.cpp2
-rw-r--r--tools/editor/plugins/texture_region_editor_plugin.cpp4
-rw-r--r--tools/editor/plugins/tile_map_editor_plugin.cpp56
-rw-r--r--tools/editor/plugins/tile_map_editor_plugin.h4
-rw-r--r--tools/editor/project_manager.cpp7
-rw-r--r--tools/editor/project_settings.cpp72
-rw-r--r--tools/editor/project_settings.h2
-rw-r--r--tools/editor/property_editor.cpp198
-rw-r--r--tools/editor/property_editor.h4
-rw-r--r--tools/editor/property_selector.cpp598
-rw-r--r--tools/editor/property_selector.h55
-rw-r--r--tools/editor/scene_tree_dock.cpp20
-rw-r--r--tools/editor/scene_tree_dock.h2
-rw-r--r--tools/editor/script_editor_debugger.cpp3
-rw-r--r--tools/ios_xcode_template/data.pck0
-rw-r--r--tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj469
-rw-r--r--tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata7
-rw-r--r--tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstatebin13553 -> 0 bytes
-rw-r--r--tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme96
-rw-r--r--tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist27
-rw-r--r--tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings2
-rw-r--r--tools/ios_xcode_template/godot_ios/godot_ios-Info.plist47
-rw-r--r--tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch16
-rw-r--r--tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings2
-rw-r--r--tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist22
-rw-r--r--tools/ios_xcode_template/godot_iosTests/godot_iosTests.m55
-rw-r--r--tools/script_plugins/terrain/plugin.cfg16
-rw-r--r--tools/script_plugins/terrain/terrain.gd17
-rw-r--r--tools/script_plugins/terrain/terrain.pngbin762 -> 0 bytes
-rw-r--r--tools/script_plugins/terrain/terrain_node.gd3
-rw-r--r--tools/script_plugins/time/plugin.cfg14
-rw-r--r--tools/script_plugins/time/time.gd32
-rw-r--r--tools/scripts/addheader.py (renamed from tools/addheader/addheader.py)0
-rw-r--r--tools/scripts/make_bmfhdr.py (renamed from tools/bmfhdr/makehdr.py)0
-rw-r--r--tools/scripts/make_glwrapper.py (renamed from tools/glwrapper/makewrapper.py)2
-rw-r--r--tools/scripts/make_icons.sh (renamed from tools/steam/make_icons.sh)0
-rw-r--r--tools/scripts/memsort.py (renamed from tools/memsort.py)0
-rw-r--r--tools/translations/ar.po78
-rw-r--r--tools/translations/bg.po288
-rw-r--r--tools/translations/bn.po116
-rw-r--r--tools/translations/ca.po6616
-rw-r--r--tools/translations/cs.po516
-rw-r--r--tools/translations/da.po6596
-rw-r--r--tools/translations/de.po1495
-rw-r--r--tools/translations/de_CH.po81
-rw-r--r--tools/translations/es.po2239
-rw-r--r--tools/translations/es_AR.po246
-rw-r--r--tools/translations/fa.po671
-rw-r--r--tools/translations/fr.po225
-rw-r--r--tools/translations/id.po1026
-rw-r--r--tools/translations/it.po239
-rw-r--r--tools/translations/ja.po81
-rw-r--r--tools/translations/ko.po189
-rw-r--r--tools/translations/nb.po6516
-rw-r--r--tools/translations/pl.po777
-rw-r--r--tools/translations/pt_BR.po157
-rw-r--r--tools/translations/pt_PT.po183
-rw-r--r--tools/translations/ro.po78
-rw-r--r--tools/translations/ru.po239
-rw-r--r--tools/translations/sk.po79
-rw-r--r--tools/translations/sl.po208
-rw-r--r--tools/translations/tools.pot78
-rw-r--r--tools/translations/tr.po198
-rw-r--r--tools/translations/ur_PK.po78
-rw-r--r--tools/translations/zh_CN.po210
-rw-r--r--tools/translations/zh_HK.po228
-rw-r--r--tools/translations/zh_TW.po78
385 files changed, 44199 insertions, 8260 deletions
diff --git a/core/func_ref.cpp b/core/func_ref.cpp
index 644d8b5b63..ca890111be 100644
--- a/core/func_ref.cpp
+++ b/core/func_ref.cpp
@@ -61,11 +61,7 @@ void FuncRef::_bind_methods() {
MethodInfo mi;
mi.name="call_func";
Vector<Variant> defargs;
- for(int i=0;i<10;i++) {
- mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i)));
- defargs.push_back(Variant());
- }
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call_func:Variant",&FuncRef::call_func,mi,defargs);
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call_func:Variant",&FuncRef::call_func,mi,defargs);
}
diff --git a/core/globals.cpp b/core/globals.cpp
index e760bc00d4..b822f52f15 100644
--- a/core/globals.cpp
+++ b/core/globals.cpp
@@ -1332,17 +1332,18 @@ Variant _GLOBAL_DEF( const String& p_var, const Variant& p_default) {
void Globals::add_singleton(const Singleton &p_singleton) {
singletons.push_back(p_singleton);
+ singleton_ptrs[p_singleton.name]=p_singleton.ptr;
}
Object* Globals::get_singleton_object(const String& p_name) const {
- for(const List<Singleton>::Element *E=singletons.front();E;E=E->next()) {
- if (E->get().name == p_name) {
- return E->get().ptr;
- };
- };
- return NULL;
+ const Map<StringName,Object*>::Element *E=singleton_ptrs.find(p_name);
+ if (!E)
+ return NULL;
+ else
+ return E->get();
+
};
bool Globals::has_singleton(const String& p_name) const {
@@ -1375,6 +1376,25 @@ Vector<String> Globals::get_optimizer_presets() const {
}
+void Globals::_add_property_info_bind(const Dictionary& p_info) {
+
+ ERR_FAIL_COND(!p_info.has("name"));
+ ERR_FAIL_COND(!p_info.has("type"));
+
+ PropertyInfo pinfo;
+ pinfo.name = p_info["name"];
+ ERR_FAIL_COND(!props.has(pinfo.name));
+ pinfo.type = Variant::Type(p_info["type"].operator int());
+ ERR_FAIL_INDEX(pinfo.type, Variant::VARIANT_MAX);
+
+ if (p_info.has("hint"))
+ pinfo.hint = PropertyHint(p_info["hint"].operator int());
+ if (p_info.has("hint_string"))
+ pinfo.hint_string = p_info["hint_string"];
+
+ set_custom_property_info(pinfo.name, pinfo);
+}
+
void Globals::set_custom_property_info(const String& p_prop,const PropertyInfo& p_info) {
ERR_FAIL_COND(!props.has(p_prop));
@@ -1399,6 +1419,7 @@ void Globals::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_order","name"),&Globals::get_order);
ObjectTypeDB::bind_method(_MD("set_persisting","name","enable"),&Globals::set_persisting);
ObjectTypeDB::bind_method(_MD("is_persisting","name"),&Globals::is_persisting);
+ ObjectTypeDB::bind_method(_MD("add_property_info", "hint"),&Globals::_add_property_info_bind);
ObjectTypeDB::bind_method(_MD("clear","name"),&Globals::clear);
ObjectTypeDB::bind_method(_MD("localize_path","path"),&Globals::localize_path);
ObjectTypeDB::bind_method(_MD("globalize_path","path"),&Globals::globalize_path);
diff --git a/core/globals.h b/core/globals.h
index 68bb859ace..5e0bdb0e54 100644
--- a/core/globals.h
+++ b/core/globals.h
@@ -91,11 +91,14 @@ protected:
Error _save_settings_binary(const String& p_file,const Map<String,List<String> > &props,const CustomMap& p_custom=CustomMap());
List<Singleton> singletons;
+ Map<StringName,Object*> singleton_ptrs;
Error _save_custom_bnd(const String& p_file);
bool _load_resource_pack(const String& p_pack);
+ void _add_property_info_bind(const Dictionary& p_info);
+
protected:
static void _bind_methods();
diff --git a/core/input_map.cpp b/core/input_map.cpp
index 08ee8138a3..3a0f9596f5 100644
--- a/core/input_map.cpp
+++ b/core/input_map.cpp
@@ -290,6 +290,10 @@ bool InputMap::event_is_joy_motion_action_pressed(const InputEvent& p_event) con
}
+const Map<StringName, InputMap::Action>& InputMap::get_action_map() const {
+ return input_map;
+}
+
void InputMap::load_from_globals() {
input_map.clear();;
diff --git a/core/input_map.h b/core/input_map.h
index dc5a911963..a224765d8c 100644
--- a/core/input_map.h
+++ b/core/input_map.h
@@ -35,12 +35,14 @@
class InputMap : public Object {
OBJ_TYPE( InputMap, Object );
- static InputMap *singleton;
-
+public:
struct Action {
int id;
List<InputEvent> inputs;
};
+private:
+ static InputMap *singleton;
+
mutable Map<StringName, Action> input_map;
mutable Map<int,StringName> input_id_map;
@@ -72,7 +74,7 @@ public:
bool event_is_action(const InputEvent& p_event, const StringName& p_action) const;
bool event_is_joy_motion_action_pressed(const InputEvent& p_event) const;
-
+ const Map<StringName, Action>& get_action_map() const;
void load_from_globals();
void load_default();
diff --git a/core/io/compression.cpp b/core/io/compression.cpp
index a17e358cbb..ca44d24911 100644
--- a/core/io/compression.cpp
+++ b/core/io/compression.cpp
@@ -60,6 +60,10 @@ int Compression::compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size,M
strm.avail_in=p_src_size;
int aout = deflateBound(&strm,p_src_size);;
+ /*if (aout>p_src_size) {
+ deflateEnd(&strm);
+ return -1;
+ }*/
strm.avail_out=aout;
strm.next_in=(Bytef*)p_src;
strm.next_out=p_dst;
@@ -107,19 +111,21 @@ int Compression::get_max_compressed_buffer_size(int p_src_size,Mode p_mode){
-void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode){
+int Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode){
switch(p_mode) {
case MODE_FASTLZ: {
+ int ret_size=0;
+
if (p_dst_max_size<16) {
uint8_t dst[16];
- fastlz_decompress(p_src,p_src_size,dst,16);
+ ret_size = fastlz_decompress(p_src,p_src_size,dst,16);
copymem(p_dst,dst,p_dst_max_size);
} else {
- fastlz_decompress(p_src,p_src_size,p_dst,p_dst_max_size);
+ ret_size = fastlz_decompress(p_src,p_src_size,p_dst,p_dst_max_size);
}
- return;
+ return ret_size;
} break;
case MODE_DEFLATE: {
@@ -130,7 +136,7 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *
strm.avail_in= 0;
strm.next_in=Z_NULL;
int err = inflateInit(&strm);
- ERR_FAIL_COND(err!=Z_OK);
+ ERR_FAIL_COND_V(err!=Z_OK,-1);
strm.avail_in=p_src_size;
strm.avail_out=p_dst_max_size;
@@ -138,11 +144,12 @@ void Compression::decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *
strm.next_out=p_dst;
err = inflate(&strm,Z_FINISH);
+ int total = strm.total_out;
inflateEnd(&strm);
- ERR_FAIL_COND(err!=Z_STREAM_END);
- return;
+ ERR_FAIL_COND_V(err!=Z_STREAM_END,-1);
+ return total;
} break;
}
- ERR_FAIL();
+ ERR_FAIL_V(-1);
}
diff --git a/core/io/compression.h b/core/io/compression.h
index 07a293c940..e0a4d31a51 100644
--- a/core/io/compression.h
+++ b/core/io/compression.h
@@ -43,7 +43,7 @@ public:
static int compress(uint8_t *p_dst, const uint8_t *p_src, int p_src_size,Mode p_mode=MODE_FASTLZ);
static int get_max_compressed_buffer_size(int p_src_size,Mode p_mode=MODE_FASTLZ);
- static void decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode=MODE_FASTLZ);
+ static int decompress(uint8_t *p_dst, int p_dst_max_size, const uint8_t *p_src, int p_src_size,Mode p_mode=MODE_FASTLZ);
Compression();
};
diff --git a/core/io/networked_multiplayer_peer.cpp b/core/io/networked_multiplayer_peer.cpp
index 851064b6e8..47e5f3729c 100644
--- a/core/io/networked_multiplayer_peer.cpp
+++ b/core/io/networked_multiplayer_peer.cpp
@@ -5,25 +5,34 @@ void NetworkedMultiplayerPeer::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_transfer_mode","mode"), &NetworkedMultiplayerPeer::set_transfer_mode );
ObjectTypeDB::bind_method(_MD("set_target_peer","id"), &NetworkedMultiplayerPeer::set_target_peer );
- ObjectTypeDB::bind_method(_MD("set_channel","id"), &NetworkedMultiplayerPeer::set_channel );
ObjectTypeDB::bind_method(_MD("get_packet_peer"), &NetworkedMultiplayerPeer::get_packet_peer );
- ObjectTypeDB::bind_method(_MD("get_packet_channel"), &NetworkedMultiplayerPeer::get_packet_channel );
ObjectTypeDB::bind_method(_MD("poll"), &NetworkedMultiplayerPeer::poll );
ObjectTypeDB::bind_method(_MD("get_connection_status"), &NetworkedMultiplayerPeer::get_connection_status );
+ ObjectTypeDB::bind_method(_MD("get_unique_id"), &NetworkedMultiplayerPeer::get_unique_id );
+
+ ObjectTypeDB::bind_method(_MD("set_refuse_new_connections","enable"), &NetworkedMultiplayerPeer::set_refuse_new_connections );
+ ObjectTypeDB::bind_method(_MD("is_refusing_new_connections"), &NetworkedMultiplayerPeer::is_refusing_new_connections );
BIND_CONSTANT( TRANSFER_MODE_UNRELIABLE );
+ BIND_CONSTANT( TRANSFER_MODE_UNRELIABLE_ORDERED );
BIND_CONSTANT( TRANSFER_MODE_RELIABLE );
- BIND_CONSTANT( TRANSFER_MODE_ORDERED );
BIND_CONSTANT( CONNECTION_DISCONNECTED );
BIND_CONSTANT( CONNECTION_CONNECTING );
BIND_CONSTANT( CONNECTION_CONNECTED );
- ADD_SIGNAL( MethodInfo("peer_connected",PropertyInfo(Variant::STRING,"id")));
- ADD_SIGNAL( MethodInfo("peer_disconnected",PropertyInfo(Variant::STRING,"id")));
+ BIND_CONSTANT( TARGET_PEER_BROADCAST );
+ BIND_CONSTANT( TARGET_PEER_SERVER );
+
+
+ ADD_SIGNAL( MethodInfo("peer_connected",PropertyInfo(Variant::INT,"id")));
+ ADD_SIGNAL( MethodInfo("peer_disconnected",PropertyInfo(Variant::INT,"id")));
+ ADD_SIGNAL( MethodInfo("server_disconnected"));
+ ADD_SIGNAL( MethodInfo("connection_succeeded") );
+ ADD_SIGNAL( MethodInfo("connection_failed") );
}
NetworkedMultiplayerPeer::NetworkedMultiplayerPeer() {
diff --git a/core/io/networked_multiplayer_peer.h b/core/io/networked_multiplayer_peer.h
index 7071a52d7b..485200a9a9 100644
--- a/core/io/networked_multiplayer_peer.h
+++ b/core/io/networked_multiplayer_peer.h
@@ -11,10 +11,14 @@ protected:
static void _bind_methods();
public:
+ enum {
+ TARGET_PEER_BROADCAST=0,
+ TARGET_PEER_SERVER=1
+ };
enum TransferMode {
TRANSFER_MODE_UNRELIABLE,
+ TRANSFER_MODE_UNRELIABLE_ORDERED,
TRANSFER_MODE_RELIABLE,
- TRANSFER_MODE_ORDERED
};
enum ConnectionStatus {
@@ -25,17 +29,20 @@ public:
virtual void set_transfer_mode(TransferMode p_mode)=0;
- virtual void set_target_peer(const StringName& p_peer_id)=0;
- virtual void set_channel(int p_channel)=0;
-
+ virtual void set_target_peer(int p_peer_id)=0;
- virtual StringName get_packet_peer() const=0;
- virtual int get_packet_channel() const=0;
+ virtual int get_packet_peer() const=0;
virtual bool is_server() const=0;
virtual void poll()=0;
+ virtual int get_unique_id() const=0;
+
+ virtual void set_refuse_new_connections(bool p_enable)=0;
+ virtual bool is_refusing_new_connections() const=0;
+
+
virtual ConnectionStatus get_connection_status() const=0;
NetworkedMultiplayerPeer();
diff --git a/core/io/resource_format_binary.cpp b/core/io/resource_format_binary.cpp
index a620dc0fef..0544fd6ba8 100644
--- a/core/io/resource_format_binary.cpp
+++ b/core/io/resource_format_binary.cpp
@@ -2175,6 +2175,9 @@ Error ResourceFormatSaverBinaryInstance::save(const String &p_path,const RES& p_
if (takeover_paths) {
r->set_path(p_path+"::"+itos(r->get_subindex()),true);
}
+#ifdef TOOLS_ENABLED
+ r->set_edited(false);
+#endif
} else {
save_unicode_string(r->get_path()); //actual external
}
diff --git a/core/io/resource_format_xml.cpp b/core/io/resource_format_xml.cpp
index 0d545b16f5..44fbaf02ac 100644
--- a/core/io/resource_format_xml.cpp
+++ b/core/io/resource_format_xml.cpp
@@ -2800,6 +2800,10 @@ Error ResourceFormatSaverXMLInstance::save(const String &p_path,const RES& p_res
if (takeover_paths) {
res->set_path(p_path+"::"+itos(idx),true);
}
+#ifdef TOOLS_ENABLED
+ res->set_edited(false);
+#endif
+
}
write_string("\n",false);
diff --git a/core/io/stream_peer.cpp b/core/io/stream_peer.cpp
index 306e7d8c9d..baaeacaf18 100644
--- a/core/io/stream_peer.cpp
+++ b/core/io/stream_peer.cpp
@@ -222,6 +222,7 @@ void StreamPeer::put_double(double p_val){
void StreamPeer::put_utf8_string(const String& p_string) {
CharString cs=p_string.utf8();
+ put_u32(p_string.length());
put_data((const uint8_t*)cs.get_data(),cs.length());
}
@@ -348,8 +349,10 @@ String StreamPeer::get_string(int p_bytes){
ERR_FAIL_COND_V(p_bytes<0,String());
Vector<char> buf;
- buf.resize(p_bytes+1);
- get_data((uint8_t*)&buf[0],p_bytes);
+ Error err = buf.resize(p_bytes+1);
+ ERR_FAIL_COND_V(err!=OK,String());
+ err = get_data((uint8_t*)&buf[0],p_bytes);
+ ERR_FAIL_COND_V(err!=OK,String());
buf[p_bytes]=0;
return buf.ptr();
@@ -359,8 +362,10 @@ String StreamPeer::get_utf8_string(int p_bytes){
ERR_FAIL_COND_V(p_bytes<0,String());
Vector<uint8_t> buf;
- buf.resize(p_bytes);
- get_data(buf.ptr(),p_bytes);
+ Error err = buf.resize(p_bytes);
+ ERR_FAIL_COND_V(err!=OK,String());
+ err = get_data(buf.ptr(),p_bytes);
+ ERR_FAIL_COND_V(err!=OK,String());
String ret;
ret.parse_utf8((const char*)buf.ptr(),buf.size());
@@ -371,8 +376,10 @@ Variant StreamPeer::get_var(){
int len = get_32();
Vector<uint8_t> var;
- var.resize(len);
- get_data(var.ptr(),len);
+ Error err = var.resize(len);
+ ERR_FAIL_COND_V(err!=OK,Variant());
+ err = get_data(var.ptr(),len);
+ ERR_FAIL_COND_V(err!=OK,Variant());
Variant ret;
decode_variant(ret,var.ptr(),len);
@@ -420,3 +427,128 @@ void StreamPeer::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_utf8_string","bytes"),&StreamPeer::get_utf8_string);
ObjectTypeDB::bind_method(_MD("get_var:Variant"),&StreamPeer::get_var);
}
+////////////////////////////////
+
+
+void StreamPeerBuffer::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("seek","pos"),&StreamPeerBuffer::seek);
+ ObjectTypeDB::bind_method(_MD("get_size"),&StreamPeerBuffer::get_size);
+ ObjectTypeDB::bind_method(_MD("get_pos"),&StreamPeerBuffer::get_pos);
+ ObjectTypeDB::bind_method(_MD("resize","size"),&StreamPeerBuffer::resize);
+ ObjectTypeDB::bind_method(_MD("set_data_array","data"),&StreamPeerBuffer::set_data_array);
+ ObjectTypeDB::bind_method(_MD("get_data_array"),&StreamPeerBuffer::get_data_array);
+ ObjectTypeDB::bind_method(_MD("clear"),&StreamPeerBuffer::clear);
+ ObjectTypeDB::bind_method(_MD("duplicate:StreamPeerBuffer"),&StreamPeerBuffer::duplicate);
+
+}
+
+
+Error StreamPeerBuffer::put_data(const uint8_t* p_data,int p_bytes) {
+
+ if (p_bytes<=0)
+ return OK;
+
+ if (pointer+p_bytes > data.size()) {
+ data.resize(pointer+p_bytes);
+
+ }
+
+ DVector<uint8_t>::Write w = data.write();
+ copymem(&w[pointer],p_data,p_bytes);
+
+ pointer+=p_bytes;
+ return OK;
+}
+
+Error StreamPeerBuffer::put_partial_data(const uint8_t* p_data,int p_bytes, int &r_sent){
+
+ r_sent=p_bytes;
+ return put_data(p_data,p_bytes);
+}
+
+Error StreamPeerBuffer::get_data(uint8_t* p_buffer, int p_bytes){
+
+ int recv;
+ get_partial_data(p_buffer,p_bytes,recv);
+ if (recv!=p_bytes)
+ return ERR_INVALID_PARAMETER;
+
+ return OK;
+
+}
+Error StreamPeerBuffer::get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received){
+
+
+ if (pointer+p_bytes > data.size()) {
+ r_received=data.size()-pointer;
+ if (r_received<=0) {
+ r_received=0;
+ return OK; //you got 0
+ }
+ } else {
+ r_received=p_bytes;
+ }
+
+ DVector<uint8_t>::Read r = data.read();
+ copymem(p_buffer,r.ptr(),r_received);
+}
+
+int StreamPeerBuffer::get_available_bytes() const {
+
+ return data.size()-pointer;
+}
+
+void StreamPeerBuffer::seek(int p_pos){
+
+ ERR_FAIL_COND(p_pos < 0);
+ ERR_FAIL_COND(p_pos > data.size());
+ pointer=p_pos;
+}
+int StreamPeerBuffer::get_size() const{
+
+ return data.size();
+}
+
+int StreamPeerBuffer::get_pos() const {
+
+ return pointer;
+}
+
+void StreamPeerBuffer::resize(int p_size){
+
+ data.resize(p_size);
+}
+
+void StreamPeerBuffer::set_data_array(const DVector<uint8_t> & p_data){
+
+ data=p_data;
+ pointer=0;
+}
+
+DVector<uint8_t> StreamPeerBuffer::get_data_array() const{
+
+ return data;
+}
+
+
+void StreamPeerBuffer::clear() {
+
+ data.resize(0);
+ pointer=0;
+}
+
+
+Ref<StreamPeerBuffer> StreamPeerBuffer::duplicate() const {
+
+ Ref<StreamPeerBuffer> spb;
+ spb.instance();
+ spb->data=data;
+ return spb;
+}
+
+
+StreamPeerBuffer::StreamPeerBuffer() {
+
+ pointer=0;
+}
diff --git a/core/io/stream_peer.h b/core/io/stream_peer.h
index 970e6695a5..f28e6f594d 100644
--- a/core/io/stream_peer.h
+++ b/core/io/stream_peer.h
@@ -91,4 +91,40 @@ public:
StreamPeer() { big_endian=false; }
};
+
+class StreamPeerBuffer : public StreamPeer {
+
+ OBJ_TYPE(StreamPeerBuffer,StreamPeer);
+
+ DVector<uint8_t> data;
+ int pointer;
+protected:
+
+ static void _bind_methods();
+public:
+ Error put_data(const uint8_t* p_data,int p_bytes);
+ Error put_partial_data(const uint8_t* p_data,int p_bytes, int &r_sent);
+
+ Error get_data(uint8_t* p_buffer, int p_bytes);
+ Error get_partial_data(uint8_t* p_buffer, int p_bytes,int &r_received);
+
+ virtual int get_available_bytes() const;
+
+ void seek(int p_pos);
+ int get_size() const;
+ int get_pos() const;
+ void resize(int p_size);
+
+
+ void set_data_array(const DVector<uint8_t> & p_data);
+ DVector<uint8_t> get_data_array() const;
+
+ void clear();
+
+ Ref<StreamPeerBuffer> duplicate() const;
+
+ StreamPeerBuffer();
+};
+
+
#endif // STREAM_PEER_H
diff --git a/core/math/math_2d.h b/core/math/math_2d.h
index fbf700fb9c..90aae9fe50 100644
--- a/core/math/math_2d.h
+++ b/core/math/math_2d.h
@@ -618,6 +618,15 @@ struct Matrix32 {
operator String() const;
+ Matrix32(real_t xx, real_t xy, real_t yx, real_t yy, real_t ox, real_t oy) {
+
+ elements[0][0] = xx;
+ elements[0][1] = xy;
+ elements[1][0] = yx;
+ elements[1][1] = yy;
+ elements[2][0] = ox;
+ elements[2][1] = oy;
+ }
Matrix32(real_t p_rot, const Vector2& p_pos);
Matrix32() { elements[0][0]=1.0; elements[1][1]=1.0; }
diff --git a/core/math/vector3.cpp b/core/math/vector3.cpp
index 8afd73f482..b4a13d8f6d 100644
--- a/core/math/vector3.cpp
+++ b/core/math/vector3.cpp
@@ -65,13 +65,9 @@ int Vector3::max_axis() const {
void Vector3::snap(float p_val) {
- x+=p_val/2.0;
- x-=Math::fmod(x,p_val);
- y+=p_val/2.0;
- y-=Math::fmod(y,p_val);
- z+=p_val/2.0;
- z-=Math::fmod(z,p_val);
-
+ x=Math::stepify(x,p_val);
+ y=Math::stepify(y,p_val);
+ z=Math::stepify(z,p_val);
}
Vector3 Vector3::snapped(float p_val) const {
diff --git a/core/method_bind.h b/core/method_bind.h
index 072953743c..04ff5c22c6 100644
--- a/core/method_bind.h
+++ b/core/method_bind.h
@@ -52,6 +52,7 @@ enum MethodFlags {
METHOD_FLAG_REVERSE=16, // used for events
METHOD_FLAG_VIRTUAL=32,
METHOD_FLAG_FROM_SCRIPT=64,
+ METHOD_FLAG_VARARG=128,
METHOD_FLAGS_DEFAULT=METHOD_FLAG_NORMAL,
};
@@ -229,7 +230,7 @@ public:
Vector<StringName> get_argument_names() const;
#endif
void set_hint_flags(uint32_t p_hint) { hint_flags=p_hint; }
- uint32_t get_hint_flags() const { return hint_flags|(is_const()?METHOD_FLAG_CONST:0); }
+ uint32_t get_hint_flags() const { return hint_flags|(is_const()?METHOD_FLAG_CONST:0)|(is_vararg()?METHOD_FLAG_VARARG:0); }
virtual String get_instance_type() const=0;
_FORCE_INLINE_ int get_argument_count() const { return argument_count; };
@@ -267,7 +268,7 @@ public:
_FORCE_INLINE_ int get_method_id() const { return method_id; }
_FORCE_INLINE_ bool is_const() const { return _const; }
_FORCE_INLINE_ bool has_return() const { return _returns; }
-
+ virtual bool is_vararg() const { return false; }
void set_default_arguments(const Vector<Variant>& p_defargs);
@@ -277,7 +278,7 @@ public:
template<class T>
-class MethodBindNative : public MethodBind {
+class MethodBindVarArg : public MethodBind {
public:
typedef Variant (T::*NativeCall)(const Variant**,int ,Variant::CallError &);
protected:
@@ -319,7 +320,9 @@ public:
}
#ifdef PTRCALL_ENABLED
- virtual void ptrcall(Object* p_object,const void** p_args,void* r_ret) {} //todo
+ virtual void ptrcall(Object* p_object,const void** p_args,void* r_ret) {
+ ERR_FAIL(); //can't call
+ } //todo
#endif
@@ -327,14 +330,16 @@ public:
virtual bool is_const() const { return false; }
virtual String get_instance_type() const { return T::get_type_static(); }
- MethodBindNative() { call_method=NULL; _set_returns(true);}
+ virtual bool is_vararg() const { return true; }
+
+ MethodBindVarArg() { call_method=NULL; _set_returns(true);}
};
template<class T >
-MethodBind* create_native_method_bind( Variant (T::*p_method)(const Variant**,int ,Variant::CallError &), const MethodInfo& p_info ) {
+MethodBind* create_vararg_method_bind( Variant (T::*p_method)(const Variant**,int ,Variant::CallError &), const MethodInfo& p_info ) {
- MethodBindNative<T > * a = memnew( (MethodBindNative<T >) );
+ MethodBindVarArg<T > * a = memnew( (MethodBindVarArg<T >) );
a->set_method(p_method);
a->set_method_info(p_info);
return a;
diff --git a/core/object.cpp b/core/object.cpp
index 26319d42dd..81fdc2a90c 100644
--- a/core/object.cpp
+++ b/core/object.cpp
@@ -59,30 +59,112 @@ struct _ObjectDebugLock {
#endif
+
+PropertyInfo::operator Dictionary() const {
+
+ Dictionary d;
+ d["name"]=name;
+ d["type"]=type;
+ d["hint"]=hint;
+ d["hint_string"]=hint_string;
+ d["usage"]=usage;
+ return d;
+
+}
+
+PropertyInfo PropertyInfo::from_dict(const Dictionary& p_dict) {
+
+ PropertyInfo pi;
+
+ if (p_dict.has("type"))
+ pi.type=Variant::Type(int(p_dict["type"]));
+
+ if (p_dict.has("name"))
+ pi.name=p_dict["name"];
+
+ if (p_dict.has("hint"))
+ pi.hint=PropertyHint(int(p_dict["hint"]));
+
+ if (p_dict.has("hint_string"))
+
+ pi.hint_string=p_dict["hint_string"];
+
+ if (p_dict.has("usage"))
+ pi.usage=p_dict["usage"];
+
+ return pi;
+}
+
+
Array convert_property_list(const List<PropertyInfo> * p_list) {
Array va;
for (const List<PropertyInfo>::Element *E=p_list->front();E;E=E->next()) {
- const PropertyInfo &pi = E->get();
- Dictionary d;
- d["name"]=pi.name;
- d["type"]=pi.type;
- d["hint"]=pi.hint;
- d["hint_string"]=pi.hint_string;
- d["usage"]=pi.usage;
- va.push_back(d);
+
+ va.push_back(Dictionary(E->get()));
}
return va;
}
+MethodInfo::operator Dictionary() const {
+
+
+ Dictionary d;
+ d["name"]=name;
+ d["args"]=convert_property_list(&arguments);
+ Array da;
+ for(int i=0;i<default_arguments.size();i++)
+ da.push_back(default_arguments[i]);
+ d["default_args"]=da;
+ d["flags"]=flags;
+ d["id"]=id;
+ Dictionary r = return_val;
+ d["return"]=r;
+ return d;
+
+}
+
MethodInfo::MethodInfo() {
id=0;
flags=METHOD_FLAG_NORMAL;
}
+MethodInfo MethodInfo::from_dict(const Dictionary& p_dict) {
+
+ MethodInfo mi;
+
+ if (p_dict.has("name"))
+ mi.name=p_dict["name"];
+ Array args;
+ if (p_dict.has("args")) {
+ args=p_dict["args"];
+ }
+
+ for(int i=0;i<args.size();i++) {
+ Dictionary d = args[i];
+ mi.arguments.push_back(PropertyInfo::from_dict(d));
+ }
+ Array defargs;
+ if (p_dict.has("default_args")) {
+ defargs=p_dict["default_args"];
+ }
+ for(int i=0;i<defargs.size();i++) {
+ mi.default_arguments.push_back(defargs[i]);
+ }
+
+ if (p_dict.has("return")) {
+ mi.return_val=PropertyInfo::from_dict(p_dict["return"]);
+ }
+
+ if (p_dict.has("flags"))
+ mi.flags=p_dict["flags"];
+
+ return mi;
+}
+
MethodInfo::MethodInfo(const String& p_name) {
id=0;
@@ -1012,25 +1094,6 @@ Array Object::_get_property_list_bind() const {
}
-static Dictionary _get_dict_from_method(const MethodInfo &mi) {
-
- Dictionary d;
- d["name"]=mi.name;
- d["args"]=convert_property_list(&mi.arguments);
- Array da;
- for(int i=0;i<mi.default_arguments.size();i++)
- da.push_back(mi.default_arguments[i]);
- d["default_args"]=da;
- d["flags"]=mi.flags;
- d["id"]=mi.id;
- Dictionary r;
- r["type"]=mi.return_val.type;
- r["hint"]=mi.return_val.hint;
- r["hint_string"]=mi.return_val.hint_string;
- d["return_type"]=r;
- return d;
-
-}
Array Object::_get_method_list_bind() const {
@@ -1040,7 +1103,7 @@ Array Object::_get_method_list_bind() const {
for(List<MethodInfo>::Element *E=ml.front();E;E=E->next()) {
- Dictionary d = _get_dict_from_method(E->get());
+ Dictionary d = E->get();
//va.push_back(d);
ret.push_back(d);
}
@@ -1305,7 +1368,7 @@ Array Object::_get_signal_list() const{
Array ret;
for (List<MethodInfo>::Element *E=signal_list.front();E;E=E->next()) {
- ret.push_back(_get_dict_from_method(E->get()));
+ ret.push_back(Dictionary(E->get()));
}
return ret;
@@ -1630,42 +1693,26 @@ void Object::_bind_methods() {
MethodInfo mi;
mi.name="emit_signal";
mi.arguments.push_back( PropertyInfo( Variant::STRING, "signal"));
- Vector<Variant> defargs;
- for(int i=0;i<VARIANT_ARG_MAX;i++) {
- mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i)));
- defargs.push_back(Variant());
- }
-
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"emit_signal",&Object::_emit_signal,mi,defargs);
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"emit_signal",&Object::_emit_signal,mi);
}
{
MethodInfo mi;
mi.name="call";
mi.arguments.push_back( PropertyInfo( Variant::STRING, "method"));
- Vector<Variant> defargs;
- for(int i=0;i<10;i++) {
- mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i)));
- defargs.push_back(Variant());
- }
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call:Variant",&Object::_call_bind,mi,defargs);
+
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call:Variant",&Object::_call_bind,mi);
}
{
MethodInfo mi;
mi.name="call_deferred";
mi.arguments.push_back( PropertyInfo( Variant::STRING, "method"));
- Vector<Variant> defargs;
- for(int i=0;i<VARIANT_ARG_MAX;i++) {
- mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i)));
- defargs.push_back(Variant());
- }
-
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call_deferred",&Object::_call_deferred_bind,mi,defargs);
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call_deferred",&Object::_call_deferred_bind,mi);
}
ObjectTypeDB::bind_method(_MD("callv:Variant","method","arg_array"),&Object::callv);
diff --git a/core/object.h b/core/object.h
index 400ab3070e..ac3fc51b3e 100644
--- a/core/object.h
+++ b/core/object.h
@@ -70,6 +70,14 @@ enum PropertyHint {
PROPERTY_HINT_OBJECT_ID,
PROPERTY_HINT_TYPE_STRING, ///< a type string, the hint is the base type to choose
PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE, ///< so something else can provide this (used in scripts)
+ PROPERTY_HINT_METHOD_OF_VARIANT_TYPE, ///< a method of a type
+ PROPERTY_HINT_METHOD_OF_BASE_TYPE, ///< a method of a base type
+ PROPERTY_HINT_METHOD_OF_INSTANCE, ///< a method of an instance
+ PROPERTY_HINT_METHOD_OF_SCRIPT, ///< a method of a script & base
+ PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE, ///< a property of a type
+ PROPERTY_HINT_PROPERTY_OF_BASE_TYPE, ///< a property of a base type
+ PROPERTY_HINT_PROPERTY_OF_INSTANCE, ///< a property of an instance
+ PROPERTY_HINT_PROPERTY_OF_SCRIPT, ///< a property of a script & base
PROPERTY_HINT_MAX,
};
@@ -118,6 +126,11 @@ struct PropertyInfo {
_FORCE_INLINE_ PropertyInfo added_usage(int p_fl) const { PropertyInfo pi=*this; pi.usage|=p_fl; return pi; }
+
+ operator Dictionary() const;
+
+ static PropertyInfo from_dict(const Dictionary& p_dict);
+
PropertyInfo() { type=Variant::NIL; hint=PROPERTY_HINT_NONE; usage = PROPERTY_USAGE_DEFAULT; }
PropertyInfo( Variant::Type p_type, const String p_name, PropertyHint p_hint=PROPERTY_HINT_NONE, const String& p_hint_string="",uint32_t p_usage=PROPERTY_USAGE_DEFAULT) {
type=p_type; name=p_name; hint=p_hint; hint_string=p_hint_string; usage=p_usage;
@@ -142,6 +155,9 @@ struct MethodInfo {
inline bool operator<(const MethodInfo& p_method) const { return id==p_method.id?(name < p_method.name):(id<p_method.id); }
+ operator Dictionary() const;
+
+ static MethodInfo from_dict(const Dictionary& p_dict);
MethodInfo();
MethodInfo(const String& p_name);
MethodInfo(const String& p_name, const PropertyInfo& p_param1);
diff --git a/core/object_type_db.cpp b/core/object_type_db.cpp
index ba98797a89..b6a69e3bd4 100644
--- a/core/object_type_db.cpp
+++ b/core/object_type_db.cpp
@@ -642,7 +642,7 @@ void ObjectTypeDB::get_property_list(StringName p_type, List<PropertyInfo> *p_li
TypeInfo *check=type;
while(check) {
- for(List<PropertyInfo>::Element *E=type->property_list.front();E;E=E->next()) {
+ for(List<PropertyInfo>::Element *E=check->property_list.front();E;E=E->next()) {
if (p_validator) {
diff --git a/core/object_type_db.h b/core/object_type_db.h
index 3fcd38aa31..725b424c9a 100644
--- a/core/object_type_db.h
+++ b/core/object_type_db.h
@@ -415,13 +415,13 @@ public:
#endif
template<class M>
- static MethodBind* bind_native_method(uint32_t p_flags, StringName p_name, M p_method,const MethodInfo& p_info=MethodInfo(),const Vector<Variant>& p_default_args=Vector<Variant>()) {
+ static MethodBind* bind_vararg_method(uint32_t p_flags, StringName p_name, M p_method,const MethodInfo& p_info=MethodInfo(),const Vector<Variant>& p_default_args=Vector<Variant>()) {
GLOBAL_LOCK_FUNCTION;
- MethodBind *bind = create_native_method_bind(p_method,p_info);
+ MethodBind *bind = create_vararg_method_bind(p_method,p_info);
ERR_FAIL_COND_V(!bind,NULL);
String rettype;
diff --git a/core/os/input.cpp b/core/os/input.cpp
index 531db73838..401ab7ffe2 100644
--- a/core/os/input.cpp
+++ b/core/os/input.cpp
@@ -53,6 +53,8 @@ void Input::_bind_methods() {
ObjectTypeDB::bind_method(_MD("is_mouse_button_pressed","button"),&Input::is_mouse_button_pressed);
ObjectTypeDB::bind_method(_MD("is_joy_button_pressed","device","button"),&Input::is_joy_button_pressed);
ObjectTypeDB::bind_method(_MD("is_action_pressed","action"),&Input::is_action_pressed);
+ ObjectTypeDB::bind_method(_MD("is_action_just_pressed","action"),&Input::is_action_just_pressed);
+ ObjectTypeDB::bind_method(_MD("is_action_just_released","action"),&Input::is_action_just_released);
ObjectTypeDB::bind_method(_MD("add_joy_mapping","mapping", "update_existing"),&Input::add_joy_mapping, DEFVAL(false));
ObjectTypeDB::bind_method(_MD("remove_joy_mapping","guid"),&Input::remove_joy_mapping);
ObjectTypeDB::bind_method(_MD("is_joy_known","device"),&Input::is_joy_known);
diff --git a/core/os/input.h b/core/os/input.h
index 16bcc0ff9a..665fb4ad99 100644
--- a/core/os/input.h
+++ b/core/os/input.h
@@ -55,12 +55,14 @@ public:
static Input *get_singleton();
- virtual bool is_key_pressed(int p_scancode)=0;
- virtual bool is_mouse_button_pressed(int p_button)=0;
- virtual bool is_joy_button_pressed(int p_device, int p_button)=0;
- virtual bool is_action_pressed(const StringName& p_action)=0;
-
- virtual float get_joy_axis(int p_device,int p_axis)=0;
+ virtual bool is_key_pressed(int p_scancode) const=0;
+ virtual bool is_mouse_button_pressed(int p_button) const=0;
+ virtual bool is_joy_button_pressed(int p_device, int p_button) const=0;
+ virtual bool is_action_pressed(const StringName& p_action) const=0;
+ virtual bool is_action_just_pressed(const StringName& p_action) const=0;
+ virtual bool is_action_just_released(const StringName& p_action) const=0;
+
+ virtual float get_joy_axis(int p_device,int p_axis) const=0;
virtual String get_joy_name(int p_idx)=0;
virtual Array get_connected_joysticks()=0;
virtual void joy_connection_changed(int p_idx, bool p_connected, String p_name, String p_guid)=0;
@@ -80,9 +82,9 @@ public:
virtual void warp_mouse_pos(const Vector2& p_to)=0;
- virtual Vector3 get_accelerometer()=0;
- virtual Vector3 get_magnetometer()=0;
- virtual Vector3 get_gyroscope()=0;
+ virtual Vector3 get_accelerometer() const=0;
+ virtual Vector3 get_magnetometer() const=0;
+ virtual Vector3 get_gyroscope() const=0;
virtual void action_press(const StringName& p_action)=0;
virtual void action_release(const StringName& p_action)=0;
diff --git a/core/os/input_event.cpp b/core/os/input_event.cpp
index 8c79657c64..9d920724e1 100644
--- a/core/os/input_event.cpp
+++ b/core/os/input_event.cpp
@@ -34,8 +34,56 @@
*/
bool InputEvent::operator==(const InputEvent &p_event) const {
+ if (type != p_event.type){
+ return false;
+ }
- return true;
+ switch(type) {
+ case NONE:
+ return true;
+ case KEY:
+ return key.unicode == p_event.key.unicode
+ && key.scancode == p_event.key.scancode
+ && key.echo == p_event.key.echo
+ && key.pressed == p_event.key.pressed
+ && key.mod == p_event.key.mod;
+ case MOUSE_MOTION:
+ return mouse_motion.x == p_event.mouse_motion.x
+ && mouse_motion.y == p_event.mouse_motion.y
+ && mouse_motion.relative_x == p_event.mouse_motion.relative_y
+ && mouse_motion.button_mask == p_event.mouse_motion.button_mask
+ && key.mod == p_event.key.mod;
+ case MOUSE_BUTTON:
+ return mouse_button.pressed == p_event.mouse_button.pressed
+ && mouse_button.x == p_event.mouse_button.x
+ && mouse_button.y == p_event.mouse_button.y
+ && mouse_button.button_index == p_event.mouse_button.button_index
+ && mouse_button.button_mask == p_event.mouse_button.button_mask
+ && key.mod == p_event.key.mod;
+ case JOYSTICK_MOTION:
+ return joy_motion.axis == p_event.joy_motion.axis
+ && joy_motion.axis_value == p_event.joy_motion.axis_value;
+ case JOYSTICK_BUTTON:
+ return joy_button.pressed == p_event.joy_button.pressed
+ && joy_button.button_index == p_event.joy_button.button_index
+ && joy_button.pressure == p_event.joy_button.pressure;
+ case SCREEN_TOUCH:
+ return screen_touch.pressed == p_event.screen_touch.pressed
+ && screen_touch.index == p_event.screen_touch.index
+ && screen_touch.x == p_event.screen_touch.x
+ && screen_touch.y == p_event.screen_touch.y;
+ case SCREEN_DRAG:
+ return screen_drag.index == p_event.screen_drag.index
+ && screen_drag.x == p_event.screen_drag.x
+ && screen_drag.y == p_event.screen_drag.y;
+ case ACTION:
+ return action.action == p_event.action.action
+ && action.pressed == p_event.action.pressed;
+ default:
+ ERR_PRINT("No logic to compare InputEvents of this type, this shouldn't happen.");
+ }
+
+ return false;
}
InputEvent::operator String() const {
diff --git a/core/os/os.cpp b/core/os/os.cpp
index 5f86962048..ee32476234 100644
--- a/core/os/os.cpp
+++ b/core/os/os.cpp
@@ -587,6 +587,9 @@ OS::OS() {
_time_scale=1.0;
_pixel_snap=false;
_allow_hidpi=true;
+ _fixed_frames=0;
+ _idle_frames=0;
+ _in_fixed=false;
Math::seed(1234567);
}
diff --git a/core/os/os.h b/core/os/os.h
index 2521d67e29..8e9293b3c8 100644
--- a/core/os/os.h
+++ b/core/os/os.h
@@ -62,6 +62,10 @@ class OS {
bool _pixel_snap;
bool _allow_hidpi;
+ uint64_t _fixed_frames;
+ uint64_t _idle_frames;
+ bool _in_fixed;
+
char *last_error;
public:
@@ -282,6 +286,10 @@ public:
uint64_t get_frames_drawn();
+ uint64_t get_fixed_frames() const { return _fixed_frames; }
+ uint64_t get_idle_frames() const { return _idle_frames; }
+ bool is_in_fixed_frame() const { return _in_fixed; }
+
bool is_stdout_verbose() const;
enum CursorShape {
diff --git a/core/path_db.cpp b/core/path_db.cpp
index d0feda5c82..132cc83a35 100644
--- a/core/path_db.cpp
+++ b/core/path_db.cpp
@@ -363,6 +363,7 @@ NodePath::NodePath(const String& p_path) {
from=i+1;
}
+
}
path=path.substr(0,subpath_pos);
@@ -380,6 +381,8 @@ NodePath::NodePath(const String& p_path) {
last_is_slash=false;
}
+
+
}
if (slices==0 && !absolute && !property)
@@ -413,6 +416,7 @@ NodePath::NodePath(const String& p_path) {
} else {
last_is_slash=false;
}
+
}
diff --git a/core/register_core_types.cpp b/core/register_core_types.cpp
index 97bd5f2a32..3de26573f4 100644
--- a/core/register_core_types.cpp
+++ b/core/register_core_types.cpp
@@ -118,6 +118,7 @@ void register_core_types() {
ObjectTypeDB::register_type<Resource>();
ObjectTypeDB::register_type<FuncRef>();
ObjectTypeDB::register_virtual_type<StreamPeer>();
+ ObjectTypeDB::register_type<StreamPeerBuffer>();
ObjectTypeDB::register_create_type<StreamPeerTCP>();
ObjectTypeDB::register_create_type<TCP_Server>();
ObjectTypeDB::register_create_type<PacketPeerUDP>();
diff --git a/core/script_debugger_remote.cpp b/core/script_debugger_remote.cpp
index 99d1e22c07..1ac0907967 100644
--- a/core/script_debugger_remote.cpp
+++ b/core/script_debugger_remote.cpp
@@ -219,7 +219,8 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
if (F->get().get_type()==Variant::OBJECT) {
packet_peer_stream->put_var("*"+E->get());
- packet_peer_stream->put_var(safe_get_instance_id(F->get()));
+ String pretty_print = F->get().operator String();
+ packet_peer_stream->put_var(pretty_print.ascii().get_data());
} else {
packet_peer_stream->put_var(E->get());
packet_peer_stream->put_var(F->get());
@@ -242,7 +243,8 @@ void ScriptDebuggerRemote::debug(ScriptLanguage *p_script,bool p_can_continue) {
if (F->get().get_type()==Variant::OBJECT) {
packet_peer_stream->put_var("*"+E->get());
- packet_peer_stream->put_var(safe_get_instance_id(F->get()));
+ String pretty_print = F->get().operator String();
+ packet_peer_stream->put_var(pretty_print.ascii().get_data());
} else {
packet_peer_stream->put_var(E->get());
packet_peer_stream->put_var(F->get());
diff --git a/core/script_language.cpp b/core/script_language.cpp
index 75d8b6d285..fa1d01d3eb 100644
--- a/core/script_language.cpp
+++ b/core/script_language.cpp
@@ -33,6 +33,7 @@ int ScriptServer::_language_count=0;
bool ScriptServer::scripting_enabled=true;
bool ScriptServer::reload_scripts_on_save=false;
+ScriptEditRequestFunction ScriptServer::edit_request_func=NULL;
void Script::_notification( int p_what) {
diff --git a/core/script_language.h b/core/script_language.h
index 0e3f298790..1b037e908c 100644
--- a/core/script_language.h
+++ b/core/script_language.h
@@ -38,6 +38,8 @@
class ScriptLanguage;
+typedef void (*ScriptEditRequestFunction)(const String& p_path);
+
class ScriptServer {
enum {
@@ -50,6 +52,8 @@ class ScriptServer {
static bool reload_scripts_on_save;
public:
+ static ScriptEditRequestFunction edit_request_func;
+
static void set_scripting_enabled(bool p_enabled);
static bool is_scripting_enabled();
static int get_language_count();
@@ -88,6 +92,8 @@ public:
virtual bool can_instance() const=0;
+ virtual Ref<Script> get_base_script() const=0; //for script inheritance
+
virtual StringName get_instance_base_type() const=0; // this may not work in all scripts, will return empty if so
virtual ScriptInstance* instance_create(Object *p_this)=0;
virtual bool instance_has(const Object *p_this) const=0;
@@ -113,7 +119,8 @@ public:
virtual bool get_property_default_value(const StringName& p_property,Variant& r_value) const=0;
virtual void update_exports() {} //editor tool
- virtual void get_method_list(List<MethodInfo> *p_list) const=0;
+ virtual void get_script_method_list(List<MethodInfo> *p_list) const=0;
+ virtual void get_script_property_list(List<PropertyInfo> *p_list) const=0;
Script() {}
@@ -121,6 +128,8 @@ public:
class ScriptInstance {
public:
+
+
virtual bool set(const StringName& p_name, const Variant& p_value)=0;
virtual bool get(const StringName& p_name, Variant &r_ret) const=0;
virtual void get_property_list(List<PropertyInfo> *p_properties) const=0;
@@ -148,6 +157,17 @@ public:
virtual bool is_placeholder() const { return false; }
+ enum RPCMode {
+ RPC_MODE_DISABLED,
+ RPC_MODE_REMOTE,
+ RPC_MODE_SYNC,
+ RPC_MODE_MASTER,
+ RPC_MODE_SLAVE,
+ };
+
+ virtual RPCMode get_rpc_mode(const StringName& p_method) const=0;
+ virtual RPCMode get_rset_mode(const StringName& p_variable) const=0;
+
virtual ScriptLanguage *get_language()=0;
virtual ~ScriptInstance();
};
@@ -279,6 +299,9 @@ public:
virtual bool is_placeholder() const { return true; }
+ virtual RPCMode get_rpc_mode(const StringName& p_method) const { return RPC_MODE_DISABLED; }
+ virtual RPCMode get_rset_mode(const StringName& p_variable) const { return RPC_MODE_DISABLED; }
+
PlaceHolderScriptInstance(ScriptLanguage *p_language, Ref<Script> p_script,Object *p_owner);
~PlaceHolderScriptInstance();
diff --git a/core/string_db.cpp b/core/string_db.cpp
index 9a693f88e9..bf92c4eac4 100644
--- a/core/string_db.cpp
+++ b/core/string_db.cpp
@@ -183,7 +183,8 @@ StringName::StringName(const char *p_name) {
ERR_FAIL_COND(!configured);
- ERR_FAIL_COND( !p_name || !p_name[0]);
+ if (!p_name || p_name[0]==0)
+ return; //empty, ignore
_global_lock();
@@ -288,6 +289,9 @@ StringName::StringName(const String& p_name) {
ERR_FAIL_COND(!configured);
+ if (p_name==String())
+ return;
+
_global_lock();
uint32_t hash = p_name.hash();
diff --git a/core/translation.cpp b/core/translation.cpp
index 01789747ea..4592d00598 100644
--- a/core/translation.cpp
+++ b/core/translation.cpp
@@ -32,11 +32,23 @@
#include "os/os.h"
static const char* locale_list[]={
+"aa", // Afar
+"aa_DJ", // Afar (Djibouti)
+"aa_ER", // Afar (Eritrea)
+"aa_ET", // Afar (Ethiopia)
+"af", // Afrikaans
+"af_ZA", // Afrikaans (South Africa)
+"agr_PE", // Aguaruna (Peru)
+"ak_GH", // Akan (Ghana)
+"am_ET", // Amharic (Ethiopia)
+"an_ES", // Aragonese (Spain)
+"anp_IN", // Angika (India)
"ar", // Arabic
"ar_AE", // Arabic (United Arab Emirates)
"ar_BH", // Arabic (Bahrain)
"ar_DZ", // Arabic (Algeria)
"ar_EG", // Arabic (Egypt)
+"ar_IN", // Arabic (India)
"ar_IQ", // Arabic (Iraq)
"ar_JO", // Arabic (Jordan)
"ar_KW", // Arabic (Kuwait)
@@ -47,48 +59,91 @@ static const char* locale_list[]={
"ar_QA", // Arabic (Qatar)
"ar_SA", // Arabic (Saudi Arabia)
"ar_SD", // Arabic (Sudan)
+"ar_SS", // Arabic (South Soudan)
"ar_SY", // Arabic (Syria)
"ar_TN", // Arabic (Tunisia)
"ar_YE", // Arabic (Yemen)
+"as_IN", // Assamese (India)
+"ast_ES", // Asturian (Spain)
+"ayc_PE", // Southern Aymara (Peru)
+"ay_PE", // Aymara (Peru)
+"az_AZ", // Azerbaijani (Azerbaijan)
"be", // Belarusian
"be_BY", // Belarusian (Belarus)
+"bem_ZM", // Bemba (Zambia)
+"ber_DZ", // Berber languages (Algeria)
+"ber_MA", // Berber languages (Morocco)
"bg", // Bulgarian
"bg_BG", // Bulgarian (Bulgaria)
+"bhb_IN", // Bhili (India)
+"bho_IN", // Bhojpuri (India)
+"bi_TV", // Bislama (Tuvalu)
"bn", // Bengali
"bn_BD", // Bengali (Bangladesh)
"bn_IN", // Bengali (India)
+"bo", // Tibetan
+"bo_CN", // Tibetan (China)
+"bo_IN", // Tibetan (India)
+"br_FR", // Breton (France)
+"brx_IN", // Bodo (India)
+"bs_BA", // Bosnian (Bosnia and Herzegovina)
+"byn_ER", // Bilin (Eritrea)
"ca", // Catalan
+"ca_AD", // Catalan (Andorra)
"ca_ES", // Catalan (Spain)
+"ca_FR", // Catalan (France)
+"ca_IT", // Catalan (Italy)
+"ce_RU", // Chechen (Russia)
+"chr_US", // Cherokee (United States)
+"cmn_TW", // Mandarin Chinese (Taiwan)
+"crh_UA", // Crimean Tatar (Ukraine)
+"csb_PL", // Kashubian (Poland)
"cs", // Czech
"cs_CZ", // Czech (Czech Republic)
+"cv_RU", // Chuvash (Russia)
+"cy_GB", // Welsh (United Kingdom)
"da", // Danish
"da_DK", // Danish (Denmark)
"de", // German
"de_AT", // German (Austria)
+"de_BE", // German (Belgium)
"de_CH", // German (Switzerland)
"de_DE", // German (Germany)
+"de_IT", // German (Italy)
"de_LU", // German (Luxembourg)
+"doi_IN", // Dogri (India)
+"dv_MV", // Dhivehi (Maldives)
+"dz_BT", // Dzongkha (Bhutan)
"el", // Greek
"el_CY", // Greek (Cyprus)
"el_GR", // Greek (Greece)
"en", // English
+"en_AG", // English (Antigua and Barbuda)
"en_AU", // English (Australia)
+"en_BW", // English (Botswana)
"en_CA", // English (Canada)
+"en_DK", // English (Denmark)
"en_GB", // English (United Kingdom)
+"en_HK", // English (Hong Kong)
"en_IE", // English (Ireland)
+"en_IL", // English (Israel)
"en_IN", // English (India)
-"en_MT", // English (Malta)
+"en_NG", // English (Nigeria)
"en_NZ", // English (New Zealand)
"en_PH", // English (Philippines)
"en_SG", // English (Singapore)
"en_US", // English (United States)
"en_ZA", // English (South Africa)
+"en_ZM", // English (Zambia)
+"en_ZW", // English (Zimbabwe)
+"eo", // Esperanto
"es", // Spanish
"es_AR", // Spanish (Argentina)
"es_BO", // Spanish (Bolivia)
"es_CL", // Spanish (Chile)
"es_CO", // Spanish (Colombia)
"es_CR", // Spanish (Costa Rica)
+"es_CU", // Spanish (Cuba)
"es_DO", // Spanish (Dominican Republic)
"es_EC", // Spanish (Ecuador)
"es_ES", // Spanish (Spain)
@@ -106,100 +161,252 @@ static const char* locale_list[]={
"es_VE", // Spanish (Venezuela)
"et", // Estonian
"et_EE", // Estonian (Estonia)
+"eu", // Basque
+"eu_ES", // Basque (Spain)
+"fa", // Persian
+"fa_IR", // Persian (Iran)
+"ff_SN", // Fulah (Senegal)
"fi", // Finnish
"fi_FI", // Finnish (Finland)
+"fil_PH", // Filipino (Philippines)
+"fo_FO", // Faroese (Faroe Islands)
"fr", // French
"fr_BE", // French (Belgium)
"fr_CA", // French (Canada)
"fr_CH", // French (Switzerland)
"fr_FR", // French (France)
"fr_LU", // French (Luxembourg)
+"fur_IT", // Friulian (Italy)
+"fy_DE", // Western Frisian (Germany)
+"fy_NL", // Western Frisian (Netherlands)
"ga", // Irish
"ga_IE", // Irish (Ireland)
-"hi", // Hindi (India)
+"gd_GB", // Scottish Gaelic (United Kingdom)
+"gez_ER", // Geez (Eritrea)
+"gez_ET", // Geez (Ethiopia)
+"gl_ES", // Galician (Spain)
+"gu_IN", // Gujarati (India)
+"gv_GB", // Manx (United Kingdom)
+"hak_TW", // Hakka Chinese (Taiwan)
+"ha_NG", // Hausa (Nigeria)
+"he", // Hebrew
+"he_IL", // Hebrew (Israel)
+"hi", // Hindi
"hi_IN", // Hindi (India)
+"hne_IN", // Chhattisgarhi (India)
"hr", // Croatian
"hr_HR", // Croatian (Croatia)
+"hsb_DE", // Upper Sorbian (Germany)
+"ht_HT", // Haitian (Haiti)
"hu", // Hungarian
"hu_HU", // Hungarian (Hungary)
-"in", // Indonesian
-"in_ID", // Indonesian (Indonesia)
+"hus_MX", // Huastec (Mexico)
+"hy_AM", // Armenian (Armenia)
+"ia_FR", // Interlingua (France)
+"id", // Indonesian
+"id_ID", // Indonesian (Indonesia)
+"ig_NG", // Igbo (Nigeria)
+"ik_CA", // Inupiaq (Canada)
"is", // Icelandic
"is_IS", // Icelandic (Iceland)
"it", // Italian
"it_CH", // Italian (Switzerland)
"it_IT", // Italian (Italy)
-"iw", // Hebrew
-"iw_IL", // Hebrew (Israel)
+"iu_CA", // Inuktitut (Canada)
"ja", // Japanese
"ja_JP", // Japanese (Japan)
-"ja_JP_JP", // Japanese (Japan,JP)
+"kab_DZ", // Kabyle (Algeria)
+"ka_GE", // Georgian (Georgia)
+"kk_KZ", // Kazakh (Kazakhstan)
+"kl_GL", // Kalaallisut (Greenland)
+"km_KH", // Central Khmer (Cambodia)
+"kn_IN", // Kannada (India)
+"kok_IN", // Konkani (India)
"ko", // Korean
"ko_KR", // Korean (South Korea)
+"ks_IN", // Kashmiri (India)
+"ku", // Kurdish
+"ku_TR", // Kurdish (Turkey)
+"kw_GB", // Cornish (United Kingdom)
+"ky_KG", // Kirghiz (Kyrgyzstan)
+"lb_LU", // Luxembourgish (Luxembourg)
+"lg_UG", // Ganda (Uganda)
+"li_BE", // Limburgan (Belgium)
+"li_NL", // Limburgan (Netherlands)
+"lij_IT", // Ligurian (Italy)
+"ln_CD", // Lingala (Congo)
+"lo_LA", // Lao (Laos)
"lt", // Lithuanian
"lt_LT", // Lithuanian (Lithuania)
"lv", // Latvian
"lv_LV", // Latvian (Latvia)
+"lzh_TW", // Literary Chinese (Taiwan)
+"mag_IN", // Magahi (India)
+"mai_IN", // Maithili (India)
+"mg_MG", // Malagasy (Madagascar)
+"mh_MH", // Marshallese (Marshall Islands)
+"mhr_RU", // Eastern Mari (Russia)
+"mi_NZ", // Maori (New Zealand)
+"miq_NI", // Mískito (Nicaragua)
"mk", // Macedonian
"mk_MK", // Macedonian (Macedonia)
+"ml_IN", // Malayalam (India)
+"mni_IN", // Manipuri (India)
+"mn_MN", // Mongolian (Mongolia)
+"mr_IN", // Marathi (India)
"ms", // Malay
"ms_MY", // Malay (Malaysia)
"mt", // Maltese
"mt_MT", // Maltese (Malta)
+"my_MM", // Burmese (Myanmar)
+"myv_RU", // Erzya (Russia)
+"nah_MX", // Nahuatl languages (Mexico)
+"nan_TW", // Min Nan Chinese (Taiwan)
+"nb", // Norwegian Bokmål
+"nb_NO", // Norwegian Bokmål (Norway)
+"nds_DE", // Low German (Germany)
+"nds_NL", // Low German (Netherlands)
+"ne_NP", // Nepali (Nepal)
+"nhn_MX", // Central Nahuatl (Mexico)
+"niu_NU", // Niuean (Niue)
+"niu_NZ", // Niuean (New Zealand)
"nl", // Dutch
+"nl_AW", // Dutch (Aruba)
"nl_BE", // Dutch (Belgium)
"nl_NL", // Dutch (Netherlands)
-"no", // Norwegian
-"no_NO", // Norwegian (Norway)
-"no_NO_NY", // Norwegian (Norway,Nynorsk)
+"nn", // Norwegian Nynorsk
+"nn_NO", // Norwegian Nynorsk (Norway)
+"nr_ZA", // South Ndebele (South Africa)
+"nso_ZA", // Pedi (South Africa)
+"oc_FR", // Occitan (France)
+"om", // Oromo
+"om_ET", // Oromo (Ethiopia)
+"om_KE", // Oromo (Kenya)
+"or_IN", // Oriya (India)
+"os_RU", // Ossetian (Russia)
+"pa_IN", // Panjabi (India)
+"pap", // Papiamento
+"pap_AN", // Papiamento (Netherlands Antilles)
+"pap_AW", // Papiamento (Aruba)
+"pap_CW", // Papiamento (Curaçao)
+"pa_PK", // Panjabi (Pakistan)
"pl", // Polish
"pl_PL", // Polish (Poland)
+"ps_AF", // Pushto (Afghanistan)
"pt", // Portuguese
"pt_BR", // Portuguese (Brazil)
"pt_PT", // Portuguese (Portugal)
+"quy_PE", // Ayacucho Quechua (Peru)
+"quz_PE", // Cusco Quechua (Peru)
+"raj_IN", // Rajasthani (India)
"ro", // Romanian
"ro_RO", // Romanian (Romania)
"ru", // Russian
"ru_RU", // Russian (Russia)
+"ru_UA", // Russian (Ukraine)
+"rw_RW", // Kinyarwanda (Rwanda)
+"sa_IN", // Sanskrit (India)
+"sat_IN", // Santali (India)
+"sc_IT", // Sardinian (Italy)
+"sd_IN", // Sindhi (India)
+"se_NO", // Northern Sami (Norway)
+"sgs_LT", // Samogitian (Lithuania)
+"shs_CA", // Shuswap (Canada)
+"sid_ET", // Sidamo (Ethiopia)
+"si_LK", // Sinhala (Sri Lanka)
"sk", // Slovak
"sk_SK", // Slovak (Slovakia)
"sl", // Slovenian
"sl_SI", // Slovenian (Slovenia)
+"so", // Somali
+"so_DJ", // Somali (Djibouti)
+"so_ET", // Somali (Ethiopia)
+"so_KE", // Somali (Kenya)
+"so_SO", // Somali (Somalia)
+"son_ML", // Songhai languages (Mali)
"sq", // Albanian
"sq_AL", // Albanian (Albania)
+"sq_KV", // Albanian (Kosovo)
+"sq_MK", // Albanian (Macedonia)
"sr", // Serbian
-"sr_BA", // Serbian (Bosnia and Herzegovina)
-"sr_CS", // Serbian (Serbia and Montenegro)
"sr_ME", // Serbian (Montenegro)
"sr_RS", // Serbian (Serbia)
+"ss_ZA", // Swati (South Africa)
+"st_ZA", // Southern Sotho (South Africa)
"sv", // Swedish
+"sv_FI", // Swedish (Finland)
"sv_SE", // Swedish (Sweden)
+"sw_KE", // Swahili (Kenya)
+"sw_TZ", // Swahili (Tanzania)
+"szl_PL", // Silesian (Poland)
+"ta", // Tamil
+"ta_IN", // Tamil (India)
+"ta_LK", // Tamil (Sri Lanka)
+"tcy_IN", // Tulu (India)
+"te_IN", // Telugu (India)
+"tg_TJ", // Tajik (Tajikistan)
+"the_NP", // Chitwania Tharu (Nepal)
"th", // Thai
"th_TH", // Thai (Thailand)
-"th_TH_TH", // Thai (Thailand,TH)
+"ti", // Tigrinya
+"ti_ER", // Tigrinya (Eritrea)
+"ti_ET", // Tigrinya (Ethiopia)
+"tig_ER", // Tigre (Eritrea)
+"tk_TM", // Turkmen (Turkmenistan)
+"tl_PH", // Tagalog (Philippines)
+"tn_ZA", // Tswana (South Africa)
"tr", // Turkish
+"tr_CY", // Turkish (Cyprus)
"tr_TR", // Turkish (Turkey)
+"ts_ZA", // Tsonga (South Africa)
+"tt_RU", // Tatar (Russia)
+"ug_CN", // Uighur (China)
"uk", // Ukrainian
"uk_UA", // Ukrainian (Ukraine)
+"unm_US", // Unami (United States)
"ur", // Urdu
"ur_IN", // Urdu (India)
"ur_PK", // Urdu (Pakistan)
+"uz", // Uzbek
+"uz_UZ", // Uzbek (Uzbekistan)
+"ve_ZA", // Venda (South Africa)
"vi", // Vietnamese
"vi_VN", // Vietnamese (Vietnam)
+"wa_BE", // Walloon (Belgium)
+"wae_CH", // Walser (Switzerland)
+"wal_ET", // Wolaytta (Ethiopia)
+"wo_SN", // Wolof (Senegal)
+"xh_ZA", // Xhosa (South Africa)
+"yi_US", // Yiddish (United States)
+"yo_NG", // Yoruba (Nigeria)
+"yue_HK", // Yue Chinese (Hong Kong)
"zh", // Chinese
"zh_CN", // Chinese (China)
"zh_HK", // Chinese (Hong Kong)
"zh_SG", // Chinese (Singapore)
"zh_TW", // Chinese (Taiwan)
+"zu_ZA", // Zulu (South Africa)
0
};
static const char* locale_names[]={
+"Afar",
+"Afar (Djibouti)",
+"Afar (Eritrea)",
+"Afar (Ethiopia)",
+"Afrikaans",
+"Afrikaans (South Africa)",
+"Aguaruna (Peru)",
+"Akan (Ghana)",
+"Amharic (Ethiopia)",
+"Aragonese (Spain)",
+"Angika (India)",
"Arabic",
"Arabic (United Arab Emirates)",
"Arabic (Bahrain)",
"Arabic (Algeria)",
"Arabic (Egypt)",
+"Arabic (India)",
"Arabic (Iraq)",
"Arabic (Jordan)",
"Arabic (Kuwait)",
@@ -210,48 +417,91 @@ static const char* locale_names[]={
"Arabic (Qatar)",
"Arabic (Saudi Arabia)",
"Arabic (Sudan)",
+"Arabic (South Soudan)",
"Arabic (Syria)",
"Arabic (Tunisia)",
"Arabic (Yemen)",
+"Assamese (India)",
+"Asturian (Spain)",
+"Southern Aymara (Peru)",
+"Aymara (Peru)",
+"Azerbaijani (Azerbaijan)",
"Belarusian",
"Belarusian (Belarus)",
+"Bemba (Zambia)",
+"Berber languages (Algeria)",
+"Berber languages (Morocco)",
"Bulgarian",
"Bulgarian (Bulgaria)",
+"Bhili (India)",
+"Bhojpuri (India)",
+"Bislama (Tuvalu)",
"Bengali",
"Bengali (Bangladesh)",
"Bengali (India)",
+"Tibetan",
+"Tibetan (China)",
+"Tibetan (India)",
+"Breton (France)",
+"Bodo (India)",
+"Bosnian (Bosnia and Herzegovina)",
+"Bilin (Eritrea)",
"Catalan",
+"Catalan (Andorra)",
"Catalan (Spain)",
+"Catalan (France)",
+"Catalan (Italy)",
+"Chechen (Russia)",
+"Cherokee (United States)",
+"Mandarin Chinese (Taiwan)",
+"Crimean Tatar (Ukraine)",
+"Kashubian (Poland)",
"Czech",
"Czech (Czech Republic)",
+"Chuvash (Russia)",
+"Welsh (United Kingdom)",
"Danish",
"Danish (Denmark)",
"German",
"German (Austria)",
+"German (Belgium)",
"German (Switzerland)",
"German (Germany)",
+"German (Italy)",
"German (Luxembourg)",
+"Dogri (India)",
+"Dhivehi (Maldives)",
+"Dzongkha (Bhutan)",
"Greek",
"Greek (Cyprus)",
"Greek (Greece)",
"English",
+"English (Antigua and Barbuda)",
"English (Australia)",
+"English (Botswana)",
"English (Canada)",
+"English (Denmark)",
"English (United Kingdom)",
+"English (Hong Kong)",
"English (Ireland)",
+"English (Israel)",
"English (India)",
-"English (Malta)",
+"English (Nigeria)",
"English (New Zealand)",
"English (Philippines)",
"English (Singapore)",
"English (United States)",
"English (South Africa)",
+"English (Zambia)",
+"English (Zimbabwe)",
+"Esperanto",
"Spanish",
"Spanish (Argentina)",
"Spanish (Bolivia)",
"Spanish (Chile)",
"Spanish (Colombia)",
"Spanish (Costa Rica)",
+"Spanish (Cuba)",
"Spanish (Dominican Republic)",
"Spanish (Ecuador)",
"Spanish (Spain)",
@@ -269,91 +519,231 @@ static const char* locale_names[]={
"Spanish (Venezuela)",
"Estonian",
"Estonian (Estonia)",
+"Basque",
+"Basque (Spain)",
+"Persian",
+"Persian (Iran)",
+"Fulah (Senegal)",
"Finnish",
"Finnish (Finland)",
+"Filipino (Philippines)",
+"Faroese (Faroe Islands)",
"French",
"French (Belgium)",
"French (Canada)",
"French (Switzerland)",
"French (France)",
"French (Luxembourg)",
+"Friulian (Italy)",
+"Western Frisian (Germany)",
+"Western Frisian (Netherlands)",
"Irish",
"Irish (Ireland)",
+"Scottish Gaelic (United Kingdom)",
+"Geez (Eritrea)",
+"Geez (Ethiopia)",
+"Galician (Spain)",
+"Gujarati (India)",
+"Manx (United Kingdom)",
+"Hakka Chinese (Taiwan)",
+"Hausa (Nigeria)",
+"Hebrew",
+"Hebrew (Israel)",
+"Hindi",
"Hindi (India)",
-"Hindi (India)",
+"Chhattisgarhi (India)",
"Croatian",
"Croatian (Croatia)",
+"Upper Sorbian (Germany)",
+"Haitian (Haiti)",
"Hungarian",
"Hungarian (Hungary)",
+"Huastec (Mexico)",
+"Armenian (Armenia)",
+"Interlingua (France)",
"Indonesian",
"Indonesian (Indonesia)",
+"Igbo (Nigeria)",
+"Inupiaq (Canada)",
"Icelandic",
"Icelandic (Iceland)",
"Italian",
"Italian (Switzerland)",
"Italian (Italy)",
-"Hebrew",
-"Hebrew (Israel)",
+"Inuktitut (Canada)",
"Japanese",
"Japanese (Japan)",
-"Japanese (Japan JP)",
+"Kabyle (Algeria)",
+"Georgian (Georgia)",
+"Kazakh (Kazakhstan)",
+"Kalaallisut (Greenland)",
+"Central Khmer (Cambodia)",
+"Kannada (India)",
+"Konkani (India)",
"Korean",
"Korean (South Korea)",
+"Kashmiri (India)",
+"Kurdish",
+"Kurdish (Turkey)",
+"Cornish (United Kingdom)",
+"Kirghiz (Kyrgyzstan)",
+"Luxembourgish (Luxembourg)",
+"Ganda (Uganda)",
+"Limburgan (Belgium)",
+"Limburgan (Netherlands)",
+"Ligurian (Italy)",
+"Lingala (Congo)",
+"Lao (Laos)",
"Lithuanian",
"Lithuanian (Lithuania)",
"Latvian",
"Latvian (Latvia)",
+"Literary Chinese (Taiwan)",
+"Magahi (India)",
+"Maithili (India)",
+"Malagasy (Madagascar)",
+"Marshallese (Marshall Islands)",
+"Eastern Mari (Russia)",
+"Maori (New Zealand)",
+"Mískito (Nicaragua)",
"Macedonian",
"Macedonian (Macedonia)",
+"Malayalam (India)",
+"Manipuri (India)",
+"Mongolian (Mongolia)",
+"Marathi (India)",
"Malay",
"Malay (Malaysia)",
"Maltese",
"Maltese (Malta)",
+"Burmese (Myanmar)",
+"Erzya (Russia)",
+"Nahuatl languages (Mexico)",
+"Min Nan Chinese (Taiwan)",
+"Norwegian Bokmål",
+"Norwegian Bokmål (Norway)",
+"Low German (Germany)",
+"Low German (Netherlands)",
+"Nepali (Nepal)",
+"Central Nahuatl (Mexico)",
+"Niuean (Niue)",
+"Niuean (New Zealand)",
"Dutch",
+"Dutch (Aruba)",
"Dutch (Belgium)",
"Dutch (Netherlands)",
-"Norwegian",
-"Norwegian (Norway)",
-"Norwegian (Norway Nynorsk)",
+"Norwegian Nynorsk",
+"Norwegian Nynorsk (Norway)",
+"South Ndebele (South Africa)",
+"Pedi (South Africa)",
+"Occitan (France)",
+"Oromo",
+"Oromo (Ethiopia)",
+"Oromo (Kenya)",
+"Oriya (India)",
+"Ossetian (Russia)",
+"Panjabi (India)",
+"Papiamento",
+"Papiamento (Netherlands Antilles)",
+"Papiamento (Aruba)",
+"Papiamento (Curaçao)",
+"Panjabi (Pakistan)",
"Polish",
"Polish (Poland)",
+"Pushto (Afghanistan)",
"Portuguese",
"Portuguese (Brazil)",
"Portuguese (Portugal)",
+"Ayacucho Quechua (Peru)",
+"Cusco Quechua (Peru)",
+"Rajasthani (India)",
"Romanian",
"Romanian (Romania)",
"Russian",
"Russian (Russia)",
+"Russian (Ukraine)",
+"Kinyarwanda (Rwanda)",
+"Sanskrit (India)",
+"Santali (India)",
+"Sardinian (Italy)",
+"Sindhi (India)",
+"Northern Sami (Norway)",
+"Samogitian (Lithuania)",
+"Shuswap (Canada)",
+"Sidamo (Ethiopia)",
+"Sinhala (Sri Lanka)",
"Slovak",
"Slovak (Slovakia)",
"Slovenian",
"Slovenian (Slovenia)",
+"Somali",
+"Somali (Djibouti)",
+"Somali (Ethiopia)",
+"Somali (Kenya)",
+"Somali (Somalia)",
+"Songhai languages (Mali)",
"Albanian",
"Albanian (Albania)",
+"Albanian (Kosovo)",
+"Albanian (Macedonia)",
"Serbian",
-"Serbian (Bosnia and Herzegovina)",
-"Serbian (Serbia and Montenegro)",
"Serbian (Montenegro)",
"Serbian (Serbia)",
+"Swati (South Africa)",
+"Southern Sotho (South Africa)",
"Swedish",
+"Swedish (Finland)",
"Swedish (Sweden)",
+"Swahili (Kenya)",
+"Swahili (Tanzania)",
+"Silesian (Poland)",
+"Tamil",
+"Tamil (India)",
+"Tamil (Sri Lanka)",
+"Tulu (India)",
+"Telugu (India)",
+"Tajik (Tajikistan)",
+"Chitwania Tharu (Nepal)",
"Thai",
"Thai (Thailand)",
-"Thai (Thailand TH)",
+"Tigrinya",
+"Tigrinya (Eritrea)",
+"Tigrinya (Ethiopia)",
+"Tigre (Eritrea)",
+"Turkmen (Turkmenistan)",
+"Tagalog (Philippines)",
+"Tswana (South Africa)",
"Turkish",
+"Turkish (Cyprus)",
"Turkish (Turkey)",
+"Tsonga (South Africa)",
+"Tatar (Russia)",
+"Uighur (China)",
"Ukrainian",
"Ukrainian (Ukraine)",
+"Unami (United States)",
"Urdu",
"Urdu (India)",
"Urdu (Pakistan)",
+"Uzbek",
+"Uzbek (Uzbekistan)",
+"Venda (South Africa)",
"Vietnamese",
"Vietnamese (Vietnam)",
+"Walloon (Belgium)",
+"Walser (Switzerland)",
+"Wolaytta (Ethiopia)",
+"Wolof (Senegal)",
+"Xhosa (South Africa)",
+"Yiddish (United States)",
+"Yoruba (Nigeria)",
+"Yue Chinese (Hong Kong)",
"Chinese",
"Chinese (China)",
"Chinese (Hong Kong)",
"Chinese (Singapore)",
"Chinese (Taiwan)",
+"Zulu (South Africa)",
0
};
diff --git a/core/undo_redo.cpp b/core/undo_redo.cpp
index d6d32ccaef..e8a71d4991 100644
--- a/core/undo_redo.cpp
+++ b/core/undo_redo.cpp
@@ -52,26 +52,46 @@ void UndoRedo::_discard_redo() {
}
-
-void UndoRedo::create_action(const String& p_name,bool p_mergeable) {
+void UndoRedo::create_action(const String& p_name,MergeMode p_mode) {
if (action_level==0) {
_discard_redo();
- if (p_mergeable && actions.size() && actions[actions.size()-1].name==p_name) {
- //old will replace new (it's mergeable after all)
- // should check references though!
+ // Check if the merge operation is valid
+ if (p_mode!=MERGE_DISABLE && actions.size() && actions[actions.size()-1].name==p_name) {
+
current_action=actions.size()-2;
- actions[current_action+1].do_ops.clear();
- //actions[current_action+1].undo_ops.clear(); - no, this is kept
- merging=true;
+
+ if (p_mode==MERGE_ENDS) {
+
+ // Clear all do ops from last action, and delete all object references
+ List<Operation>::Element *E=actions[current_action+1].do_ops.front();
+
+ while (E) {
+
+ if (E->get().type==Operation::TYPE_REFERENCE) {
+
+ Object *obj=ObjectDB::get_instance(E->get().object);
+
+ if (obj)
+ memdelete(obj);
+ }
+
+ E=E->next();
+ actions[current_action+1].do_ops.pop_front();
+ }
+ }
+
+ merge_mode=p_mode;
} else {
+
Action new_action;
new_action.name=p_name;
actions.push_back(new_action);
- merging=false;
+
+ merge_mode=MERGE_DISABLE;
}
}
@@ -102,8 +122,10 @@ void UndoRedo::add_undo_method(Object *p_object,const String& p_method,VARIANT_A
VARIANT_ARGPTRS
ERR_FAIL_COND(action_level<=0);
ERR_FAIL_COND((current_action+1)>=actions.size());
- if (merging)
- return; //- no undo if merging
+
+ // No undo if the merge mode is MERGE_ENDS
+ if (merge_mode==MERGE_ENDS)
+ return;
Operation undo_op;
undo_op.object=p_object->get_instance_ID();
@@ -139,6 +161,10 @@ void UndoRedo::add_undo_property(Object *p_object,const String& p_property,const
ERR_FAIL_COND(action_level<=0);
ERR_FAIL_COND((current_action+1)>=actions.size());
+ // No undo if the merge mode is MERGE_ENDS
+ if (merge_mode==MERGE_ENDS)
+ return;
+
Operation undo_op;
undo_op.object=p_object->get_instance_ID();
if (p_object->cast_to<Resource>())
@@ -167,6 +193,11 @@ void UndoRedo::add_undo_reference(Object *p_object) {
ERR_FAIL_COND(action_level<=0);
ERR_FAIL_COND((current_action+1)>=actions.size());
+
+ // No undo if the merge mode is MERGE_ENDS
+ if (merge_mode==MERGE_ENDS)
+ return;
+
Operation undo_op;
undo_op.object=p_object->get_instance_ID();
if (p_object->cast_to<Resource>())
@@ -352,7 +383,7 @@ UndoRedo::UndoRedo() {
action_level=0;
current_action=-1;
max_steps=-1;
- merging=true;
+ merge_mode=MERGE_DISABLE;
callback=NULL;
callback_ud=NULL;
@@ -448,7 +479,7 @@ Variant UndoRedo::_add_undo_method(const Variant** p_args, int p_argcount, Varia
void UndoRedo::_bind_methods() {
- ObjectTypeDB::bind_method(_MD("create_action","name","mergeable"),&UndoRedo::create_action, DEFVAL(false) );
+ ObjectTypeDB::bind_method(_MD("create_action","name","merge_mode"),&UndoRedo::create_action, DEFVAL(MERGE_DISABLE) );
ObjectTypeDB::bind_method(_MD("commit_action"),&UndoRedo::commit_action);
//ObjectTypeDB::bind_method(_MD("add_do_method","p_object", "p_method", "VARIANT_ARG_LIST"),&UndoRedo::add_do_method);
@@ -459,13 +490,9 @@ void UndoRedo::_bind_methods() {
mi.name="add_do_method";
mi.arguments.push_back( PropertyInfo( Variant::OBJECT, "object"));
mi.arguments.push_back( PropertyInfo( Variant::STRING, "method"));
- Vector<Variant> defargs;
- for(int i=0;i<VARIANT_ARG_MAX;++i) {
- mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i)));
- defargs.push_back(Variant());
- }
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"add_do_method",&UndoRedo::_add_do_method,mi,defargs);
+
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"add_do_method",&UndoRedo::_add_do_method,mi);
}
{
@@ -473,13 +500,9 @@ void UndoRedo::_bind_methods() {
mi.name="add_undo_method";
mi.arguments.push_back( PropertyInfo( Variant::OBJECT, "object"));
mi.arguments.push_back( PropertyInfo( Variant::STRING, "method"));
- Vector<Variant> defargs;
- for(int i=0;i<VARIANT_ARG_MAX;++i) {
- mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i)));
- defargs.push_back(Variant());
- }
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"add_undo_method",&UndoRedo::_add_undo_method,mi,defargs);
+
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"add_undo_method",&UndoRedo::_add_undo_method,mi);
}
ObjectTypeDB::bind_method(_MD("add_do_property","object", "property", "value:Variant"),&UndoRedo::add_do_property);
@@ -489,4 +512,8 @@ void UndoRedo::_bind_methods() {
ObjectTypeDB::bind_method(_MD("clear_history"),&UndoRedo::clear_history);
ObjectTypeDB::bind_method(_MD("get_current_action_name"),&UndoRedo::get_current_action_name);
ObjectTypeDB::bind_method(_MD("get_version"),&UndoRedo::get_version);
+
+ BIND_CONSTANT(MERGE_DISABLE);
+ BIND_CONSTANT(MERGE_ENDS);
+ BIND_CONSTANT(MERGE_ALL);
}
diff --git a/core/undo_redo.h b/core/undo_redo.h
index 7f63ba9ed6..208eb6ed5e 100644
--- a/core/undo_redo.h
+++ b/core/undo_redo.h
@@ -41,6 +41,12 @@ class UndoRedo : public Object {
OBJ_SAVE_TYPE( UndoRedo );
public:
+ enum MergeMode {
+ MERGE_DISABLE,
+ MERGE_ENDS,
+ MERGE_ALL
+ };
+
typedef void (*CommitNotifyCallback)(void *p_ud,const String& p_name);
Variant _add_do_method(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
Variant _add_undo_method(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
@@ -76,7 +82,7 @@ private:
int current_action;
int action_level;
int max_steps;
- bool merging;
+ MergeMode merge_mode;
uint64_t version;
void _pop_history_tail();
@@ -98,7 +104,7 @@ protected:
public:
- void create_action(const String& p_name="",bool p_mergeable=false);
+ void create_action(const String& p_name="",MergeMode p_mode=MERGE_DISABLE);
void add_do_method(Object *p_object,const String& p_method,VARIANT_ARG_LIST);
void add_undo_method(Object *p_object,const String& p_method,VARIANT_ARG_LIST);
@@ -128,4 +134,6 @@ public:
~UndoRedo();
};
+VARIANT_ENUM_CAST( UndoRedo::MergeMode );
+
#endif // UNDO_REDO_H
diff --git a/core/variant.h b/core/variant.h
index b8b028a760..90be593bd9 100644
--- a/core/variant.h
+++ b/core/variant.h
@@ -426,7 +426,7 @@ public:
static void get_constructor_list(Variant::Type p_type, List<MethodInfo> *p_list);
static void get_numeric_constants_for_type(Variant::Type p_type, List<StringName> *p_constants);
static bool has_numeric_constant(Variant::Type p_type, const StringName& p_value);
- static int get_numeric_constant_value(Variant::Type p_type, const StringName& p_value);
+ static int get_numeric_constant_value(Variant::Type p_type, const StringName& p_value,bool *r_valid=NULL);
typedef String (*ObjectDeConstruct)(const Variant& p_object,void *ud);
typedef void (*ObjectConstruct)(const String& p_text,void *ud,Variant& r_value);
diff --git a/core/variant_call.cpp b/core/variant_call.cpp
index 069c20bc6e..e7e71e8251 100644
--- a/core/variant_call.cpp
+++ b/core/variant_call.cpp
@@ -54,10 +54,10 @@ struct _VariantCall {
int arg_count;
Vector<Variant> default_args;
Vector<Variant::Type> arg_types;
-
-#ifdef DEBUG_ENABLED
Vector<StringName> arg_names;
Variant::Type return_type;
+
+#ifdef DEBUG_ENABLED
bool returns;
#endif
VariantFunc func;
@@ -1324,14 +1324,22 @@ bool Variant::has_numeric_constant(Variant::Type p_type, const StringName& p_val
return cd.value.has(p_value);
}
-int Variant::get_numeric_constant_value(Variant::Type p_type, const StringName& p_value) {
+int Variant::get_numeric_constant_value(Variant::Type p_type, const StringName& p_value, bool *r_valid) {
+
+ if (r_valid)
+ *r_valid=false;
ERR_FAIL_INDEX_V(p_type,Variant::VARIANT_MAX,0);
_VariantCall::ConstantData& cd = _VariantCall::constant_data[p_type];
Map<StringName,int>::Element *E = cd.value.find(p_value);
- ERR_FAIL_COND_V(!E,0);
+ if (!E) {
+ return -1;
+ }
+ if (r_valid)
+ *r_valid=true;
+
return E->get();
}
diff --git a/core/variant_op.cpp b/core/variant_op.cpp
index c537ed230f..fd64b58bd5 100644
--- a/core/variant_op.cpp
+++ b/core/variant_op.cpp
@@ -3046,7 +3046,7 @@ bool Variant::iter_next(Variant& r_iter,bool &valid) const {
const String *str=reinterpret_cast<const String*>(_data._mem);
int idx = r_iter;
idx++;
- if (idx >= str->size())
+ if (idx >= str->length())
return false;
r_iter = idx;
return true;
diff --git a/doc/base/classes.xml b/doc/base/classes.xml
index 4b6f5f510d..1b54a70be8 100644
--- a/doc/base/classes.xml
+++ b/doc/base/classes.xml
@@ -5922,14 +5922,24 @@
</method>
</methods>
<signals>
+ <signal name="button_down">
+ <description>
+ Emitted when the button starts being held down.
+ </description>
+ </signal>
+ <signal name="button_up">
+ <description>
+ Emitted when the button stops being held down.
+ </description>
+ </signal>
<signal name="pressed">
<description>
- This signal is emitted every time the button is pressed or toggled.
+ This signal is emitted every time the button is toggled or pressed (i.e. activated, so on [code]button_down[/code] if "Click on press" is active and on [code]button_up[/code] otherwise).
</description>
</signal>
<signal name="released">
<description>
- This signal is emitted when the button was released.
+ Emitted when the button was released. This is only emitted by non-toggle buttons and if "Click on press" is active.
</description>
</signal>
<signal name="toggled">
@@ -6026,7 +6036,7 @@
</argument>
<argument index="2" name="rect" type="Rect2">
</argument>
- <argument index="3" name="align" type="Vector2" default="Vector2((0, 0))">
+ <argument index="3" name="align" type="Vector2" default="Vector2(0, 0)">
</argument>
<argument index="4" name="advance" type="float" default="-1">
</argument>
@@ -6807,6 +6817,12 @@
<description>
</description>
</method>
+ <method name="is_limit_smoothing_enabled" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="is_rotating" qualifiers="const">
<return type="bool">
</return>
@@ -6878,6 +6894,14 @@
Set the scrolling limit in pixels.
</description>
</method>
+ <method name="set_limit_smoothing_enabled">
+ <argument index="0" name="limit_smoothing_enabled" type="bool">
+ </argument>
+ <description>
+ Smooth camera when reaching camera limits.
+ This requires camera smoothing being enabled to have a noticeable effect.
+ </description>
+ </method>
<method name="set_offset">
<argument index="0" name="offset" type="Vector2">
</argument>
@@ -6984,8 +7008,10 @@
</argument>
<argument index="3" name="width" type="float" default="1">
</argument>
+ <argument index="4" name="antialiased" type="bool" default="false">
+ </argument>
<description>
- Draw a line from a 2D point to another, with a given color and width.
+ Draw a line from a 2D point to another, with a given color and width. It can be optionally antialiased.
</description>
</method>
<method name="draw_polygon">
@@ -9318,7 +9344,7 @@
<method name="get_cursor_shape" qualifiers="const">
<return type="int">
</return>
- <argument index="0" name="pos" type="Vector2" default="Vector2((0, 0))">
+ <argument index="0" name="pos" type="Vector2" default="Vector2(0, 0)">
</argument>
<description>
Return the cursor shape at a certain position in the control.
@@ -9517,7 +9543,7 @@
<method name="get_tooltip" qualifiers="const">
<return type="String">
</return>
- <argument index="0" name="atpos" type="Vector2" default="Vector2((0, 0))">
+ <argument index="0" name="atpos" type="Vector2" default="Vector2(0, 0)">
</argument>
<description>
Return the tooltip, which will appear when the cursor is resting over this control.
@@ -10161,9 +10187,9 @@
<method name="add_point">
<argument index="0" name="pos" type="Vector2">
</argument>
- <argument index="1" name="in" type="Vector2" default="Vector2((0, 0))">
+ <argument index="1" name="in" type="Vector2" default="Vector2(0, 0)">
</argument>
- <argument index="2" name="out" type="Vector2" default="Vector2((0, 0))">
+ <argument index="2" name="out" type="Vector2" default="Vector2(0, 0)">
</argument>
<argument index="3" name="atpos" type="int" default="-1">
</argument>
@@ -10332,9 +10358,9 @@
<method name="add_point">
<argument index="0" name="pos" type="Vector3">
</argument>
- <argument index="1" name="in" type="Vector3" default="Vector3((0, 0, 0))">
+ <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 index="2" name="out" type="Vector3" default="Vector3(0, 0, 0)">
</argument>
<argument index="3" name="atpos" type="int" default="-1">
</argument>
@@ -10845,7 +10871,7 @@
</return>
<description>
Initialise the stream used to list all files and directories using the [method get_next] function, closing the current opened stream if needed. Once the stream has been processed, it should typically be closed with [method list_dir_end].
- Return false if the stream could not be initialised.
+ Return true if the stream could not be initialised.
</description>
</method>
<method name="list_dir_end">
@@ -11738,6 +11764,24 @@
[/codeblock]
</description>
<methods>
+ <method name="add_property_info">
+ <argument index="0" name="info" type="Dictionary">
+ </argument>
+ <description>
+ Add a custom property info to a property. The dictionary must contain: name:[String](the name of the property) and type:[int](see TYPE_* in [@Global Scope]), and optionally hint:[int](see PROPERTY_HINT_* in [@Global Scope]), hint_string:[String].
+ Example:[codeblock]
+ editor_settings.set("category/property_name", 0)
+
+ var property_info = {
+ "name": "category/property_name",
+ "type": TYPE_INT,
+ "hint": PROPERTY_HINT_ENUM,
+ "hint_string": "one,two,three"
+ }
+
+ editor_settings.add_property_info(property_info)[/codeblock]
+ </description>
+ </method>
<method name="erase">
<argument index="0" name="property" type="String">
</argument>
@@ -13754,6 +13798,26 @@
Contains global variables accessible from everywhere. Use the normal [Object] API, such as "Globals.get(variable)", "Globals.set(variable,value)" or "Globals.has(variable)" to access them. Variables stored in engine.cfg are also loaded into globals, making this object very useful for reading custom game configuration options.
</description>
<methods>
+ <method name="add_property_info">
+ <argument index="0" name="hint" type="Dictionary">
+ </argument>
+ <description>
+ Add a custom property info to a property. The dictionary must contain: name:[String](the name of the property) and type:[int](see TYPE_* in [@Global Scope]), and optionally hint:[int](see PROPERTY_HINT_* in [@Global Scope]), hint_string:[String].
+ Example:
+ [codeblock]
+ Globals.set("category/property_name", 0)
+
+ var property_info = {
+ "name": "category/property_name",
+ "type": TYPE_INT,
+ "hint": PROPERTY_HINT_ENUM,
+ "hint_string": "one,two,three"
+ }
+
+ Globals.add_property_info(property_info)
+ [/codeblock]
+ </description>
+ </method>
<method name="clear">
<argument index="0" name="name" type="String">
</argument>
@@ -14021,6 +14085,16 @@
Signal sent to the GraphEdit when the connection between 'from_slot' slot of 'from' GraphNode and 'to_slot' slot of 'to' GraphNode is attempted to be created.
</description>
</signal>
+ <signal name="connection_to_empty">
+ <argument index="0" name="from" type="String">
+ </argument>
+ <argument index="1" name="from_slot" type="int">
+ </argument>
+ <argument index="2" name="release_pos" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </signal>
<signal name="delete_nodes_request">
<description>
Signal sent when a GraphNode is attempted to be removed from the GraphEdit.
@@ -14067,6 +14141,10 @@
<constants>
</constants>
<theme_items>
+ <theme_item name="bezier_len_neg" type="int">
+ </theme_item>
+ <theme_item name="bezier_len_pos" type="int">
+ </theme_item>
<theme_item name="bg" type="StyleBox">
</theme_item>
<theme_item name="grid_major" type="Color">
@@ -14240,6 +14318,18 @@
Returns true if the close button is shown. False otherwise.
</description>
</method>
+ <method name="is_comment" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="is_resizeable" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="is_slot_enabled_left" qualifiers="const">
<return type="bool">
</return>
@@ -14258,6 +14348,12 @@
Return true if right (output) slot 'idx' is enabled. False otherwise.
</description>
</method>
+ <method name="set_comment">
+ <argument index="0" name="comment" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_modulate">
<argument index="0" name="color" type="Color">
</argument>
@@ -14277,6 +14373,12 @@
<description>
</description>
</method>
+ <method name="set_resizeable">
+ <argument index="0" name="resizeable" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_show_close_button">
<argument index="0" name="show" type="bool">
</argument>
@@ -14299,9 +14401,9 @@
</argument>
<argument index="6" name="color_right" type="Color">
</argument>
- <argument index="7" name="custom_left" type="Object" default="Object()">
+ <argument index="7" name="custom_left" type="Object" default="NULL">
</argument>
- <argument index="8" name="custom_right" type="Object" default="Object()">
+ <argument index="8" name="custom_right" type="Object" default="NULL">
</argument>
<description>
</description>
@@ -14339,6 +14441,12 @@
Signal sent when the GraphNode is requested to be displayed over other ones. Happens on focusing (clicking into) the GraphNode.
</description>
</signal>
+ <signal name="resize_request">
+ <argument index="0" name="new_minsize" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </signal>
</signals>
<constants>
<constant name="OVERLAY_DISABLED" value="0">
@@ -14355,6 +14463,10 @@
</theme_item>
<theme_item name="close_offset" type="int">
</theme_item>
+ <theme_item name="comment" type="StyleBox">
+ </theme_item>
+ <theme_item name="commentfocus" type="StyleBox">
+ </theme_item>
<theme_item name="defaultfocus" type="StyleBox">
</theme_item>
<theme_item name="defaultframe" type="StyleBox">
@@ -14367,6 +14479,8 @@
</theme_item>
<theme_item name="position" type="StyleBox">
</theme_item>
+ <theme_item name="resizer" type="Texture">
+ </theme_item>
<theme_item name="selectedframe" type="StyleBox">
</theme_item>
<theme_item name="separation" type="int">
@@ -15911,6 +16025,8 @@
</argument>
<argument index="2" name="radius" type="float">
</argument>
+ <argument index="3" name="add_uv" type="bool" default="true">
+ </argument>
<description>
Simple helper to draw an uvsphere, with given latitudes, longitude and radius.
</description>
@@ -15925,7 +16041,7 @@
<method name="begin">
<argument index="0" name="primitive" type="int">
</argument>
- <argument index="1" name="texture" type="Texture" default="Object()">
+ <argument index="1" name="texture" type="Texture" default="NULL">
</argument>
<description>
Begin drawing (And optionally pass a texture override). When done call end(). For more information on how this works, search for glBegin() glEnd() references.
@@ -16012,7 +16128,7 @@
Add a new mapping entry (in SDL2 format) to the mapping database. Optionally update already connected devices.
</description>
</method>
- <method name="get_accelerometer">
+ <method name="get_accelerometer" qualifiers="const">
<return type="Vector3">
</return>
<description>
@@ -16026,14 +16142,14 @@
Returns an [Array] containing the device IDs of all currently connected joysticks.
</description>
</method>
- <method name="get_gyroscope">
+ <method name="get_gyroscope" qualifiers="const">
<return type="Vector3">
</return>
<description>
If the device has a gyroscope, this will return the rate of rotation in rad/s around a device's x, y, and z axis.
</description>
</method>
- <method name="get_joy_axis">
+ <method name="get_joy_axis" qualifiers="const">
<return type="float">
</return>
<argument index="0" name="device" type="int">
@@ -16080,7 +16196,7 @@
Returns the strength of the joystick vibration: x is the strength of the weak motor, and y is the strength of the strong motor.
</description>
</method>
- <method name="get_magnetometer">
+ <method name="get_magnetometer" qualifiers="const">
<return type="Vector3">
</return>
<description>
@@ -16108,7 +16224,23 @@
Returns the mouse speed for the last time the cursor was moved, and this until the next frame where the mouse moves. This means that even if the mouse is not moving, this function will still return the value of the last motion.
</description>
</method>
- <method name="is_action_pressed">
+ <method name="is_action_just_pressed" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="action" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="is_action_just_released" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="action" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="is_action_pressed" qualifiers="const">
<return type="bool">
</return>
<argument index="0" name="action" type="String">
@@ -16117,7 +16249,7 @@
Returns true or false depending on whether the action event is pressed. Actions and their events can be set in the Project Settings / Input Map tab. Or be set with [InputMap].
</description>
</method>
- <method name="is_joy_button_pressed">
+ <method name="is_joy_button_pressed" qualifiers="const">
<return type="bool">
</return>
<argument index="0" name="device" type="int">
@@ -16137,7 +16269,7 @@
Returns if the specified device is known by the system. This means that it sets all button and axis indices exactly as defined in the JOY_* constants (see [@Global Scope]). Unknown joysticks are not expected to match these constants, but you can still retrieve events from them.
</description>
</method>
- <method name="is_key_pressed">
+ <method name="is_key_pressed" qualifiers="const">
<return type="bool">
</return>
<argument index="0" name="scancode" type="int">
@@ -16146,7 +16278,7 @@
Returns true or false depending on whether the key is pressed or not. You can pass KEY_*, which are pre-defined constants listed in [@Global Scope].
</description>
</method>
- <method name="is_mouse_button_pressed">
+ <method name="is_mouse_button_pressed" qualifiers="const">
<return type="bool">
</return>
<argument index="0" name="button" type="int">
@@ -16165,7 +16297,7 @@
<method name="set_custom_mouse_cursor">
<argument index="0" name="image" type="Texture">
</argument>
- <argument index="1" name="hotspot" type="Vector2" default="Vector2((0, 0))">
+ <argument index="1" name="hotspot" type="Vector2" default="Vector2(0, 0)">
</argument>
<description>
Set a custom mouse cursor image, which is only visible inside the game window. The hotspot can also be specified.
@@ -17670,8 +17802,13 @@
</class>
<class name="ItemList" inherits="Control" category="Core">
<brief_description>
+ Control that provides a list of selectable items (and/or icons) in a single column, or optionally in multiple columns.
</brief_description>
<description>
+ This control provides a selectable list of items that may be in a single (or multiple columns) with option of text, icons,
+ or both text and icon. Tooltips are supported and may be different for every item in the list. Selectable items in the list
+ may be selected or deselected and multiple selection may be enabled. Selection with right mouse button may also be enabled
+ to allow use of popup context menus. Items may also be 'activated' with a double click (or Enter key).
</description>
<methods>
<method name="add_icon_item">
@@ -17680,6 +17817,7 @@
<argument index="1" name="selectable" type="bool" default="true">
</argument>
<description>
+ Adds an item to the item list with no text, only an icon.
</description>
</method>
<method name="add_item">
@@ -17690,26 +17828,32 @@
<argument index="2" name="selectable" type="bool" default="true">
</argument>
<description>
+ Adds an item to the item list with specified text. Specify an icon of null for a list item with no icon.
+ If selectable is true the list item will be selectable.
</description>
</method>
<method name="clear">
<description>
+ Remove all items from the list.
</description>
</method>
<method name="ensure_current_is_visible">
<description>
+ Ensure selection is visible, adjusting the scroll position as necessary.
</description>
</method>
<method name="get_allow_rmb_select" qualifiers="const">
<return type="bool">
</return>
<description>
+ Return whether or not items may be selected via right mouse clicking.
</description>
</method>
<method name="get_fixed_column_width" qualifiers="const">
<return type="int">
</return>
<description>
+ If column size has been fixed to a value, return that value.
</description>
</method>
<method name="get_fixed_icon_size" qualifiers="const">
@@ -17738,12 +17882,14 @@
<argument index="1" name="exact" type="bool" default="false">
</argument>
<description>
+ Given a position within the control return the item (if any) at that point.
</description>
</method>
<method name="get_item_count" qualifiers="const">
<return type="int">
</return>
<description>
+ Return count of items currently in the item list.
</description>
</method>
<method name="get_item_custom_bg_color" qualifiers="const">
@@ -17782,6 +17928,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Return the text for specified item index.
</description>
</method>
<method name="get_item_tooltip" qualifiers="const">
@@ -17790,18 +17937,30 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Return tooltip hint for specified item index.
+ </description>
+ </method>
+ <method name="is_item_tooltip_enabled" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <description>
+ Returns whether the tooptip is enabled for specified item index.
</description>
</method>
<method name="get_max_columns" qualifiers="const">
<return type="int">
</return>
<description>
+ Return total number of columns in use by the list.
</description>
</method>
<method name="get_max_text_lines" qualifiers="const">
<return type="int">
</return>
<description>
+ Return total number of lines currently in use by the list.
</description>
</method>
<method name="get_select_mode" qualifiers="const">
@@ -17814,7 +17973,7 @@
<return type="IntArray">
</return>
<description>
- Returns a list of selected indexes.
+ Returns the list of selected indexes.
</description>
</method>
<method name="is_item_disabled" qualifiers="const">
@@ -17823,6 +17982,7 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns whether or not the item at the specified index is disabled
</description>
</method>
<method name="is_item_selectable" qualifiers="const">
@@ -17831,12 +17991,14 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns whether or not the item at the specified index is selectable.
</description>
</method>
<method name="is_same_column_width" qualifiers="const">
<return type="int">
</return>
<description>
+ Returns whether or not all columns of the list are of the same size.
</description>
</method>
<method name="is_selected" qualifiers="const">
@@ -17845,12 +18007,14 @@
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Returns whether or not item at the specified index is currently selected.
</description>
</method>
<method name="remove_item">
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Remove item at specified index from the list.
</description>
</method>
<method name="select">
@@ -17859,18 +18023,22 @@
<argument index="1" name="single" type="bool" default="true">
</argument>
<description>
+ Select the item at the specified index.
+ Note: This method does not trigger the item selection signal.
</description>
</method>
<method name="set_allow_rmb_select">
<argument index="0" name="allow" type="bool">
</argument>
<description>
+ Allow (or disallow) selection of (selectable) items in the list using right mouse button.
</description>
</method>
<method name="set_fixed_column_width">
<argument index="0" name="width" type="int">
</argument>
<description>
+ Set the size (width) all columns in the list are to use.
</description>
</method>
<method name="set_fixed_icon_size">
@@ -17905,6 +18073,8 @@
<argument index="1" name="disabled" type="bool">
</argument>
<description>
+ Disable (or enable) item at specified index.
+ Disabled items are not be selectable and do not fire activation (Enter or double-click) signals.
</description>
</method>
<method name="set_item_icon">
@@ -17913,6 +18083,7 @@
<argument index="1" name="icon" type="Texture">
</argument>
<description>
+ Set (or replace) icon of the item at the specified index.
</description>
</method>
<method name="set_item_icon_region">
@@ -17929,6 +18100,7 @@
<argument index="1" name="metadata" type="Variant">
</argument>
<description>
+ Sets a value (of any type) to be stored with the item at the specified index.
</description>
</method>
<method name="set_item_selectable">
@@ -17937,6 +18109,7 @@
<argument index="1" name="selectable" type="bool">
</argument>
<description>
+ Allow or disallow selection of the item at the specified index.
</description>
</method>
<method name="set_item_text">
@@ -17945,6 +18118,7 @@
<argument index="1" name="text" type="String">
</argument>
<description>
+ Sets text of item at specified index.
</description>
</method>
<method name="set_item_tooltip">
@@ -17953,24 +18127,37 @@
<argument index="1" name="tooltip" type="String">
</argument>
<description>
+ Sets tooltip hint for item at specified index.
+ </description>
+ </method>
+ <method name="set_item_tooltip_enabled">
+ <argument index="0" name="idx" type="int">
+ </argument>
+ <argument index="1" name="enable" type="bool">
+ </argument>
+ <description>
+ Sets whether the tooltip is enabled for specified item index.
</description>
</method>
<method name="set_max_columns">
<argument index="0" name="amount" type="int">
</argument>
<description>
+ Set maximum number of columns to use for the list.
</description>
</method>
<method name="set_max_text_lines">
<argument index="0" name="lines" type="int">
</argument>
<description>
+ Set maximum number of lines to use for the list.
</description>
</method>
<method name="set_same_column_width">
<argument index="0" name="enable" type="bool">
</argument>
<description>
+ Sets a fixed size (width) to use for all columns of the list.
</description>
</method>
<method name="set_select_mode">
@@ -17981,12 +18168,14 @@
</method>
<method name="sort_items_by_text">
<description>
+ Sorts items in the list by their text.
</description>
</method>
<method name="unselect">
<argument index="0" name="idx" type="int">
</argument>
<description>
+ Ensure item at specified index is not selected.
</description>
</method>
</methods>
@@ -17995,6 +18184,7 @@
<argument index="0" name="index" type="int">
</argument>
<description>
+ Fired when specified list item is activated via double click or Enter.
</description>
</signal>
<signal name="item_rmb_selected">
@@ -18003,12 +18193,16 @@
<argument index="1" name="atpos" type="Vector2">
</argument>
<description>
+ Fired when specified list item has been selected via right mouse clicking.
+ The click position is also provided to allow appropriate popup of context menus
+ at the correct location.
</description>
</signal>
<signal name="item_selected">
<argument index="0" name="index" type="int">
</argument>
<description>
+ Fired when specified item has been selected.
</description>
</signal>
<signal name="multi_selected">
@@ -18017,6 +18211,7 @@
<argument index="1" name="selected" type="bool">
</argument>
<description>
+ Fired when a multiple selection is altered on a list allowing mutliple selection.
</description>
</signal>
</signals>
@@ -18395,6 +18590,12 @@
Return the point in space where the body is touching another. If there is no collision, this method will return (0,0), so collisions must be checked first with [method is_colliding].
</description>
</method>
+ <method name="get_move_and_slide_colliders" qualifiers="const">
+ <return type="Array">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_travel" qualifiers="const">
<return type="Vector2">
</return>
@@ -18409,6 +18610,24 @@
Return whether the body is colliding with another.
</description>
</method>
+ <method name="is_move_and_slide_on_ceiling" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="is_move_and_slide_on_floor" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="is_move_and_slide_on_wall" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="move">
<return type="Vector2">
</return>
@@ -18418,6 +18637,20 @@
Move the body in the given direction, stopping if there is an obstacle. The returned vector is how much movement was remaining before being stopped.
</description>
</method>
+ <method name="move_and_slide">
+ <return type="Vector2">
+ </return>
+ <argument index="0" name="linear_velocity" type="Vector2">
+ </argument>
+ <argument index="1" name="floor_normal" type="Vector2" default="Vector2(0, 0)">
+ </argument>
+ <argument index="2" name="slope_stop_min_velocity" type="float" default="5">
+ </argument>
+ <argument index="3" name="max_bounces" type="int" default="4">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="move_to">
<return type="Vector2">
</return>
@@ -18442,10 +18675,12 @@
<method name="test_move">
<return type="bool">
</return>
- <argument index="0" name="rel_vec" type="Vector2">
+ <argument index="0" name="from" type="Matrix32">
+ </argument>
+ <argument index="1" name="rel_vec" type="Vector2">
</argument>
<description>
- Return true if there would be a collision if the body moved in the given direction.
+ Return true if there would be a collision if the body moved from the given point in the given direction.
</description>
</method>
</methods>
@@ -19243,7 +19478,7 @@
</description>
</method>
<method name="cursor_set_blink_enabled">
- <argument index="0" name="enable" type="bool">
+ <argument index="0" name="enabled" type="bool">
</argument>
<description>
Set the line edit caret to blink.
@@ -19269,6 +19504,12 @@
Return the cursor position inside the [LineEdit].
</description>
</method>
+ <method name="get_expand_to_text_length" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_max_length" qualifiers="const">
<return type="int">
</return>
@@ -19354,6 +19595,12 @@
Set the [i]editable[/i] status of the [LineEdit]. When disabled, existing text can't be modified and new text can't be added.
</description>
</method>
+ <method name="set_expand_to_text_length">
+ <argument index="0" name="enabled" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_max_length">
<argument index="0" name="chars" type="int">
</argument>
@@ -21495,6 +21742,172 @@
<constants>
</constants>
</class>
+<class name="NetworkedMultiplayerENet" inherits="NetworkedMultiplayerPeer" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="close_connection">
+ <description>
+ </description>
+ </method>
+ <method name="create_client">
+ <return type="int">
+ </return>
+ <argument index="0" name="ip" type="String">
+ </argument>
+ <argument index="1" name="port" type="int">
+ </argument>
+ <argument index="2" name="in_bandwidth" type="int" default="0">
+ </argument>
+ <argument index="3" name="out_bandwidth" type="int" default="0">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="create_server">
+ <return type="int">
+ </return>
+ <argument index="0" name="port" type="int">
+ </argument>
+ <argument index="1" name="max_clients" type="int" default="32">
+ </argument>
+ <argument index="2" name="in_bandwidth" type="int" default="0">
+ </argument>
+ <argument index="3" name="out_bandwidth" type="int" default="0">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="get_compression_mode" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_bind_ip">
+ <argument index="0" name="ip" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_compression_mode">
+ <argument index="0" name="mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ <constant name="COMPRESS_NONE" value="0">
+ </constant>
+ <constant name="COMPRESS_RANGE_CODER" value="1">
+ </constant>
+ <constant name="COMPRESS_FASTLZ" value="2">
+ </constant>
+ <constant name="COMPRESS_ZLIB" value="3">
+ </constant>
+ </constants>
+</class>
+<class name="NetworkedMultiplayerPeer" inherits="PacketPeer" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_connection_status" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_packet_peer" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_unique_id" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="is_refusing_new_connections" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="poll">
+ <description>
+ </description>
+ </method>
+ <method name="set_refuse_new_connections">
+ <argument index="0" name="enable" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_target_peer">
+ <argument index="0" name="id" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_transfer_mode">
+ <argument index="0" name="mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <signals>
+ <signal name="connection_failed">
+ <description>
+ </description>
+ </signal>
+ <signal name="connection_succeeded">
+ <description>
+ </description>
+ </signal>
+ <signal name="peer_connected">
+ <argument index="0" name="id" type="int">
+ </argument>
+ <description>
+ </description>
+ </signal>
+ <signal name="peer_disconnected">
+ <argument index="0" name="id" type="int">
+ </argument>
+ <description>
+ </description>
+ </signal>
+ <signal name="server_disconnected">
+ <description>
+ </description>
+ </signal>
+ </signals>
+ <constants>
+ <constant name="TRANSFER_MODE_UNRELIABLE" value="0">
+ </constant>
+ <constant name="TRANSFER_MODE_UNRELIABLE_ORDERED" value="1">
+ </constant>
+ <constant name="TRANSFER_MODE_RELIABLE" value="2">
+ </constant>
+ <constant name="CONNECTION_DISCONNECTED" value="0">
+ </constant>
+ <constant name="CONNECTION_CONNECTING" value="1">
+ </constant>
+ <constant name="CONNECTION_CONNECTED" value="2">
+ </constant>
+ <constant name="TARGET_PEER_BROADCAST" value="0">
+ </constant>
+ <constant name="TARGET_PEER_SERVER" value="1">
+ </constant>
+ </constants>
+</class>
<class name="Nil" category="Built-In Types">
<brief_description>
</brief_description>
@@ -21855,6 +22268,12 @@
Return the name of the node. This name is unique among the siblings (other child nodes from the same parent).
</description>
</method>
+ <method name="get_network_mode" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_node" qualifiers="const">
<return type="Node">
</return>
@@ -22019,6 +22438,12 @@
<description>
</description>
</method>
+ <method name="is_network_master" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="is_processing" qualifiers="const">
<return type="bool">
</return>
@@ -22108,6 +22533,86 @@
Replace a node in a scene by a given one. Subscriptions that pass through this node will be lost.
</description>
</method>
+ <method name="rpc">
+ <argument index="0" name="method" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rpc_config">
+ <argument index="0" name="method" type="String">
+ </argument>
+ <argument index="1" name="mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rpc_id">
+ <argument index="0" name="peer_" type="int">
+ </argument>
+ <argument index="1" name="method" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rpc_unreliable">
+ <argument index="0" name="method" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rpc_unreliable_id">
+ <argument index="0" name="peer_" type="int">
+ </argument>
+ <argument index="1" name="method" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rset">
+ <argument index="0" name="property" type="String">
+ </argument>
+ <argument index="1" name="value" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rset_config">
+ <argument index="0" name="property" type="String">
+ </argument>
+ <argument index="1" name="mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rset_id">
+ <argument index="0" name="peer_id" type="int">
+ </argument>
+ <argument index="1" name="property" type="String">
+ </argument>
+ <argument index="2" name="value" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rset_unreliable">
+ <argument index="0" name="property" type="String">
+ </argument>
+ <argument index="1" name="value" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="rset_unreliable_id">
+ <argument index="0" name="peer_id" type="int">
+ </argument>
+ <argument index="1" name="property" type="String">
+ </argument>
+ <argument index="2" name="value" type="Variant">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_display_folded">
<argument index="0" name="fold" type="bool">
</argument>
@@ -22135,6 +22640,12 @@
Set the name of the [Node]. Name must be unique within parent, and setting an already existing name will cause for the node to be automatically renamed.
</description>
</method>
+ <method name="set_network_mode">
+ <argument index="0" name="mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_owner">
<argument index="0" name="owner" type="Node">
</argument>
@@ -22227,6 +22738,24 @@
</constant>
<constant name="NOTIFICATION_DRAG_END" value="22">
</constant>
+ <constant name="NOTIFICATION_PATH_CHANGED" value="23">
+ </constant>
+ <constant name="NETWORK_MODE_INHERIT" value="0">
+ </constant>
+ <constant name="NETWORK_MODE_MASTER" value="1">
+ </constant>
+ <constant name="NETWORK_MODE_SLAVE" value="2">
+ </constant>
+ <constant name="RPC_MODE_DISABLED" value="0">
+ </constant>
+ <constant name="RPC_MODE_REMOTE" value="1">
+ </constant>
+ <constant name="RPC_MODE_SYNC" value="2">
+ </constant>
+ <constant name="RPC_MODE_MASTER" value="3">
+ </constant>
+ <constant name="RPC_MODE_SLAVE" value="4">
+ </constant>
<constant name="PAUSE_MODE_INHERIT" value="0">
</constant>
<constant name="PAUSE_MODE_STOP" value="1">
@@ -22266,6 +22795,27 @@
Return the global position of the 2D node.
</description>
</method>
+ <method name="get_global_rot" qualifiers="const">
+ <return type="float">
+ </return>
+ <description>
+ Return the global rotation in radians of the 2D node.
+ </description>
+ </method>
+ <method name="get_global_rotd" qualifiers="const">
+ <return type="float">
+ </return>
+ <description>
+ Return the global rotation in degrees of the 2D node.
+ </description>
+ </method>
+ <method name="get_global_scale" qualifiers="const">
+ <return type="Vector2">
+ </return>
+ <description>
+ Return the global scale of the 2D node.
+ </description>
+ </method>
<method name="get_pos" qualifiers="const">
<return type="Vector2">
</return>
@@ -22369,6 +22919,27 @@
Set the global position of the 2D node to 'pos'.
</description>
</method>
+ <method name="set_global_rot">
+ <argument index="0" name="radians" type="float">
+ </argument>
+ <description>
+ Set the global rotation in radians of the 2D node.
+ </description>
+ </method>
+ <method name="set_global_rotd">
+ <argument index="0" name="degrees" type="float">
+ </argument>
+ <description>
+ Set the global rotation in degrees of the 2D node.
+ </description>
+ </method>
+ <method name="set_global_scale">
+ <argument index="0" name="scale" type="Vector2">
+ </argument>
+ <description>
+ Set the global scale of the 2D node.
+ </description>
+ </method>
<method name="set_global_transform">
<argument index="0" name="xform" type="Matrix32">
</argument>
@@ -26763,14 +27334,16 @@
</return>
<argument index="0" name="body" type="RID">
</argument>
- <argument index="1" name="motion" type="Vector2">
+ <argument index="1" name="from" type="Matrix32">
</argument>
- <argument index="2" name="margin" type="float" default="0.08">
+ <argument index="2" name="motion" type="Vector2">
</argument>
- <argument index="3" name="result" type="Physics2DTestMotionResult" default="NULL">
+ <argument index="3" name="margin" type="float" default="0.08">
+ </argument>
+ <argument index="4" name="result" type="Physics2DTestMotionResult" default="NULL">
</argument>
<description>
- Return whether a body can move in a given direction. Apart from the boolean return value, a [Physics2DTestMotionResult] can be passed to return additional information in.
+ Return whether a body can move from a given point in a given direction. Apart from the boolean return value, a [Physics2DTestMotionResult] can be passed to return additional information in.
</description>
</method>
<method name="damped_spring_joint_create">
@@ -29667,14 +30240,14 @@
</description>
</method>
<method name="popup_centered">
- <argument index="0" name="size" type="Vector2" default="Vector2((0, 0))">
+ <argument index="0" name="size" type="Vector2" default="Vector2(0, 0)">
</argument>
<description>
Popup (show the control in modal form) in the center of the screen, at the current size, or at a size determined by "size".
</description>
</method>
<method name="popup_centered_minsize">
- <argument index="0" name="minsize" type="Vector2" default="Vector2((0, 0))">
+ <argument index="0" name="minsize" type="Vector2" default="Vector2(0, 0)">
</argument>
<description>
Popup (show the control in modal form) in the center of the screen, ensuring the size is never smaller than [code]minsize[/code].
@@ -30967,6 +31540,12 @@
Returns the collision point in which the ray intersects the closest object.
</description>
</method>
+ <method name="get_exclude_parent_body" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_layer_mask" qualifiers="const">
<return type="int">
</return>
@@ -31021,6 +31600,12 @@
Enables the RayCast2D. Only enabled raycasts will be able to query the space and report collisions.
</description>
</method>
+ <method name="set_exclude_parent_body">
+ <argument index="0" name="mask" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_layer_mask">
<argument index="0" name="mask" type="int">
</argument>
@@ -34093,6 +34678,12 @@
<description>
</description>
</method>
+ <method name="get_network_unique_id" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_node_count" qualifiers="const">
<return type="int">
</return>
@@ -34139,12 +34730,24 @@
<description>
</description>
</method>
+ <method name="is_network_server" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="is_paused" qualifiers="const">
<return type="bool">
</return>
<description>
</description>
</method>
+ <method name="is_refusing_new_network_connections" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="notify_group">
<argument index="0" name="call_flags" type="int">
</argument>
@@ -34223,12 +34826,24 @@
<description>
</description>
</method>
+ <method name="set_network_peer">
+ <argument index="0" name="peer" type="NetworkedMultiplayerPeer">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_pause">
<argument index="0" name="enable" type="bool">
</argument>
<description>
</description>
</method>
+ <method name="set_refuse_new_network_connections">
+ <argument index="0" name="refuse" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_screen_stretch">
<argument index="0" name="mode" type="int">
</argument>
@@ -34241,6 +34856,14 @@
</method>
</methods>
<signals>
+ <signal name="connected_to_server">
+ <description>
+ </description>
+ </signal>
+ <signal name="connection_failed">
+ <description>
+ </description>
+ </signal>
<signal name="files_dropped">
<argument index="0" name="files" type="StringArray">
</argument>
@@ -34257,6 +34880,18 @@
<description>
</description>
</signal>
+ <signal name="network_peer_connected">
+ <argument index="0" name="id" type="int">
+ </argument>
+ <description>
+ </description>
+ </signal>
+ <signal name="network_peer_disconnected">
+ <argument index="0" name="id" type="int">
+ </argument>
+ <description>
+ </description>
+ </signal>
<signal name="node_configuration_warning_changed">
<argument index="0" name="node" type="Object">
</argument>
@@ -34273,6 +34908,10 @@
<description>
</description>
</signal>
+ <signal name="server_disconnected">
+ <description>
+ </description>
+ </signal>
<signal name="tree_changed">
<description>
</description>
@@ -37774,6 +38413,62 @@
<constants>
</constants>
</class>
+<class name="StreamPeerBuffer" inherits="StreamPeer" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="clear">
+ <description>
+ </description>
+ </method>
+ <method name="duplicate" qualifiers="const">
+ <return type="StreamPeerBuffer">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_data_array" qualifiers="const">
+ <return type="RawArray">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_pos" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_size" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="resize">
+ <argument index="0" name="size" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="seek">
+ <argument index="0" name="pos" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_data_array">
+ <argument index="0" name="data" type="RawArray">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="StreamPeerSSL" inherits="StreamPeer" category="Core">
<brief_description>
SSL Stream peer.
@@ -42058,6 +42753,12 @@
<description>
</description>
</method>
+ <method name="is_delayed_text_editor_enabled" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="is_folding_hidden" qualifiers="const">
<return type="bool">
</return>
@@ -42106,6 +42807,12 @@
<description>
</description>
</method>
+ <method name="set_delayed_text_editor">
+ <argument index="0" name="enable" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_drop_mode_flags">
<argument index="0" name="flags" type="int">
</argument>
@@ -42174,6 +42881,10 @@
<description>
</description>
</signal>
+ <signal name="item_double_clicked">
+ <description>
+ </description>
+ </signal>
<signal name="item_edited">
<description>
</description>
@@ -43246,10 +43957,11 @@
<method name="create_action">
<argument index="0" name="name" type="String">
</argument>
- <argument index="1" name="mergeable" type="bool" default="false">
+ <argument index="1" name="merge_mode" type="int" default="0">
</argument>
<description>
- Create a new action. After this is called, do all your calls to [method add_do_method], [method add_undo_method], [method add_do_property] and [method add_undo_property].
+ Create a new action. After this is called, do all your calls to [method add_do_method], [method add_undo_method], [method add_do_property] and [method add_un
+do_property].
</description>
</method>
<method name="get_current_action_name" qualifiers="const">
@@ -43269,6 +43981,12 @@
</method>
</methods>
<constants>
+ <constant name="MERGE_DISABLE" value="0">
+ </constant>
+ <constant name="MERGE_ENDS" value="1">
+ </constant>
+ <constant name="MERGE_ALL" value="2">
+ </constant>
</constants>
</class>
<class name="VBoxContainer" inherits="BoxContainer" category="Core">
@@ -44724,9 +45442,9 @@
<method name="set_size_override">
<argument index="0" name="enable" type="bool">
</argument>
- <argument index="1" name="size" type="Vector2" default="Vector2((-1, -1))">
+ <argument index="1" name="size" type="Vector2" default="Vector2(-1, -1)">
</argument>
- <argument index="2" name="margin" type="Vector2" default="Vector2((0, 0))">
+ <argument index="2" name="margin" type="Vector2" default="Vector2(0, 0)">
</argument>
<description>
Set the size of the viewport. If the enable parameter is true, it would use the override, otherwise it would use the default size. If the size parameter is equal to [code](-1, -1)[/code], it won't update the size.
@@ -45127,7 +45845,7 @@
</argument>
<argument index="2" name="node" type="Object">
</argument>
- <argument index="3" name="pos" type="Vector2" default="Vector2((0, 0))">
+ <argument index="3" name="pos" type="Vector2" default="Vector2(0, 0)">
</argument>
<description>
</description>
@@ -45137,6 +45855,8 @@
</argument>
<argument index="1" name="default_value" type="Variant" default="NULL">
</argument>
+ <argument index="2" name="export" type="bool" default="false">
+ </argument>
<description>
</description>
</method>
@@ -45288,6 +46008,14 @@
<description>
</description>
</method>
+ <method name="get_variable_export" qualifiers="const">
+ <return type="bool">
+ </return>
+ <argument index="0" name="name" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="get_variable_info" qualifiers="const">
<return type="Dictionary">
</return>
@@ -45466,6 +46194,14 @@
<description>
</description>
</method>
+ <method name="set_variable_export">
+ <argument index="0" name="name" type="String">
+ </argument>
+ <argument index="1" name="enable" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_variable_info">
<argument index="0" name="name" type="String">
</argument>
@@ -45488,6 +46224,40 @@
<constants>
</constants>
</class>
+<class name="VisualScriptBasicTypeConstant" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_basic_type" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_basic_type_constant" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_basic_type">
+ <argument index="0" name="name" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_basic_type_constant">
+ <argument index="0" name="name" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="VisualScriptBuiltinFunc" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
@@ -45510,6 +46280,86 @@
<constants>
</constants>
</class>
+<class name="VisualScriptClassConstant" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_base_type">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_class_constant">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_base_type">
+ <argument index="0" name="name" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_class_constant">
+ <argument index="0" name="name" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
+<class name="VisualScriptComment" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_description" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_size" qualifiers="const">
+ <return type="Vector2">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_title" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_description">
+ <argument index="0" name="description" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_size">
+ <argument index="0" name="size" type="Vector2">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_title">
+ <argument index="0" name="title" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="VisualScriptCondition" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
@@ -45552,6 +46402,40 @@
<constants>
</constants>
</class>
+<class name="VisualScriptConstructor" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_constructor" qualifiers="const">
+ <return type="Dictionary">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_constructor_type" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_constructor">
+ <argument index="0" name="constructor" type="Dictionary">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_constructor_type">
+ <argument index="0" name="type" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="VisualScriptCustomNode" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
@@ -45592,16 +46476,6 @@
<description>
</description>
</method>
- <method name="_get_output_port_unsequenced" qualifiers="virtual">
- <return type="int">
- </return>
- <argument index="0" name="idx" type="int">
- </argument>
- <argument index="1" name="work_mem" type="Array">
- </argument>
- <description>
- </description>
- </method>
<method name="_get_output_sequence_port_count" qualifiers="virtual">
<return type="int">
</return>
@@ -45656,14 +46530,6 @@
<description>
</description>
</method>
- <method name="_is_output_port_unsequenced" qualifiers="virtual">
- <return type="int">
- </return>
- <argument index="0" name="idx" type="int">
- </argument>
- <description>
- </description>
- </method>
<method name="_step" qualifiers="virtual">
<return type="Variant">
</return>
@@ -45698,6 +46564,40 @@
</constant>
</constants>
</class>
+<class name="VisualScriptDeconstruct" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_deconstruct_input_type" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_deconstruct_type" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_deconstruct_input_type">
+ <argument index="0" name="input_type" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_deconstruct_type">
+ <argument index="0" name="type" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="VisualScriptEmitSignal" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
@@ -45742,6 +46642,16 @@
<constants>
</constants>
</class>
+<class name="VisualScriptExpression" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="VisualScriptFunction" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
@@ -45764,6 +46674,12 @@
<description>
</description>
</method>
+ <method name="get_base_script" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_base_type" qualifiers="const">
<return type="String">
</return>
@@ -45788,18 +46704,42 @@
<description>
</description>
</method>
+ <method name="get_rpc_call_mode" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_singleton" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_use_default_args" qualifiers="const">
<return type="int">
</return>
<description>
</description>
</method>
+ <method name="get_validate" qualifiers="const">
+ <return type="bool">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="set_base_path">
<argument index="0" name="base_path" type="NodePath">
</argument>
<description>
</description>
</method>
+ <method name="set_base_script">
+ <argument index="0" name="base_script" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_base_type">
<argument index="0" name="base_type" type="String">
</argument>
@@ -45824,12 +46764,30 @@
<description>
</description>
</method>
+ <method name="set_rpc_call_mode">
+ <argument index="0" name="mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_singleton">
+ <argument index="0" name="singleton" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_use_default_args">
<argument index="0" name="amount" type="int">
</argument>
<description>
</description>
</method>
+ <method name="set_validate">
+ <argument index="0" name="enable" type="bool">
+ </argument>
+ <description>
+ </description>
+ </method>
</methods>
<constants>
<constant name="CALL_MODE_SELF" value="0">
@@ -45918,17 +46876,41 @@
<constants>
</constants>
</class>
-<class name="VisualScriptInputFilter" inherits="VisualScriptNode" category="Core">
+<class name="VisualScriptInputAction" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
<description>
</description>
<methods>
+ <method name="get_action_mode" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_action_name" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_action_mode">
+ <argument index="0" name="mode" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_action_name">
+ <argument index="0" name="name" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
</methods>
<constants>
</constants>
</class>
-<class name="VisualScriptInputSelector" inherits="VisualScriptNode" category="Core">
+<class name="VisualScriptInputFilter" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
<description>
@@ -45948,6 +46930,74 @@
<constants>
</constants>
</class>
+<class name="VisualScriptLocalVar" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_var_name" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_var_type" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_var_name">
+ <argument index="0" name="name" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_var_type">
+ <argument index="0" name="type" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
+<class name="VisualScriptLocalVarSet" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_var_name" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="get_var_type" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_var_name">
+ <argument index="0" name="name" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
+ <method name="set_var_type">
+ <argument index="0" name="type" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
<class name="VisualScriptMathConstant" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
@@ -46020,12 +47070,46 @@
<description>
</description>
</method>
+ <method name="get_typed" qualifiers="const">
+ <return type="int">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="set_operator">
<argument index="0" name="op" type="int">
</argument>
<description>
</description>
</method>
+ <method name="set_typed">
+ <argument index="0" name="type" type="int">
+ </argument>
+ <description>
+ </description>
+ </method>
+ </methods>
+ <constants>
+ </constants>
+</class>
+<class name="VisualScriptPreload" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_preload" qualifiers="const">
+ <return type="Object">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_preload">
+ <argument index="0" name="resource" type="Object">
+ </argument>
+ <description>
+ </description>
+ </method>
</methods>
<constants>
</constants>
@@ -46042,6 +47126,12 @@
<description>
</description>
</method>
+ <method name="get_base_script" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
<method name="get_base_type" qualifiers="const">
<return type="String">
</return>
@@ -46078,6 +47168,12 @@
<description>
</description>
</method>
+ <method name="set_base_script">
+ <argument index="0" name="base_script" type="String">
+ </argument>
+ <description>
+ </description>
+ </method>
<method name="set_base_type">
<argument index="0" name="base_type" type="String">
</argument>
@@ -46130,19 +47226,21 @@
<description>
</description>
</method>
- <method name="get_base_type" qualifiers="const">
+ <method name="get_base_script" qualifiers="const">
<return type="String">
</return>
<description>
</description>
</method>
- <method name="get_basic_type" qualifiers="const">
- <return type="int">
+ <method name="get_base_type" qualifiers="const">
+ <return type="String">
</return>
<description>
</description>
</method>
- <method name="get_builtin_value" qualifiers="const">
+ <method name="get_basic_type" qualifiers="const">
+ <return type="int">
+ </return>
<description>
</description>
</method>
@@ -46164,14 +47262,14 @@
<description>
</description>
</method>
- <method name="is_using_builtin_value" qualifiers="const">
- <return type="bool">
- </return>
+ <method name="set_base_path">
+ <argument index="0" name="base_path" type="NodePath">
+ </argument>
<description>
</description>
</method>
- <method name="set_base_path">
- <argument index="0" name="base_path" type="NodePath">
+ <method name="set_base_script">
+ <argument index="0" name="base_script" type="String">
</argument>
<description>
</description>
@@ -46188,12 +47286,6 @@
<description>
</description>
</method>
- <method name="set_builtin_value">
- <argument index="0" name="value" type="Variant">
- </argument>
- <description>
- </description>
- </method>
<method name="set_call_mode">
<argument index="0" name="mode" type="int">
</argument>
@@ -46212,12 +47304,6 @@
<description>
</description>
</method>
- <method name="set_use_builtin_value">
- <argument index="0" name="enable" type="bool">
- </argument>
- <description>
- </description>
- </method>
</methods>
<constants>
<constant name="CALL_MODE_SELF" value="0">
@@ -46316,69 +47402,55 @@
<constants>
</constants>
</class>
-<class name="VisualScriptScriptCall" inherits="VisualScriptNode" category="Core">
+<class name="VisualScriptSelf" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
<description>
</description>
<methods>
- <method name="get_argument_count" qualifiers="const">
- <return type="int">
- </return>
- <description>
- </description>
- </method>
- <method name="get_base_path" qualifiers="const">
- <return type="NodePath">
- </return>
- <description>
- </description>
- </method>
- <method name="get_call_mode" qualifiers="const">
+ </methods>
+ <constants>
+ </constants>
+</class>
+<class name="VisualScriptSequence" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="get_steps" qualifiers="const">
<return type="int">
</return>
<description>
</description>
</method>
- <method name="get_function" qualifiers="const">
- <return type="String">
- </return>
- <description>
- </description>
- </method>
- <method name="set_argument_count">
- <argument index="0" name="argument_count" type="int">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_base_path">
- <argument index="0" name="base_path" type="NodePath">
- </argument>
- <description>
- </description>
- </method>
- <method name="set_call_mode">
- <argument index="0" name="mode" type="int">
+ <method name="set_steps">
+ <argument index="0" name="steps" type="int">
</argument>
<description>
</description>
</method>
- <method name="set_function">
- <argument index="0" name="function" type="String">
+ </methods>
+ <constants>
+ </constants>
+</class>
+<class name="VisualScriptSubCall" inherits="VisualScriptNode" category="Core">
+ <brief_description>
+ </brief_description>
+ <description>
+ </description>
+ <methods>
+ <method name="_subcall" qualifiers="virtual">
+ <argument index="0" name="arguments" type="Variant">
</argument>
<description>
</description>
</method>
</methods>
<constants>
- <constant name="CALL_MODE_SELF" value="0">
- </constant>
- <constant name="CALL_MODE_NODE_PATH" value="1">
- </constant>
</constants>
</class>
-<class name="VisualScriptSelf" inherits="VisualScriptNode" category="Core">
+<class name="VisualScriptSwitch" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
<description>
@@ -46388,36 +47460,32 @@
<constants>
</constants>
</class>
-<class name="VisualScriptSequence" inherits="VisualScriptNode" category="Core">
+<class name="VisualScriptTypeCast" inherits="VisualScriptNode" category="Core">
<brief_description>
</brief_description>
<description>
</description>
<methods>
- <method name="get_steps" qualifiers="const">
- <return type="int">
+ <method name="get_base_script" qualifiers="const">
+ <return type="String">
</return>
<description>
</description>
</method>
- <method name="set_steps">
- <argument index="0" name="steps" type="int">
+ <method name="get_base_type" qualifiers="const">
+ <return type="String">
+ </return>
+ <description>
+ </description>
+ </method>
+ <method name="set_base_script">
+ <argument index="0" name="path" type="String">
</argument>
<description>
</description>
</method>
- </methods>
- <constants>
- </constants>
-</class>
-<class name="VisualScriptSubCall" inherits="VisualScriptNode" category="Core">
- <brief_description>
- </brief_description>
- <description>
- </description>
- <methods>
- <method name="_subcall" qualifiers="virtual">
- <argument index="0" name="arguments" type="Variant">
+ <method name="set_base_type">
+ <argument index="0" name="type" type="String">
</argument>
<description>
</description>
@@ -46512,11 +47580,11 @@
</method>
</methods>
<constants>
- <constant name="YIELD_FRAME" value="0">
+ <constant name="YIELD_FRAME" value="1">
</constant>
- <constant name="YIELD_FIXED_FRAME" value="1">
+ <constant name="YIELD_FIXED_FRAME" value="2">
</constant>
- <constant name="YIELD_WAIT" value="2">
+ <constant name="YIELD_WAIT" value="3">
</constant>
</constants>
</class>
@@ -46684,6 +47752,8 @@
</argument>
<argument index="4" name="arg4" type="float" default="1">
</argument>
+ <argument index="5" name="arg5" type="bool" default="false">
+ </argument>
<description>
</description>
</method>
diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp
index ba93a26a2d..3809f4c7b9 100644
--- a/drivers/gles2/rasterizer_gles2.cpp
+++ b/drivers/gles2/rasterizer_gles2.cpp
@@ -8196,7 +8196,7 @@ RasterizerGLES2::Texture* RasterizerGLES2::_bind_canvas_texture(const RID& p_tex
return NULL;
}
-void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) {
+void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased) {
_bind_canvas_texture(RID());
Color c=p_color;
@@ -8208,8 +8208,18 @@ void RasterizerGLES2::canvas_draw_line(const Point2& p_from, const Point2& p_to,
Vector3(p_to.x,p_to.y,0)
};
+#ifdef GLEW_ENABLED
+ if (p_antialiased)
+ glEnable(GL_LINE_SMOOTH);
+#endif
glLineWidth(p_width);
_draw_primitive(2,verts,0,0,0);
+
+#ifdef GLEW_ENABLED
+ if (p_antialiased)
+ glDisable(GL_LINE_SMOOTH);
+#endif
+
_rinfo.ci_draw_commands++;
}
@@ -9135,7 +9145,7 @@ void RasterizerGLES2::_canvas_item_render_commands(CanvasItem *p_item,CanvasItem
case CanvasItem::Command::TYPE_LINE: {
CanvasItem::CommandLine* line = static_cast<CanvasItem::CommandLine*>(c);
- canvas_draw_line(line->from,line->to,line->color,line->width);
+ canvas_draw_line(line->from,line->to,line->color,line->width,line->antialiased);
} break;
case CanvasItem::Command::TYPE_RECT: {
diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h
index c9fc0c247d..b18f89d8e7 100644
--- a/drivers/gles2/rasterizer_gles2.h
+++ b/drivers/gles2/rasterizer_gles2.h
@@ -1633,7 +1633,7 @@ public:
virtual void canvas_begin_rect(const Matrix32& p_transform);
virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect);
virtual void canvas_end_rect();
- virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width);
+ virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased);
virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate);
virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width);
diff --git a/main/input_default.cpp b/main/input_default.cpp
index c655b409ff..ce480b4f99 100644
--- a/main/input_default.cpp
+++ b/main/input_default.cpp
@@ -71,13 +71,13 @@ InputDefault::SpeedTrack::SpeedTrack() {
reset();
}
-bool InputDefault::is_key_pressed(int p_scancode) {
+bool InputDefault::is_key_pressed(int p_scancode) const {
_THREAD_SAFE_METHOD_
return keys_pressed.has(p_scancode);
}
-bool InputDefault::is_mouse_button_pressed(int p_button) {
+bool InputDefault::is_mouse_button_pressed(int p_button) const {
_THREAD_SAFE_METHOD_
return (mouse_button_mask&(1<<p_button))!=0;
@@ -89,14 +89,16 @@ static int _combine_device(int p_value,int p_device) {
return p_value|(p_device<<20);
}
-bool InputDefault::is_joy_button_pressed(int p_device, int p_button) {
+bool InputDefault::is_joy_button_pressed(int p_device, int p_button) const{
_THREAD_SAFE_METHOD_
return joy_buttons_pressed.has(_combine_device(p_button,p_device));
}
-bool InputDefault::is_action_pressed(const StringName& p_action) {
+bool InputDefault::is_action_pressed(const StringName& p_action) const{
+ return action_state.has(p_action) && action_state[p_action].pressed;
+#if 0
if (custom_action_press.has(p_action))
return true; //simpler
@@ -147,9 +149,37 @@ bool InputDefault::is_action_pressed(const StringName& p_action) {
}
return false;
+#endif
}
-float InputDefault::get_joy_axis(int p_device,int p_axis) {
+bool InputDefault::is_action_just_pressed(const StringName& p_action) const {
+
+ const Map<StringName,Action>::Element *E=action_state.find(p_action);
+ if (!E)
+ return false;
+
+ if (OS::get_singleton()->is_in_fixed_frame()) {
+ return E->get().pressed && E->get().fixed_frame==OS::get_singleton()->get_fixed_frames();
+ } else {
+ return E->get().pressed && E->get().idle_frame==OS::get_singleton()->get_idle_frames();
+ }
+}
+
+bool InputDefault::is_action_just_released(const StringName& p_action) const{
+
+ const Map<StringName,Action>::Element *E=action_state.find(p_action);
+ if (!E)
+ return false;
+
+ if (OS::get_singleton()->is_in_fixed_frame()) {
+ return !E->get().pressed && E->get().fixed_frame==OS::get_singleton()->get_fixed_frames();
+ } else {
+ return !E->get().pressed && E->get().idle_frame==OS::get_singleton()->get_idle_frames();
+ }
+}
+
+
+float InputDefault::get_joy_axis(int p_device,int p_axis) const{
_THREAD_SAFE_METHOD_
int c = _combine_device(p_axis,p_device);
@@ -247,19 +277,19 @@ void InputDefault::joy_connection_changed(int p_idx, bool p_connected, String p_
emit_signal("joy_connection_changed", p_idx, p_connected);
};
-Vector3 InputDefault::get_accelerometer() {
+Vector3 InputDefault::get_accelerometer() const{
_THREAD_SAFE_METHOD_
return accelerometer;
}
-Vector3 InputDefault::get_magnetometer() {
+Vector3 InputDefault::get_magnetometer() const{
_THREAD_SAFE_METHOD_
return magnetometer;
}
-Vector3 InputDefault::get_gyroscope() {
+Vector3 InputDefault::get_gyroscope() const {
_THREAD_SAFE_METHOD_
return gyroscope;
@@ -341,6 +371,23 @@ void InputDefault::parse_input_event(const InputEvent& p_event) {
}
+
+ if (!p_event.is_echo()) {
+ for (const Map<StringName,InputMap::Action>::Element *E=InputMap::get_singleton()->get_action_map().front();E;E=E->next()) {
+
+ if (InputMap::get_singleton()->event_is_action(p_event,E->key())) {
+
+ Action action;
+ action.fixed_frame=OS::get_singleton()->get_fixed_frames();
+ action.idle_frame=OS::get_singleton()->get_idle_frames();
+ action.pressed=p_event.is_pressed();
+
+ action_state[E->key()]=action;
+
+ }
+ }
+ }
+
if (main_loop)
main_loop->input_event(p_event);
@@ -441,21 +488,25 @@ void InputDefault::iteration(float p_step) {
void InputDefault::action_press(const StringName& p_action) {
- if (custom_action_press.has(p_action)) {
+ Action action;
+
+ action.fixed_frame=OS::get_singleton()->get_fixed_frames();
+ action.idle_frame=OS::get_singleton()->get_idle_frames();
+ action.pressed=true;
+
+ action_state[p_action]=action;
- custom_action_press[p_action]++;
- } else {
- custom_action_press[p_action]=1;
- }
}
void InputDefault::action_release(const StringName& p_action){
- ERR_FAIL_COND(!custom_action_press.has(p_action));
- custom_action_press[p_action]--;
- if (custom_action_press[p_action]==0) {
- custom_action_press.erase(p_action);
- }
+ Action action;
+
+ action.fixed_frame=OS::get_singleton()->get_fixed_frames();
+ action.idle_frame=OS::get_singleton()->get_idle_frames();
+ action.pressed=true;
+
+ action_state[p_action]=action;
}
void InputDefault::set_emulate_touch(bool p_emulate) {
@@ -508,12 +559,18 @@ static const char *s_ControllerMappings [] =
#ifdef WINDOWS_ENABLED
"00f00300000000000000504944564944,RetroUSB.com RetroPad,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,",
"00f0f100000000000000504944564944,RetroUSB.com Super RetroPort,a:b1,b:b5,x:b0,y:b4,back:b2,start:b3,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,",
+ "02200090000000000000504944564944,8Bitdo NES30 PRO USB,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
"0d0f4900000000000000504944564944,Hatsune Miku Sho Controller,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
+ "0d0f6e00000000000000504944564944,HORIPAD 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
"10080100000000000000504944564944,PS1 USB,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftshoulder:b6,rightshoulder:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,",
"10080300000000000000504944564944,PS2 USB,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a4,righty:a2,lefttrigger:b4,righttrigger:b5,",
+ "10280900000000000000504944564944,8Bitdo SFC30 GamePad,a:b1,b:b0,y:b3,x:b4,start:b11,back:b10,leftshoulder:b6,leftx:a0,lefty:a1,rightshoulder:b7,",
+ "20380900000000000000504944564944,8Bitdo NES30 PRO Wireless,a:b0,b:b1,x:b3,y:b4,leftshoulder:b6,rightshoulder:b7,lefttrigger:b8,righttrigger:b9,back:b10,start:b11,leftstick:b13,rightstick:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,dpup:h0.1,dpright:h0.2,dpdown:h0.4,dpleft:h0.8,",
"25090500000000000000504944564944,PS3 DualShock,a:b2,b:b1,back:b9,dpdown:h0.8,dpleft:h0.4,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b6,leftstick:b10,lefttrigger:b4,leftx:a0,lefty:a1,rightshoulder:b7,rightstick:b11,righttrigger:b5,rightx:a2,righty:a3,start:b8,x:b0,y:b3,",
"2509e803000000000000504944564944,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
"28040140000000000000504944564944,GamePad Pro USB,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,",
+ "300f1001000000000000504944564944,Saitek P480 Rumble Pad,a:b2,b:b3,x:b0,y:b1,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b5,righttrigger:b7,",
+ "341a0108000000000000504944564944,EXEQ RF USB Gamepad 8206,a:b0,b:b1,x:b2,y:b3,leftshoulder:b4,rightshoulder:b5,leftstick:b8,rightstick:b7,back:b8,start:b9,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
"341a3608000000000000504944564944,Afterglow PS3 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"36280100000000000000504944564944,OUYA Controller,a:b0,b:b3,y:b2,x:b1,start:b14,guide:b15,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b8,dpleft:b10,dpdown:b9,dpright:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b12,righttrigger:b13,",
"49190204000000000000504944564944,Ipega PG-9023,a:b0,b:b1,x:b3,y:b4,back:b10,start:b11,leftstick:b13,rightstick:b14,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b8,righttrigger:b9",
@@ -523,6 +580,7 @@ static const char *s_ControllerMappings [] =
"4f0400b3000000000000504944564944,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,",
"4f0415b3000000000000504944564944,Thrustmaster Dual Analog 3.2,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
"4f0423b3000000000000504944564944,Dual Trigger 3-in-1,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:b7",
+ "63252305000000000000504944564944,USB Vibration Joystick (BM),x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
"6d0416c2000000000000504944564944,Generic DirectInput Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"6d0418c2000000000000504944564944,Logitech RumblePad 2 USB,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
"6d0419c2000000000000504944564944,Logitech F710 Gamepad,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
@@ -538,8 +596,10 @@ static const char *s_ControllerMappings [] =
"8f0e1200000000000000504944564944,Acme,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,",
"9000318000000000000504944564944,Mayflash Wiimote PC Adapter,a:b2,b:h0.4,x:b0,y:b1,back:b4,start:b5,guide:b11,leftshoulder:b6,rightshoulder:b3,leftx:a0,lefty:a1,",
"a3060cff000000000000504944564944,Saitek P2500,a:b2,b:b3,y:b1,x:b0,start:b4,guide:b10,back:b5,leftstick:b8,rightstick:b9,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
+ "c0111352000000000000504944564944,Battalife Joystick,x:b4,a:b6,b:b7,y:b5,back:b2,start:b3,leftshoulder:b0,rightshoulder:b1,leftx:a0,lefty:a1,",
"c911f055000000000000504944564944,GAMEPAD,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"d6206dca000000000000504944564944,PowerA Pro Ex,a:b1,b:b2,x:b0,y:b3,back:b8,guide:b12,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.0,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
+ "ff113133000000000000504944564944,Gembird JPD-DualForce,a:b2,b:b3,x:b0,y:b1,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,leftstick:b10,rightstick:b11,",
"ff113133000000000000504944564944,SVEN X-PAD,a:b2,b:b3,y:b1,x:b0,start:b5,back:b4,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b8,righttrigger:b9,",
"ffff0000000000000000504944564944,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"__XINPUT_DEVICE__,XInput Gamepad,a:b12,b:b13,x:b14,y:b15,start:b4,back:b5,leftstick:b6,rightstick:b7,leftshoulder:b8,rightshoulder:b9,dpup:b0,dpdown:b1,dpleft:b2,dpright:b3,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:a4,righttrigger:a5,",
@@ -548,21 +608,30 @@ static const char *s_ControllerMappings [] =
#ifdef OSX_ENABLED
"0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"050000005769696d6f74652028303000,Wii Remote,a:b4,b:b5,y:b9,x:b10,start:b6,guide:b8,back:b7,dpup:b2,dpleft:b0,dpdown:b3,dpright:b1,leftx:a0,lefty:a1,lefttrigger:b12,righttrigger:,leftshoulder:b11,",
+ "050000005769696d6f74652028313800,Wii U Pro Controller,a:b16,b:b15,x:b18,y:b17,back:b7,guide:b8,start:b6,leftstick:b23,rightstick:b24,leftshoulder:b19,rightshoulder:b20,dpup:b11,dpdown:b12,dpleft:b13,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b21,righttrigger:b22,",
"0d0f0000000000004d00000000000000,HORI Gem Pad 3,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
+ "0d0f0000000000006600000000000000,HORIPAD FPS PLUS 4,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a5,lefttrigger:b6,righttrigger:a4,",
+ "10280000000000000900000000000000,8Bitdo SFC30 GamePad,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,",
+ "2509000000000000e803000000000000,Mayflash Wii Classic Controller,a:b1,b:b0,x:b3,y:b2,back:b8,guide:b10,start:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:b11,dpdown:b13,dpleft:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
+ "351200000000000021ab000000000000,SFC30 Joystick,a:b1,b:b0,x:b4,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,",
"4c050000000000006802000000000000,PS3 Controller,a:b14,b:b13,back:b0,dpdown:b6,dpleft:b7,dpright:b5,dpup:b4,guide:b16,leftshoulder:b10,leftstick:b1,lefttrigger:b8,leftx:a0,lefty:a1,rightshoulder:b11,rightstick:b2,righttrigger:b9,rightx:a2,righty:a3,start:b3,x:b15,y:b12,",
"4c05000000000000c405000000000000,PS4 Controller,a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
"4f0400000000000000b3000000000000,Thrustmaster Firestorm Dual Power,a:b0,b:b2,y:b3,x:b1,start:b10,guide:b8,back:b9,leftstick:b11,rightstick:,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,",
"4f0400000000000015b3000000000000,Thrustmaster Dual Analog 3.2,x:b1,a:b0,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
"5e040000000000008e02000000000000,X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
+ "5e04000000000000dd02000000000000,Xbox One Wired Controller,x:b2,a:b0,b:b1,y:b3,back:b9,guide:b10,start:b8,dpleft:b13,dpdown:b12,dpright:b14,dpup:b11,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b6,rightstick:b7,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"6d0400000000000016c2000000000000,Logitech F310 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* Guide button doesn't seem to be sent in DInput mode. */
"6d0400000000000018c2000000000000,Logitech F510 Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,",
"6d0400000000000019c2000000000000,Logitech Wireless Gamepad (DInput),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b0,y:b3,", /* This includes F710 in DInput mode and the "Logitech Cordless RumblePad 2", at the very least. */
"6d040000000000001fc2000000000000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
+ "79000000000000000018000000000000,Mayflash WiiU Pro Game Controller Adapter (DInput),a:b4,b:b8,x:b0,y:b12,back:b32,start:b36,leftstick:b40,rightstick:b44,leftshoulder:b16,rightshoulder:b20,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a4,rightx:a8,righty:a12,lefttrigger:b24,righttrigger:b28,",
"79000000000000000600000000000000,G-Shark GP-702,a:b2,b:b1,x:b3,y:b0,back:b8,start:b9,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:b6,righttrigger:b7,",
"83050000000000006020000000000000,iBuffalo USB 2-axis 8-button Gamepad,a:b1,b:b0,x:b3,y:b2,back:b6,start:b7,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,",
"891600000000000000fd000000000000,Razer Onza Tournament,a:b0,b:b1,y:b3,x:b2,start:b8,guide:b10,back:b9,leftstick:b6,rightstick:b7,leftshoulder:b4,rightshoulder:b5,dpup:b11,dpleft:b13,dpdown:b12,dpright:b14,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
"8f0e0000000000000300000000000000,Piranha xtreme,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,",
- "AD1B00000000000001F9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
+ "ad1b00000000000001f9000000000000,Gamestop BB-070 X360 Controller,a:b0,b:b1,back:b9,dpdown:b12,dpleft:b13,dpright:b14,dpup:b11,guide:b10,leftshoulder:b4,leftstick:b6,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b7,righttrigger:a5,rightx:a3,righty:a4,start:b8,x:b2,y:b3,",
+ "b4040000000000000a01000000000000,Sega Saturn USB Gamepad,a:b0,b:b1,x:b3,y:b4,back:b5,guide:b2,start:b8,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,",
+ "d814000000000000cecf000000000000,MC Cthulhu,leftx:,lefty:,rightx:,righty:,lefttrigger:b6,a:b1,b:b2,y:b3,x:b0,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,righttrigger:b7,",
#endif
#if X11_ENABLED
@@ -586,13 +655,14 @@ static const char *s_ControllerMappings [] =
"030000004f04000015b3000010010000,Thrustmaster Dual Analog 4,a:b0,b:b2,x:b1,y:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,",
"030000004f04000020b3000010010000,Thrustmaster 2 in 1 DT,a:b0,b:b2,y:b3,x:b1,start:b9,guide:,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b6,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b5,righttrigger:b7,",
"030000004f04000023b3000000010000,Thrustmaster Dual Trigger 3-in-1,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a5,",
- "030000005e0400001907000000010000,X360 Wireless Controller,a:b0,b:b1,back:b6,dpdown:b14,dpleft:b11,dpright:b12,dpup:b13,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
+ "030000005e0400001907000000010000,X360 Wireless Controller,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:h0.8,lefttrigger:a2,x:b2,dpup:h0.1,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:h0.2,righttrigger:a5,b:b1,",
"030000005e0400008902000021010000,Microsoft X-Box pad v2 (US),x:b3,a:b0,b:b1,y:b4,back:b6,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b5,lefttrigger:a2,rightshoulder:b2,righttrigger:a5,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"030000005e0400008e02000001000000,Microsoft X-Box 360 pad,leftstick:b9,leftx:a0,lefty:a1,dpdown:h0.1,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:h0.2,lefttrigger:a2,x:b2,dpup:h0.4,back:b6,leftshoulder:b4,y:b3,a:b0,dpright:h0.8,righttrigger:a5,b:b1,",
"030000005e0400008e02000004010000,Microsoft X-Box 360 pad,a:b0,b:b1,x:b2,y:b3,back:b6,start:b7,guide:b8,leftshoulder:b4,rightshoulder:b5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,",
"030000005e0400008e02000010010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000005e0400008e02000014010000,X360 Controller,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000005e0400008e02000020200000,SpeedLink XEOX Pro Analog Gamepad pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
+ "030000005e0400008e02000062230000,Microsoft X-Box 360 pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"030000005e0400009102000007010000,X360 Wireless Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:b13,dpleft:b11,dpdown:b14,dpright:b12,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
"030000005e040000d102000001010000,Microsoft X-Box One pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"030000005e040000dd02000003020000,Microsoft X-Box One pad v2,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
@@ -606,6 +676,7 @@ static const char *s_ControllerMappings [] =
"030000006d0400001ec2000020200000,Logitech F510 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000006d0400001fc2000005030000,Logitech F710 Gamepad (XInput),a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"030000006e0500000320000010010000,JC-U3613M - DirectInput Mode,x:b0,a:b2,b:b3,y:b1,back:b10,guide:b12,start:b11,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b8,rightstick:b9,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
+ "030000006f0e00000103000000020000,Logic3 Controller,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"030000006f0e00001304000000010000,Generic X-Box pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"030000006f0e00001e01000011010000,Rock Candy Gamepad for PS3,a:b1,b:b2,x:b0,y:b3,back:b8,start:b9,guide:b12,leftshoulder:b4,rightshoulder:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,",
"030000006f0e00001f01000000010000,Generic X-Box pad,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
@@ -620,19 +691,26 @@ static const char *s_ControllerMappings [] =
"030000008916000001fd000024010000,Razer Onza Classic Edition,x:b2,a:b0,b:b1,y:b3,back:b6,guide:b8,start:b7,dpleft:b11,dpdown:b14,dpright:b12,dpup:b13,leftshoulder:b4,lefttrigger:a2,rightshoulder:b5,righttrigger:a5,leftstick:b9,rightstick:b10,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"030000008f0e00000300000010010000,GreenAsia Inc. USB Joystick,x:b3,a:b2,b:b1,y:b0,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b6,lefttrigger:b4,rightshoulder:b7,righttrigger:b5,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,",
"030000008f0e00001200000010010000,GreenAsia Inc. USB Joystick,x:b2,a:b0,b:b1,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b5,rightshoulder:b6,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a2,",
+ "03000000a30600000901000000010000,Saitek P880,a:b2,b:b3,y:b1,x:b0,leftstick:b8,rightstick:b9,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b6,righttrigger:b7,",
"03000000a30600000c04000011010000,Saitek P2900 Wireless Pad,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b6,rightshoulder:b7,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a2,lefttrigger:b4,righttrigger:b5,",
"03000000a306000018f5000010010000,Saitek PLC Saitek P3200 Rumble Pad,x:b0,a:b1,b:b2,y:b3,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:a2,rightshoulder:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a3,righty:a4,",
"03000000a306000023f6000011010000,Saitek Cyborg V.1 Game Pad,a:b1,b:b2,y:b3,x:b0,start:b9,guide:b12,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a4,lefttrigger:b6,righttrigger:b7,",
"03000000ad1b000001f5000033050000,Hori Pad EX Turbo 2,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
+ "03000000ad1b000016f0000090040000,Mad Catz Xbox 360 Controller,a:b0,b:b1,y:b3,x:b2,start:b7,guide:b8,back:b6,leftstick:b9,rightstick:b10,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a3,righty:a4,lefttrigger:a2,righttrigger:a5,",
"03000000ba2200002010000001010000,Jess Technology USB Game Controller,a:b2,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,righttrigger:b7,rightx:a3,righty:a2,start:b9,x:b3,y:b0,",
"03000000c9110000f055000011010000,HJC Game GAMEPAD,platform:Linux,x:b2,a:b0,b:b1,y:b3,back:b4,back:b8,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
+ "03000000d814000007cd000011010000,Toodles 2008 Chimp PC/PS3,a:b0,b:b1,y:b2,x:b3,start:b9,back:b8,leftshoulder:b4,rightshoulder:b5,leftx:a0,lefty:a1,lefttrigger:b6,righttrigger:b7,",
+ "03000000d81400000862000011010000,HitBox (PS3/PC) Analog Mode,a:b1,b:b2,y:b3,x:b0,start:b12,guide:b9,back:b8,leftshoulder:b4,rightshoulder:b5,lefttrigger:b6,righttrigger:b7,leftx:a0,lefty:a1,",
"03000000de280000ff11000001000000,Valve Streaming Gamepad,a:b0,b:b1,back:b6,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b8,leftshoulder:b4,leftstick:b9,lefttrigger:a2,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b10,righttrigger:a5,rightx:a3,righty:a4,start:b7,x:b2,y:b3,",
"03000000f0250000c183000010010000,Goodbetterbest Ltd USB Controller,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.0,dpdown:h0.4,dpright:h0.0,dpright:h0.2,dpup:h0.0,dpup:h0.1,leftshoulder:h0.0,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
"03000000fd0500002a26000000010000,3dfx InterAct HammerHead FX,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b5,rightshoulder:b7,rightx:a2,start:b11,righty:a3,dpleft:h0.8,lefttrigger:b8,x:b0,dpup:h0.1,back:b10,leftstick:b2,leftshoulder:b6,y:b1,a:b3,dpright:h0.2,righttrigger:b9,b:b4,",
"03000000ff1100003133000010010000,PC Game Controller,a:b2,b:b1,y:b0,x:b3,start:b9,back:b8,leftstick:b10,rightstick:b11,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
+ "05000000010000000100000003000000,Nintendo Wiimote,a:b0,b:b1,y:b3,x:b2,start:b9,guide:b10,back:b8,leftstick:b11,rightstick:b12,leftshoulder:b4,rightshoulder:b5,dpup:h0.1,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b6,righttrigger:b7,",
+ "05000000102800000900000000010000,8Bitdo SFC30 GamePad,x:b4,a:b1,b:b0,y:b3,back:b10,start:b11,leftshoulder:b6,rightshoulder:b7,leftx:a0,lefty:a1,",
"05000000362800000100000002010000,OUYA Game Controller,leftx:a0,lefty:a1,dpdown:b9,rightstick:b7,rightshoulder:b5,rightx:a3,start:b16,righty:a4,dpleft:b10,lefttrigger:b12,x:b1,dpup:b8,back:b14,leftstick:b6,leftshoulder:b4,y:b2,a:b0,dpright:b11,righttrigger:b13,b:b3,",
"05000000362800000100000003010000,OUYA Game Controller,leftx:a0,lefty:a1,dpdown:b9,rightstick:b7,rightshoulder:b5,rightx:a3,start:b16,righty:a4,dpleft:b10,lefttrigger:b12,x:b1,dpup:b8,back:b14,leftstick:b6,leftshoulder:b4,y:b2,a:b0,dpright:b11,righttrigger:b13,b:b3,",
"05000000362800000100000004010000,OUYA Game Controller,leftx:a0,lefty:a1,dpdown:b9,rightstick:b7,rightshoulder:b5,rightx:a3,start:b16,righty:a4,dpleft:b10,lefttrigger:b12,x:b1,dpup:b8,back:b14,leftstick:b6,leftshoulder:b4,y:b2,a:b0,dpright:b11,righttrigger:b13,b:b3,",
+ "05000000380700006652000025010000,Mad Catz C.T.R.L.R,x:b0,a:b1,b:b2,y:b3,back:b8,guide:b12,start:b9,dpleft:h0.8,dpdown:h0.4,dpright:h0.2,dpup:h0.1,leftshoulder:b4,lefttrigger:b6,rightshoulder:b5,righttrigger:b7,leftstick:b10,rightstick:b11,leftx:a0,lefty:a1,rightx:a2,righty:a3,",
"0500000047532047616d657061640000,GameStop Gamepad,a:b0,b:b1,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:,leftshoulder:b4,leftstick:b10,lefttrigger:b6,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:b7,rightx:a2,righty:a3,start:b9,x:b2,y:b3,",
"050000004c0500006802000000010000,PS3 Controller (Bluetooth),a:b14,b:b13,y:b12,x:b15,start:b3,guide:b16,back:b0,leftstick:b1,rightstick:b2,leftshoulder:b10,rightshoulder:b11,dpup:b4,dpleft:b7,dpdown:b6,dpright:b5,leftx:a0,lefty:a1,rightx:a2,righty:a3,lefttrigger:b8,righttrigger:b9,",
"050000004c050000c405000000010000,PS4 Controller (Bluetooth),a:b1,b:b2,back:b8,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,guide:b12,leftshoulder:b4,leftstick:b10,lefttrigger:a3,leftx:a0,lefty:a1,rightshoulder:b5,rightstick:b11,righttrigger:a4,rightx:a2,righty:a5,start:b9,x:b0,y:b3,",
@@ -1055,6 +1133,7 @@ bool InputDefault::is_joy_mapped(int p_device) {
}
String InputDefault::get_joy_guid_remapped(int p_device) const {
+ ERR_FAIL_COND_V(!joy_names.has(p_device), "");
return joy_names[p_device].uid;
}
diff --git a/main/input_default.h b/main/input_default.h
index cb71312e22..fbf7837b3b 100644
--- a/main/input_default.h
+++ b/main/input_default.h
@@ -38,16 +38,27 @@ class InputDefault : public Input {
_THREAD_SAFE_CLASS_
int mouse_button_mask;
+
+
Set<int> keys_pressed;
Set<int> joy_buttons_pressed;
Map<int,float> _joy_axis;
- Map<StringName,int> custom_action_press;
+ //Map<StringName,int> custom_action_press;
Vector3 accelerometer;
Vector3 magnetometer;
Vector3 gyroscope;
Vector2 mouse_pos;
MainLoop *main_loop;
+ struct Action {
+ uint64_t fixed_frame;
+ uint64_t idle_frame;
+ bool pressed;
+ };
+
+ Map<StringName,Action> action_state;
+
+
bool emulate_touch;
struct VibrationInfo {
@@ -164,12 +175,14 @@ public:
- virtual bool is_key_pressed(int p_scancode);
- virtual bool is_mouse_button_pressed(int p_button);
- virtual bool is_joy_button_pressed(int p_device, int p_button);
- virtual bool is_action_pressed(const StringName& p_action);
+ virtual bool is_key_pressed(int p_scancode) const;
+ virtual bool is_mouse_button_pressed(int p_button) const;
+ virtual bool is_joy_button_pressed(int p_device, int p_button) const;
+ virtual bool is_action_pressed(const StringName& p_action) const;
+ virtual bool is_action_just_pressed(const StringName& p_action) const;
+ virtual bool is_action_just_released(const StringName& p_action) const;
- virtual float get_joy_axis(int p_device,int p_axis);
+ virtual float get_joy_axis(int p_device,int p_axis) const;
String get_joy_name(int p_idx);
virtual Array get_connected_joysticks();
virtual Vector2 get_joy_vibration_strength(int p_device);
@@ -178,9 +191,9 @@ public:
void joy_connection_changed(int p_idx, bool p_connected, String p_name, String p_guid = "");
void parse_joystick_mapping(String p_mapping, bool p_update_existing);
- virtual Vector3 get_accelerometer();
- virtual Vector3 get_magnetometer();
- virtual Vector3 get_gyroscope();
+ virtual Vector3 get_accelerometer() const;
+ virtual Vector3 get_magnetometer() const;
+ virtual Vector3 get_gyroscope() const;
virtual Point2 get_mouse_pos() const;
virtual Point2 get_mouse_speed() const;
diff --git a/main/main.cpp b/main/main.cpp
index aa8540632f..e339f399de 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -1560,6 +1560,8 @@ bool Main::iteration() {
int iters = 0;
+ OS::get_singleton()->_in_fixed=true;
+
while(time_accum>frame_slice) {
uint64_t fixed_begin = OS::get_singleton()->get_ticks_usec();
@@ -1590,8 +1592,11 @@ bool Main::iteration() {
fixed_process_ticks=MAX(fixed_process_ticks,OS::get_singleton()->get_ticks_usec()-fixed_begin); // keep the largest one for reference
fixed_process_max=MAX(OS::get_singleton()->get_ticks_usec()-fixed_begin,fixed_process_max);
iters++;
+ OS::get_singleton()->_fixed_frames++;
}
+ OS::get_singleton()->_in_fixed=false;
+
uint64_t idle_begin = OS::get_singleton()->get_ticks_usec();
OS::get_singleton()->get_main_loop()->idle( step*time_scale );
@@ -1640,6 +1645,7 @@ bool Main::iteration() {
// x11_delay_usec(10000);
frames++;
+ OS::get_singleton()->_idle_frames++;
if (frame>1000000) {
diff --git a/modules/enet/SCsub b/modules/enet/SCsub
index c676c55c89..d2bc8801e4 100644
--- a/modules/enet/SCsub
+++ b/modules/enet/SCsub
@@ -2,5 +2,7 @@ Import('env')
env.add_source_files(env.modules_sources,"*.cpp")
env.add_source_files(env.modules_sources,"*.c")
+#TODO: Make it possible to build against system enet
+env.Append(CPPPATH = ["#modules/enet"])
Export('env')
diff --git a/modules/enet/networked_multiplayer_enet.cpp b/modules/enet/networked_multiplayer_enet.cpp
index aebdfe03a5..18a4347edf 100644
--- a/modules/enet/networked_multiplayer_enet.cpp
+++ b/modules/enet/networked_multiplayer_enet.cpp
@@ -1,3 +1,5 @@
+#include "os/os.h"
+#include "io/marshalls.h"
#include "networked_multiplayer_enet.h"
void NetworkedMultiplayerENet::set_transfer_mode(TransferMode p_mode) {
@@ -5,73 +7,71 @@ void NetworkedMultiplayerENet::set_transfer_mode(TransferMode p_mode) {
transfer_mode=p_mode;
}
-void NetworkedMultiplayerENet::set_target_peer(const StringName &p_peer){
+void NetworkedMultiplayerENet::set_target_peer(int p_peer){
target_peer=p_peer;
}
-void NetworkedMultiplayerENet::set_channel(int p_channel){
- send_channel=p_channel;
-}
-
-
-StringName NetworkedMultiplayerENet::get_packet_peer() const{
+int NetworkedMultiplayerENet::get_packet_peer() const{
- ERR_FAIL_COND_V(!active,StringName());
- ERR_FAIL_COND_V(incoming_packets.size()==0,StringName());
+ ERR_FAIL_COND_V(!active,1);
+ ERR_FAIL_COND_V(incoming_packets.size()==0,1);
return incoming_packets.front()->get().from;
}
-int NetworkedMultiplayerENet::get_packet_channel() const{
-
- ERR_FAIL_COND_V(!active,0);
- ERR_FAIL_COND_V(incoming_packets.size()==0,0);
- return incoming_packets.front()->get().from_channel;
-}
-
-Error NetworkedMultiplayerENet::create_server(int p_port, int p_max_clients, int p_max_channels, int p_in_bandwidth, int p_out_bandwidth){
+Error NetworkedMultiplayerENet::create_server(int p_port, int p_max_clients, int p_in_bandwidth, int p_out_bandwidth){
ERR_FAIL_COND_V(active,ERR_ALREADY_IN_USE);
ENetAddress address;
- address.host = ENET_HOST_ANY;
- /* Bind the server to port 1234. */
- address.port = 1234;
+ address.host = bind_ip;
+
+ address.port = p_port;
host = enet_host_create (& address /* the address to bind the server host to */,
p_max_clients /* allow up to 32 clients and/or outgoing connections */,
- p_max_channels /* allow up to 2 channels to be used, 0 and 1 */,
+ 2 /* allow up to 2 channels to be used, 0 and 1 */,
p_in_bandwidth /* assume any amount of incoming bandwidth */,
p_out_bandwidth /* assume any amount of outgoing bandwidth */);
ERR_FAIL_COND_V(!host,ERR_CANT_CREATE);
+ _setup_compressor();
active=true;
server=true;
+ refuse_connections=false;
+ unique_id=1;
connection_status=CONNECTION_CONNECTED;
return OK;
}
-Error NetworkedMultiplayerENet::create_client(const IP_Address& p_ip,int p_port, int p_max_channels, int p_in_bandwidth, int p_out_bandwidth){
+Error NetworkedMultiplayerENet::create_client(const IP_Address& p_ip, int p_port, int p_in_bandwidth, int p_out_bandwidth){
ERR_FAIL_COND_V(active,ERR_ALREADY_IN_USE);
host = enet_host_create (NULL /* create a client host */,
1 /* only allow 1 outgoing connection */,
- p_max_channels /* allow up 2 channels to be used, 0 and 1 */,
+ 2 /* allow up 2 channels to be used, 0 and 1 */,
p_in_bandwidth /* 56K modem with 56 Kbps downstream bandwidth */,
p_out_bandwidth /* 56K modem with 14 Kbps upstream bandwidth */);
ERR_FAIL_COND_V(!host,ERR_CANT_CREATE);
+ _setup_compressor();
+
ENetAddress address;
address.host=p_ip.host;
address.port=p_port;
+ //enet_address_set_host (& address, "localhost");
+ //address.port = p_port;
+
+ unique_id=_gen_unique_id();
+
/* Initiate the connection, allocating the two channels 0 and 1. */
- ENetPeer *peer = enet_host_connect (host, & address, p_max_channels, 0);
+ ENetPeer *peer = enet_host_connect (host, & address, 2, unique_id);
if (peer == NULL) {
enet_host_destroy(host);
@@ -83,6 +83,7 @@ Error NetworkedMultiplayerENet::create_client(const IP_Address& p_ip,int p_port,
connection_status=CONNECTION_CONNECTING;
active=true;
server=false;
+ refuse_connections=false;
return OK;
}
@@ -95,18 +96,41 @@ void NetworkedMultiplayerENet::poll(){
ENetEvent event;
/* Wait up to 1000 milliseconds for an event. */
- while (enet_host_service (host, & event, 1000) > 0)
- {
+ while (true) {
+
+ if (!host || !active) //might have been disconnected while emitting a notification
+ return;
+
+ int ret = enet_host_service (host, & event, 1);
+
+ if (ret<0) {
+ //error, do something?
+ break;
+ } else if (ret==0) {
+ break;
+ }
+
switch (event.type)
{
case ENET_EVENT_TYPE_CONNECT: {
/* Store any relevant client information here. */
+ if (server && refuse_connections) {
+ enet_peer_reset(event.peer);
+ break;
+ }
+
IP_Address ip;
ip.host=event.peer -> address.host;
- StringName *new_id = memnew( StringName );
- *new_id = String(ip) +":"+ itos(event.peer -> address.port);
+ int *new_id = memnew( int );
+ *new_id = event.data;
+
+ if (*new_id==0) { //data zero is sent by server (enet won't let you configure this). Server is always 1
+ *new_id=1;
+ }
+
+ event.peer->data=new_id;
peer_map[*new_id]=event.peer;
@@ -114,29 +138,170 @@ void NetworkedMultiplayerENet::poll(){
emit_signal("peer_connected",*new_id);
+ if (server) {
+ //someone connected, let it know of all the peers available
+ for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) {
+
+ if (E->key()==*new_id)
+ continue;
+ //send existing peers to new peer
+ ENetPacket * packet = enet_packet_create (NULL,8,ENET_PACKET_FLAG_RELIABLE);
+ encode_uint32(SYSMSG_ADD_PEER,&packet->data[0]);
+ encode_uint32(E->key(),&packet->data[4]);
+ enet_peer_send(event.peer,1,packet);
+ //send the new peer to existing peers
+ packet = enet_packet_create (NULL,8,ENET_PACKET_FLAG_RELIABLE);
+ encode_uint32(SYSMSG_ADD_PEER,&packet->data[0]);
+ encode_uint32(*new_id,&packet->data[4]);
+ enet_peer_send(E->get(),1,packet);
+ }
+ } else {
+
+ emit_signal("connection_succeeded");
+ }
+
} break;
case ENET_EVENT_TYPE_DISCONNECT: {
/* Reset the peer's client information. */
- StringName *id = (StringName*)event.peer -> data;
+ int *id = (int*)event.peer -> data;
+
+
+
+ if (!id) {
+ if (!server) {
+ emit_signal("connection_failed");
+ }
+ } else {
+
+ if (server) {
+ //someone disconnected, let it know to everyone else
+ for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) {
+
+ if (E->key()==*id)
+ continue;
+ //send the new peer to existing peers
+ ENetPacket* packet = enet_packet_create (NULL,8,ENET_PACKET_FLAG_RELIABLE);
+ encode_uint32(SYSMSG_REMOVE_PEER,&packet->data[0]);
+ encode_uint32(*id,&packet->data[4]);
+ enet_peer_send(E->get(),1,packet);
+ }
+ } else if (!server) {
+ emit_signal("server_disconnected");
+ close_connection();
+ return;
+ }
+
+ emit_signal("peer_disconnected",*id);
+ peer_map.erase(*id);
+ memdelete( id );
+
+ }
- emit_signal("peer_disconnected",*id);
- peer_map.erase(*id);
- memdelete( id );
} break;
case ENET_EVENT_TYPE_RECEIVE: {
- Packet packet;
- packet.packet = event.packet;
- StringName *id = (StringName*)event.peer -> data;
- packet.from_channel=event.channelID;
- packet.from=*id;
+ if (event.channelID==1) {
+ //some config message
+ ERR_CONTINUE( event.packet->dataLength < 8);
+
+ int msg = decode_uint32(&event.packet->data[0]);
+ int id = decode_uint32(&event.packet->data[4]);
+
+ switch(msg) {
+ case SYSMSG_ADD_PEER: {
+
+ peer_map[id]=NULL;
+ emit_signal("peer_connected",id);
+
+ } break;
+ case SYSMSG_REMOVE_PEER: {
+
+ peer_map.erase(id);
+ emit_signal("peer_disconnected",id);
+ } break;
+ }
+
+ enet_packet_destroy(event.packet);
+ } else if (event.channelID==0){
+
+ Packet packet;
+ packet.packet = event.packet;
+
+ int *id = (int*)event.peer -> data;
+
+ ERR_CONTINUE(event.packet->dataLength<12)
+
+
+ uint32_t source = decode_uint32(&event.packet->data[0]);
+ int target = decode_uint32(&event.packet->data[4]);
+ uint32_t flags = decode_uint32(&event.packet->data[8]);
+
+ packet.from=source;
+
+ if (server) {
+
+ packet.from=*id;
+
+ if (target==0) {
+ //re-send the everyone but sender :|
+
+ incoming_packets.push_back(packet);
+ //and make copies for sending
+ for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) {
+
+ if (uint32_t(E->key())==source) //do not resend to self
+ continue;
+
+ ENetPacket* packet2 = enet_packet_create (packet.packet->data,packet.packet->dataLength,flags);
+
+ enet_peer_send(E->get(),0,packet2);
+ }
+
+ } else if (target<0) {
+ //to all but one
+
+ //and make copies for sending
+ for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) {
+
+ if (uint32_t(E->key())==source || E->key()==-target) //do not resend to self, also do not send to excluded
+ continue;
+
+ ENetPacket* packet2 = enet_packet_create (packet.packet->data,packet.packet->dataLength,flags);
+
+ enet_peer_send(E->get(),0,packet2);
+ }
+
+ if (-target != 1) {
+ //server is not excluded
+ incoming_packets.push_back(packet);
+ } else {
+ //server is excluded, erase packet
+ enet_packet_destroy(packet.packet);
+ }
+
+ } else if (target==1) {
+ //to myself and only myself
+ incoming_packets.push_back(packet);
+ } else {
+ //to someone else, specifically
+ ERR_CONTINUE(!peer_map.has(target));
+ enet_peer_send(peer_map[target],0,packet.packet);
+ }
+ } else {
+
+ incoming_packets.push_back(packet);
+ }
+
+
+ //destroy packet later..
+ } else {
+ ERR_CONTINUE(true);
+ }
- incoming_packets.push_back(packet);
- //destroy packet later..
}break;
case ENET_EVENT_TYPE_NONE: {
@@ -154,14 +319,29 @@ bool NetworkedMultiplayerENet::is_server() const {
void NetworkedMultiplayerENet::close_connection() {
- ERR_FAIL_COND(!active);
+ if (!active)
+ return;
_pop_current_packet();
+ bool peers_disconnected=false;
+ for (Map<int,ENetPeer*>::Element *E=peer_map.front();E;E=E->next()) {
+ if (E->get()) {
+ enet_peer_disconnect_now(E->get(),unique_id);
+ peers_disconnected=true;
+ }
+ }
+
+ if (peers_disconnected) {
+ enet_host_flush(host);
+ OS::get_singleton()->delay_usec(100); //wait 100ms for disconnection packets to send
+
+ }
+
enet_host_destroy(host);
active=false;
incoming_packets.clear();
-
+ unique_id=1; //server is 1
connection_status=CONNECTION_DISCONNECTED;
}
@@ -178,45 +358,77 @@ Error NetworkedMultiplayerENet::get_packet(const uint8_t **r_buffer,int &r_buffe
current_packet = incoming_packets.front()->get();
incoming_packets.pop_front();
- r_buffer=(const uint8_t**)&current_packet.packet->data;
+ *r_buffer=(const uint8_t*)(&current_packet.packet->data[12]);
r_buffer_size=current_packet.packet->dataLength;
return OK;
}
Error NetworkedMultiplayerENet::put_packet(const uint8_t *p_buffer,int p_buffer_size){
- ERR_FAIL_COND_V(incoming_packets.size()==0,ERR_UNAVAILABLE);
-
- Map<StringName,ENetPeer*>::Element *E=NULL;
-
- if (target_peer!=StringName()) {
- peer_map.find(target_peer);
- if (!E) {
- ERR_EXPLAIN("Invalid Target Peer: "+String(target_peer));
- ERR_FAIL_V(ERR_INVALID_PARAMETER);
- }
- }
+ ERR_FAIL_COND_V(!active,ERR_UNCONFIGURED);
+ ERR_FAIL_COND_V(connection_status!=CONNECTION_CONNECTED,ERR_UNCONFIGURED);
int packet_flags=0;
+
switch(transfer_mode) {
case TRANSFER_MODE_UNRELIABLE: {
packet_flags=ENET_PACKET_FLAG_UNSEQUENCED;
} break;
- case TRANSFER_MODE_RELIABLE: {
- packet_flags=ENET_PACKET_FLAG_RELIABLE;
+ case TRANSFER_MODE_UNRELIABLE_ORDERED: {
+ packet_flags=0;
} break;
- case TRANSFER_MODE_ORDERED: {
+ case TRANSFER_MODE_RELIABLE: {
packet_flags=ENET_PACKET_FLAG_RELIABLE;
} break;
}
- /* Create a reliable packet of size 7 containing "packet\0" */
- ENetPacket * packet = enet_packet_create (p_buffer,p_buffer_size,packet_flags);
+ Map<int,ENetPeer*>::Element *E=NULL;
+
+ if (target_peer!=0) {
+
+ E = peer_map.find(ABS(target_peer));
+ if (!E) {
+ ERR_EXPLAIN("Invalid Target Peer: "+itos(target_peer));
+ ERR_FAIL_V(ERR_INVALID_PARAMETER);
+ }
+ }
+
+ ENetPacket * packet = enet_packet_create (NULL,p_buffer_size+12,packet_flags);
+ encode_uint32(unique_id,&packet->data[0]); //source ID
+ encode_uint32(target_peer,&packet->data[4]); //dest ID
+ encode_uint32(packet_flags,&packet->data[8]); //dest ID
+ copymem(&packet->data[12],p_buffer,p_buffer_size);
+
+ if (server) {
- if (target_peer==StringName()) {
- enet_host_broadcast(host,send_channel,packet);
+ if (target_peer==0) {
+ enet_host_broadcast(host,0,packet);
+ } else if (target_peer<0) {
+ //send to all but one
+ //and make copies for sending
+
+ int exclude=-target_peer;
+
+ for (Map<int,ENetPeer*>::Element *F=peer_map.front();F;F=F->next()) {
+
+ if (F->key()==exclude) // exclude packet
+ continue;
+
+ ENetPacket* packet2 = enet_packet_create (packet->data,packet->dataLength,packet_flags);
+
+ enet_peer_send(F->get(),0,packet2);
+ }
+
+ enet_packet_destroy(packet); //original packet no longer needed
+ } else {
+ enet_peer_send (E->get(), 0, packet);
+
+ }
} else {
- enet_peer_send (E->get(), send_channel, packet);
+
+ ERR_FAIL_COND_V(!peer_map.has(1),ERR_BUG);
+ enet_peer_send (peer_map[1], 0, packet); //send to server for broadcast..
+
}
enet_host_flush(host);
@@ -234,7 +446,7 @@ void NetworkedMultiplayerENet::_pop_current_packet() const {
if (current_packet.packet) {
enet_packet_destroy(current_packet.packet);
current_packet.packet=NULL;
- current_packet.from=StringName();
+ current_packet.from=0;
}
}
@@ -244,12 +456,166 @@ NetworkedMultiplayerPeer::ConnectionStatus NetworkedMultiplayerENet::get_connect
return connection_status;
}
-void NetworkedMultiplayerENet::_bind_methods() {
+uint32_t NetworkedMultiplayerENet::_gen_unique_id() const {
+
+ uint32_t hash = 0;
+
+ while (hash==0 || hash==1) {
+
+ hash = hash_djb2_one_32(
+ (uint32_t)OS::get_singleton()->get_ticks_usec() );
+ hash = hash_djb2_one_32(
+ (uint32_t)OS::get_singleton()->get_unix_time(), hash );
+ hash = hash_djb2_one_32(
+ (uint32_t)OS::get_singleton()->get_data_dir().hash64(), hash );
+ //hash = hash_djb2_one_32(
+ // (uint32_t)OS::get_singleton()->get_unique_ID().hash64(), hash );
+ hash = hash_djb2_one_32(
+ (uint32_t)((uint64_t)this), hash ); //rely on aslr heap
+ hash = hash_djb2_one_32(
+ (uint32_t)((uint64_t)&hash), hash ); //rely on aslr stack
+
+ hash=hash&0x7FFFFFFF; // make it compatible with unsigned, since negatie id is used for exclusion
+ }
+
+ return hash;
+}
+
+int NetworkedMultiplayerENet::get_unique_id() const {
+
+ ERR_FAIL_COND_V(!active,0);
+ return unique_id;
+}
+
+void NetworkedMultiplayerENet::set_refuse_new_connections(bool p_enable) {
+
+ refuse_connections=p_enable;
+}
- ObjectTypeDB::bind_method(_MD("create_server","port","max_clients","max_channels","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_server,DEFVAL(32),DEFVAL(1),DEFVAL(0),DEFVAL(0));
- ObjectTypeDB::bind_method(_MD("create_client","ip","port","max_channels","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_client,DEFVAL(1),DEFVAL(0),DEFVAL(0));
- ObjectTypeDB::bind_method(_MD("disconnect"),&NetworkedMultiplayerENet::disconnect);
+bool NetworkedMultiplayerENet::is_refusing_new_connections() const {
+ return refuse_connections;
+}
+
+void NetworkedMultiplayerENet::set_compression_mode(CompressionMode p_mode) {
+
+ compression_mode=p_mode;
+}
+
+NetworkedMultiplayerENet::CompressionMode NetworkedMultiplayerENet::get_compression_mode() const{
+
+ return compression_mode;
+}
+
+size_t NetworkedMultiplayerENet::enet_compress(void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit) {
+
+ NetworkedMultiplayerENet *enet = (NetworkedMultiplayerENet*)(context);
+
+ if (size_t(enet->src_compressor_mem.size())<inLimit) {
+ enet->src_compressor_mem.resize( inLimit );
+ }
+
+ int total = inLimit;
+ int ofs=0;
+ while(total) {
+ for(size_t i=0;i<inBufferCount;i++) {
+ int to_copy = MIN(total,int(inBuffers[i].dataLength));
+ copymem(&enet->src_compressor_mem[ofs],inBuffers[i].data,to_copy);
+ ofs+=to_copy;
+ total-=to_copy;
+ }
+ }
+
+ Compression::Mode mode;
+
+ switch(enet->compression_mode) {
+ case COMPRESS_FASTLZ: {
+ mode=Compression::MODE_FASTLZ;
+ } break;
+ case COMPRESS_ZLIB: {
+ mode=Compression::MODE_DEFLATE;
+ } break;
+ default: { ERR_FAIL_V(0); }
+ }
+
+ int req_size = Compression::get_max_compressed_buffer_size(ofs,mode);
+ if (enet->dst_compressor_mem.size()<req_size) {
+ enet->dst_compressor_mem.resize(req_size);
+ }
+ int ret=Compression::compress(enet->dst_compressor_mem.ptr(),enet->src_compressor_mem.ptr(),ofs,mode);
+
+ if (ret<0)
+ return 0;
+
+
+ if (ret>int(outLimit))
+ return 0; //do not bother
+
+ copymem(outData,enet->dst_compressor_mem.ptr(),ret);
+
+ return ret;
+}
+
+size_t NetworkedMultiplayerENet::enet_decompress (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit){
+
+ NetworkedMultiplayerENet *enet = (NetworkedMultiplayerENet*)(context);
+ int ret = -1;
+ switch(enet->compression_mode) {
+ case COMPRESS_FASTLZ: {
+
+ ret=Compression::decompress(outData,outLimit,inData,inLimit,Compression::MODE_FASTLZ);
+ } break;
+ case COMPRESS_ZLIB: {
+
+ ret=Compression::decompress(outData,outLimit,inData,inLimit,Compression::MODE_DEFLATE);
+ } break;
+ default: {}
+ }
+ if (ret<0) {
+ return 0;
+ } else {
+ return ret;
+ }
+}
+
+void NetworkedMultiplayerENet::_setup_compressor() {
+
+ switch(compression_mode) {
+
+ case COMPRESS_NONE: {
+
+ enet_host_compress(host,NULL);
+ } break;
+ case COMPRESS_RANGE_CODER: {
+ enet_host_compress_with_range_coder(host);
+ } break;
+ case COMPRESS_FASTLZ:
+ case COMPRESS_ZLIB: {
+
+ enet_host_compress(host,&enet_compressor);
+ } break;
+ }
+}
+
+void NetworkedMultiplayerENet::enet_compressor_destroy(void * context){
+
+ //do none
+}
+
+
+void NetworkedMultiplayerENet::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("create_server","port","max_clients","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_server,DEFVAL(32),DEFVAL(0),DEFVAL(0));
+ ObjectTypeDB::bind_method(_MD("create_client","ip","port","in_bandwidth","out_bandwidth"),&NetworkedMultiplayerENet::create_client,DEFVAL(0),DEFVAL(0));
+ ObjectTypeDB::bind_method(_MD("close_connection"),&NetworkedMultiplayerENet::close_connection);
+ ObjectTypeDB::bind_method(_MD("set_compression_mode","mode"),&NetworkedMultiplayerENet::set_compression_mode);
+ ObjectTypeDB::bind_method(_MD("get_compression_mode"),&NetworkedMultiplayerENet::get_compression_mode);
+ ObjectTypeDB::bind_method(_MD("set_bind_ip", "ip"),&NetworkedMultiplayerENet::set_bind_ip);
+
+ BIND_CONSTANT( COMPRESS_NONE );
+ BIND_CONSTANT( COMPRESS_RANGE_CODER );
+ BIND_CONSTANT( COMPRESS_FASTLZ );
+ BIND_CONSTANT( COMPRESS_ZLIB );
}
@@ -257,15 +623,28 @@ NetworkedMultiplayerENet::NetworkedMultiplayerENet(){
active=false;
server=false;
- send_channel=0;
+ refuse_connections=false;
+ unique_id=0;
+ target_peer=0;
current_packet.packet=NULL;
- transfer_mode=TRANSFER_MODE_ORDERED;
+ transfer_mode=TRANSFER_MODE_RELIABLE;
connection_status=CONNECTION_DISCONNECTED;
+ compression_mode=COMPRESS_NONE;
+ enet_compressor.context=this;
+ enet_compressor.compress=enet_compress;
+ enet_compressor.decompress=enet_decompress;
+ enet_compressor.destroy=enet_compressor_destroy;
+
+ bind_ip=ENET_HOST_ANY;
}
NetworkedMultiplayerENet::~NetworkedMultiplayerENet(){
- if (active) {
- close_connection();
- }
+ close_connection();
+}
+
+// sets IP for ENet to bind when using create_server
+// if no IP is set, then ENet bind to ENET_HOST_ANY
+void NetworkedMultiplayerENet::set_bind_ip(const IP_Address& p_ip){
+ bind_ip=p_ip.host;
}
diff --git a/modules/enet/networked_multiplayer_enet.h b/modules/enet/networked_multiplayer_enet.h
index ec6b084d66..59863c1f78 100644
--- a/modules/enet/networked_multiplayer_enet.h
+++ b/modules/enet/networked_multiplayer_enet.h
@@ -3,54 +3,82 @@
#include "io/networked_multiplayer_peer.h"
#include "enet/enet.h"
+#include "io/compression.h"
class NetworkedMultiplayerENet : public NetworkedMultiplayerPeer {
OBJ_TYPE(NetworkedMultiplayerENet,NetworkedMultiplayerPeer)
+public:
+ enum CompressionMode {
+ COMPRESS_NONE,
+ COMPRESS_RANGE_CODER,
+ COMPRESS_FASTLZ,
+ COMPRESS_ZLIB
+ };
+private:
+
+
+ enum {
+ SYSMSG_ADD_PEER,
+ SYSMSG_REMOVE_PEER
+ };
bool active;
bool server;
- int send_channel;
- StringName target_peer;
+ uint32_t unique_id;
+
+ int target_peer;
TransferMode transfer_mode;
ENetEvent event;
ENetPeer *peer;
ENetHost *host;
+ bool refuse_connections;
+
ConnectionStatus connection_status;
- Map<StringName,ENetPeer*> peer_map;
+ Map<int,ENetPeer*> peer_map;
struct Packet {
ENetPacket *packet;
- int from_channel;
- StringName from;
+ int from;
};
+ CompressionMode compression_mode;
+
mutable List<Packet> incoming_packets;
mutable Packet current_packet;
+ uint32_t _gen_unique_id() const;
void _pop_current_packet() const;
+ Vector<uint8_t> src_compressor_mem;
+ Vector<uint8_t> dst_compressor_mem;
+
+ ENetCompressor enet_compressor;
+ static size_t enet_compress(void * context, const ENetBuffer * inBuffers, size_t inBufferCount, size_t inLimit, enet_uint8 * outData, size_t outLimit);
+ static size_t enet_decompress (void * context, const enet_uint8 * inData, size_t inLimit, enet_uint8 * outData, size_t outLimit);
+ static void enet_compressor_destroy(void * context);
+ void _setup_compressor();
+
+ enet_uint32 bind_ip;
protected:
static void _bind_methods();
public:
virtual void set_transfer_mode(TransferMode p_mode);
- virtual void set_target_peer(const StringName& p_peer);
- virtual void set_channel(int p_channel);
+ virtual void set_target_peer(int p_peer);
- virtual StringName get_packet_peer() const;
- virtual int get_packet_channel() const;
+ virtual int get_packet_peer() const;
- Error create_server(int p_port, int p_max_clients=32, int p_max_channels=1, int p_in_bandwidth=0, int p_out_bandwidth=0);
- Error create_client(const IP_Address& p_ip,int p_port, int p_max_channels=1, int p_in_bandwidth=0, int p_out_bandwidth=0);
+ Error create_server(int p_port, int p_max_peers=32, int p_in_bandwidth=0, int p_out_bandwidth=0);
+ Error create_client(const IP_Address& p_ip, int p_port, int p_in_bandwidth=0, int p_out_bandwidth=0);
void close_connection();
@@ -66,9 +94,21 @@ public:
virtual ConnectionStatus get_connection_status() const;
+ virtual void set_refuse_new_connections(bool p_enable);
+ virtual bool is_refusing_new_connections() const;
+
+ virtual int get_unique_id() const;
+
+ void set_compression_mode(CompressionMode p_mode);
+ CompressionMode get_compression_mode() const;
+
NetworkedMultiplayerENet();
~NetworkedMultiplayerENet();
+
+ void set_bind_ip(const IP_Address& p_ip);
};
+VARIANT_ENUM_CAST(NetworkedMultiplayerENet::CompressionMode);
+
#endif // NETWORKED_MULTIPLAYER_ENET_H
diff --git a/modules/enet/protocol.c b/modules/enet/protocol.c
index 29d648732d..4a2a4ed185 100644
--- a/modules/enet/protocol.c
+++ b/modules/enet/protocol.c
@@ -9,6 +9,7 @@
#include "enet/time.h"
#include "enet/enet.h"
+
static size_t commandSizes [ENET_PROTOCOL_COMMAND_COUNT] =
{
0,
@@ -1691,7 +1692,7 @@ enet_protocol_send_outgoing_commands (ENetHost * host, ENetEvent * event, int ch
& host -> buffers [1], host -> bufferCount - 1,
originalSize,
host -> packetData [1],
- originalSize);
+ originalSize);
if (compressedSize > 0 && compressedSize < originalSize)
{
host -> headerFlags |= ENET_PROTOCOL_HEADER_FLAG_COMPRESSED;
diff --git a/modules/enet/register_types.cpp b/modules/enet/register_types.cpp
index f80b82a412..630b76ced8 100644
--- a/modules/enet/register_types.cpp
+++ b/modules/enet/register_types.cpp
@@ -27,7 +27,6 @@
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "register_types.h"
-#include "enet/enet.h"
#include "error_macros.h"
#include "networked_multiplayer_enet.h"
diff --git a/modules/enet/win32.c b/modules/enet/win32.c
index 5cc167997c..d77fa9a49a 100644
--- a/modules/enet/win32.c
+++ b/modules/enet/win32.c
@@ -4,7 +4,7 @@
*/
#ifdef _WIN32
-#define ENET_BUILDING_LIB 1
+#define ENET_BUILDING_LIB 0
#include "enet/enet.h"
#include <windows.h>
#include <mmsystem.h>
diff --git a/modules/gdscript/gd_compiler.cpp b/modules/gdscript/gd_compiler.cpp
index 68c3dc98d3..ce8b6a6ea4 100644
--- a/modules/gdscript/gd_compiler.cpp
+++ b/modules/gdscript/gd_compiler.cpp
@@ -1297,8 +1297,10 @@ Error GDCompiler::_parse_function(GDScript *p_script,const GDParser::ClassNode *
gdfunc = p_script->member_functions[func_name];
//}
- if (p_func)
+ if (p_func) {
gdfunc->_static=p_func->_static;
+ gdfunc->rpc_mode=p_func->rpc_mode;
+ }
#ifdef TOOLS_ENABLED
gdfunc->arg_names=argnames;
@@ -1625,6 +1627,8 @@ Error GDCompiler::_parse_class(GDScript *p_script, GDScript *p_owner, const GDPa
minfo.index = p_script->member_indices.size();
minfo.setter = p_class->variables[i].setter;
minfo.getter = p_class->variables[i].getter;
+ minfo.rpc_mode=p_class->variables[i].rpc_mode;
+
p_script->member_indices[name]=minfo;
p_script->members.insert(name);
diff --git a/modules/gdscript/gd_editor.cpp b/modules/gdscript/gd_editor.cpp
index 2e5fb82f37..2a80531ec5 100644
--- a/modules/gdscript/gd_editor.cpp
+++ b/modules/gdscript/gd_editor.cpp
@@ -47,16 +47,14 @@ void GDScriptLanguage::get_string_delimiters(List<String> *p_delimiters) const {
Ref<Script> GDScriptLanguage::get_template(const String& p_class_name, const String& p_base_class_name) const {
String _template = String()+
- "\nextends %BASE%\n\n"+
- "# member variables here, example:\n"+
- "# var a=2\n"+
- "# var b=\"textvar\"\n\n"+
+ "extends %BASE%\n\n"+
+ "# class member variables go here, for example:\n"+
+ "# var a = 2\n"+
+ "# var b = \"textvar\"\n\n"+
"func _ready():\n"+
"\t# Called every time the node is added to the scene.\n"+
"\t# Initialization here\n"+
- "\tpass\n"+
- "\n"+
- "\n";
+ "\tpass\n";
_template = _template.replace("%BASE%",p_base_class_name);
@@ -1463,7 +1461,7 @@ static void _make_function_hint(const GDParser::FunctionNode* p_func,int p_argid
}
-static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const StringName& p_method,const GDCompletionIdentifier& id, int p_argidx, Set<String>& result, String& arghint) {
+static void _find_type_arguments(GDCompletionContext& context,const GDParser::Node*p_node,int p_line,const StringName& p_method,const GDCompletionIdentifier& id, int p_argidx, Set<String>& result, String& arghint) {
//print_line("find type arguments?");
@@ -1700,9 +1698,31 @@ static void _find_type_arguments(const GDParser::Node*p_node,int p_line,const St
if (p_argidx==0) {
List<MethodInfo> sigs;
ObjectTypeDB::get_signal_list(id.obj_type,&sigs);
+
+ if (id.script.is_valid()) {
+ id.script->get_script_signal_list(&sigs);
+ } else if (id.value.get_type()==Variant::OBJECT) {
+ Object *obj = id.value;
+ if (obj && !obj->get_script().is_null()) {
+ Ref<Script> scr=obj->get_script();
+ if (scr.is_valid()) {
+ scr->get_script_signal_list(&sigs);
+ }
+ }
+ }
+
for (List<MethodInfo>::Element *E=sigs.front();E;E=E->next()) {
result.insert("\""+E->get().name+"\"");
}
+
+ } else if (p_argidx==2){
+
+
+ if (context._class) {
+ for(int i=0;i<context._class->functions.size();i++) {
+ result.insert("\""+context._class->functions[i]->name+"\"");
+ }
+ }
}
/*if (p_argidx==2) {
@@ -1944,7 +1964,7 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No
if (!context._class->owner)
ci.value=context.base;
- _find_type_arguments(p_node,p_line,id->name,ci,p_argidx,result,arghint);
+ _find_type_arguments(context,p_node,p_line,id->name,ci,p_argidx,result,arghint);
//guess type..
/*
List<MethodInfo> methods;
@@ -1967,7 +1987,7 @@ static void _find_call_arguments(GDCompletionContext& context,const GDParser::No
GDCompletionIdentifier ci;
if (_guess_expression_type(context,op->arguments[0],p_line,ci)) {
- _find_type_arguments(p_node,p_line,id->name,ci,p_argidx,result,arghint);
+ _find_type_arguments(context,p_node,p_line,id->name,ci,p_argidx,result,arghint);
return;
}
diff --git a/modules/gdscript/gd_function.cpp b/modules/gdscript/gd_function.cpp
index 47d8f0b40f..094e21bb4f 100644
--- a/modules/gdscript/gd_function.cpp
+++ b/modules/gdscript/gd_function.cpp
@@ -1309,6 +1309,7 @@ GDFunction::GDFunction() : function_list(this) {
_stack_size=0;
_call_size=0;
+ rpc_mode=ScriptInstance::RPC_MODE_DISABLED;
name="<anonymous>";
#ifdef DEBUG_ENABLED
_func_cname=NULL;
@@ -1436,7 +1437,7 @@ void GDFunctionState::_bind_methods() {
ObjectTypeDB::bind_method(_MD("resume:Variant","arg"),&GDFunctionState::resume,DEFVAL(Variant()));
ObjectTypeDB::bind_method(_MD("is_valid"),&GDFunctionState::is_valid);
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&GDFunctionState::_signal_callback,MethodInfo("_signal_callback"));
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&GDFunctionState::_signal_callback,MethodInfo("_signal_callback"));
}
diff --git a/modules/gdscript/gd_function.h b/modules/gdscript/gd_function.h
index e09c6509dd..f1c5b13ca1 100644
--- a/modules/gdscript/gd_function.h
+++ b/modules/gdscript/gd_function.h
@@ -7,6 +7,7 @@
#include "variant.h"
#include "string_db.h"
#include "reference.h"
+#include "script_language.h"
class GDInstance;
class GDScript;
@@ -64,6 +65,14 @@ public:
ADDR_TYPE_NIL=8
};
+ enum RPCMode {
+ RPC_DISABLED,
+ RPC_ENABLED,
+ RPC_SYNC,
+ RPC_SYNC_MASTER,
+ RPC_SYNC_SLAVE
+ };
+
struct StackDebug {
int line;
@@ -91,6 +100,8 @@ friend class GDCompiler;
int _call_size;
int _initial_line;
bool _static;
+ ScriptInstance::RPCMode rpc_mode;
+
GDScript *_script;
StringName name;
@@ -185,6 +196,7 @@ public:
Variant call(GDInstance *p_instance,const Variant **p_args, int p_argcount,Variant::CallError& r_err,CallState *p_state=NULL);
+ _FORCE_INLINE_ ScriptInstance::RPCMode get_rpc_mode() const { return rpc_mode; }
GDFunction();
~GDFunction();
};
diff --git a/modules/gdscript/gd_parser.cpp b/modules/gdscript/gd_parser.cpp
index a6794564db..e5a8dc0152 100644
--- a/modules/gdscript/gd_parser.cpp
+++ b/modules/gdscript/gd_parser.cpp
@@ -2075,6 +2075,7 @@ void GDParser::_parse_class(ClassNode *p_class) {
if (error_set)
return;
+
if (indent_level>tab_level.back()->get()) {
p_class->end_line=tokenizer->get_token_line();
return; //go back a level
@@ -2371,6 +2372,9 @@ void GDParser::_parse_class(ClassNode *p_class) {
function->_static=_static;
function->line=fnline;
+ function->rpc_mode=rpc_mode;
+ rpc_mode=ScriptInstance::RPC_MODE_DISABLED;
+
if (_static)
p_class->static_functions.push_back(function);
@@ -2842,25 +2846,101 @@ void GDParser::_parse_class(ClassNode *p_class) {
}
- if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) {
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_ONREADY && tokenizer->get_token()!=GDTokenizer::TK_PR_REMOTE && tokenizer->get_token()!=GDTokenizer::TK_PR_MASTER && tokenizer->get_token()!=GDTokenizer::TK_PR_SLAVE && tokenizer->get_token()!=GDTokenizer::TK_PR_SYNC) {
current_export=PropertyInfo();
- _set_error("Expected 'var'.");
+ _set_error("Expected 'var', 'onready', 'remote', 'master', 'slave' or 'sync'.");
return;
}
- }; //fallthrough to var
+ continue;
+ } break;
case GDTokenizer::TK_PR_ONREADY: {
- if (token==GDTokenizer::TK_PR_ONREADY) {
- //may be fallthrough from export, ignore if so
- tokenizer->advance();
+ //may be fallthrough from export, ignore if so
+ tokenizer->advance();
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) {
+ _set_error("Expected 'var'.");
+ return;
+ }
+
+ continue;
+ } break;
+ case GDTokenizer::TK_PR_REMOTE: {
+
+ //may be fallthrough from export, ignore if so
+ tokenizer->advance();
+ if (current_export.type) {
if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) {
_set_error("Expected 'var'.");
return;
}
+
+ } else {
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) {
+ _set_error("Expected 'var' or 'func'.");
+ return;
+ }
}
- }; //fallthrough to var
+ rpc_mode=ScriptInstance::RPC_MODE_REMOTE;
+
+ continue;
+ } break;
+ case GDTokenizer::TK_PR_MASTER: {
+
+ //may be fallthrough from export, ignore if so
+ tokenizer->advance();
+ if (current_export.type) {
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) {
+ _set_error("Expected 'var'.");
+ return;
+ }
+
+ } else {
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) {
+ _set_error("Expected 'var' or 'func'.");
+ return;
+ }
+ }
+
+ rpc_mode=ScriptInstance::RPC_MODE_MASTER;
+ continue;
+ } break;
+ case GDTokenizer::TK_PR_SLAVE: {
+
+ //may be fallthrough from export, ignore if so
+ tokenizer->advance();
+ if (current_export.type) {
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR) {
+ _set_error("Expected 'var'.");
+ return;
+ }
+
+ } else {
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) {
+ _set_error("Expected 'var' or 'func'.");
+ return;
+ }
+ }
+
+ rpc_mode=ScriptInstance::RPC_MODE_SLAVE;
+ continue;
+ } break;
+ case GDTokenizer::TK_PR_SYNC: {
+
+ //may be fallthrough from export, ignore if so
+ tokenizer->advance();
+ if (tokenizer->get_token()!=GDTokenizer::TK_PR_VAR && tokenizer->get_token()!=GDTokenizer::TK_PR_FUNCTION) {
+ if (current_export.type)
+ _set_error("Expected 'var'.");
+ else
+ _set_error("Expected 'var' or 'func'.");
+ return;
+ }
+
+ rpc_mode=ScriptInstance::RPC_MODE_SYNC;
+ continue;
+ } break;
case GDTokenizer::TK_PR_VAR: {
//variale declaration and (eventual) initialization
@@ -2884,8 +2964,12 @@ void GDParser::_parse_class(ClassNode *p_class) {
member.expression=NULL;
member._export.name=member.identifier;
member.line=tokenizer->get_token_line();
+ member.rpc_mode=rpc_mode;
+
tokenizer->advance();
+ rpc_mode=ScriptInstance::RPC_MODE_DISABLED;
+
if (tokenizer->get_token()==GDTokenizer::TK_OP_ASSIGN) {
#ifdef DEBUG_ENABLED
@@ -3228,6 +3312,7 @@ void GDParser::clear() {
current_class=NULL;
completion_found=false;
+ rpc_mode=ScriptInstance::RPC_MODE_DISABLED;
current_function=NULL;
diff --git a/modules/gdscript/gd_parser.h b/modules/gdscript/gd_parser.h
index 2d6b52c473..9e6f6e6765 100644
--- a/modules/gdscript/gd_parser.h
+++ b/modules/gdscript/gd_parser.h
@@ -33,6 +33,7 @@
#include "gd_functions.h"
#include "map.h"
#include "object.h"
+#include "script_language.h"
class GDParser {
public:
@@ -88,6 +89,7 @@ public:
StringName getter;
int line;
Node *expression;
+ ScriptInstance::RPCMode rpc_mode;
};
struct Constant {
StringName identifier;
@@ -119,12 +121,13 @@ public:
struct FunctionNode : public Node {
bool _static;
+ ScriptInstance::RPCMode rpc_mode;
StringName name;
Vector<StringName> arguments;
Vector<Node*> default_values;
BlockNode *body;
- FunctionNode() { type=TYPE_FUNCTION; _static=false; }
+ FunctionNode() { type=TYPE_FUNCTION; _static=false; rpc_mode=ScriptInstance::RPC_MODE_DISABLED; }
};
@@ -429,6 +432,9 @@ private:
PropertyInfo current_export;
+ ScriptInstance::RPCMode rpc_mode;
+
+
void _set_error(const String& p_error, int p_line=-1, int p_column=-1);
bool _recover_from_completion();
diff --git a/modules/gdscript/gd_script.cpp b/modules/gdscript/gd_script.cpp
index 2b8d6e86e2..0ea10950df 100644
--- a/modules/gdscript/gd_script.cpp
+++ b/modules/gdscript/gd_script.cpp
@@ -179,6 +179,15 @@ bool GDScript::can_instance() const {
}
+Ref<Script> GDScript::get_base_script() const {
+
+ if (_base) {
+ return Ref<GDScript>( _base );
+ } else {
+ return Ref<Script>();
+ }
+}
+
StringName GDScript::get_instance_base_type() const {
if (native.is_valid())
@@ -250,7 +259,7 @@ void GDScript::_update_placeholder(PlaceHolderScriptInstance *p_placeholder) {
#endif
-void GDScript::get_method_list(List<MethodInfo> *p_list) const {
+void GDScript::get_script_method_list(List<MethodInfo> *p_list) const {
for (const Map<StringName,GDFunction*>::Element *E=member_functions.front();E;E=E->next()) {
MethodInfo mi;
@@ -267,6 +276,41 @@ void GDScript::get_method_list(List<MethodInfo> *p_list) const {
}
}
+void GDScript::get_script_property_list(List<PropertyInfo> *p_list) const {
+
+ const GDScript *sptr=this;
+ List<PropertyInfo> props;
+
+ while(sptr) {
+
+ Vector<_GDScriptMemberSort> msort;
+ for(Map<StringName,PropertyInfo>::Element *E=sptr->member_info.front();E;E=E->next()) {
+
+ _GDScriptMemberSort ms;
+ ERR_CONTINUE(!sptr->member_indices.has(E->key()));
+ ms.index=sptr->member_indices[E->key()].index;
+ ms.name=E->key();
+ msort.push_back(ms);
+
+ }
+
+ msort.sort();
+ msort.invert();
+ for(int i=0;i<msort.size();i++) {
+
+ props.push_front(sptr->member_info[msort[i].name]);
+
+ }
+
+ sptr = sptr->_base;
+ }
+
+ for (List<PropertyInfo>::Element *E=props.front();E;E=E->next()) {
+ p_list->push_back(E->get());
+ }
+
+}
+
bool GDScript::has_method(const StringName& p_method) const {
return member_functions.has(p_method);
@@ -707,7 +751,7 @@ void GDScript::_get_property_list(List<PropertyInfo> *p_properties) const {
void GDScript::_bind_methods() {
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"new",&GDScript::_new,MethodInfo(Variant::OBJECT,"new"));
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"new",&GDScript::_new,MethodInfo(Variant::OBJECT,"new"));
ObjectTypeDB::bind_method(_MD("get_as_byte_code"),&GDScript::get_as_byte_code);
@@ -1300,6 +1344,46 @@ ScriptLanguage *GDInstance::get_language() {
return GDScriptLanguage::get_singleton();
}
+GDInstance::RPCMode GDInstance::get_rpc_mode(const StringName& p_method) const {
+
+ const GDScript *cscript = script.ptr();
+
+ while(cscript) {
+ const Map<StringName,GDFunction*>::Element *E=cscript->member_functions.find(p_method);
+ if (E) {
+
+ if (E->get()->get_rpc_mode()!=RPC_MODE_DISABLED) {
+ return E->get()->get_rpc_mode();
+ }
+
+ }
+ cscript=cscript->_base;
+ }
+
+ return RPC_MODE_DISABLED;
+}
+
+GDInstance::RPCMode GDInstance::get_rset_mode(const StringName& p_variable) const {
+
+ const GDScript *cscript = script.ptr();
+
+ while(cscript) {
+ const Map<StringName,GDScript::MemberInfo>::Element *E=cscript->member_indices.find(p_variable);
+ if (E) {
+
+ if (E->get().rpc_mode) {
+ return E->get().rpc_mode;
+ }
+
+ }
+ cscript=cscript->_base;
+ }
+
+ return RPC_MODE_DISABLED;
+}
+
+
+
void GDInstance::reload_members() {
#ifdef DEBUG_ENABLED
@@ -1811,6 +1895,10 @@ void GDScriptLanguage::get_reserved_words(List<String> *p_words) const {
"pass",
"return",
"while",
+ "remote",
+ "sync",
+ "master",
+ "slave",
0};
diff --git a/modules/gdscript/gd_script.h b/modules/gdscript/gd_script.h
index 28a0df1efd..0c3e1eb614 100644
--- a/modules/gdscript/gd_script.h
+++ b/modules/gdscript/gd_script.h
@@ -64,6 +64,7 @@ class GDScript : public Script {
int index;
StringName setter;
StringName getter;
+ ScriptInstance::RPCMode rpc_mode;
};
friend class GDInstance;
@@ -161,6 +162,8 @@ public:
Variant _new(const Variant** p_args,int p_argcount,Variant::CallError& r_error);
virtual bool can_instance() const;
+ virtual Ref<Script> get_base_script() const;
+
virtual StringName get_instance_base_type() const; // this may not work in all scripts, will return empty if so
virtual ScriptInstance* instance_create(Object *p_this);
virtual bool instance_has(const Object *p_this) const;
@@ -181,10 +184,13 @@ public:
bool get_property_default_value(const StringName& p_property,Variant& r_value) const;
- virtual void get_method_list(List<MethodInfo> *p_list) const;
+ virtual void get_script_method_list(List<MethodInfo> *p_list) const;
virtual bool has_method(const StringName& p_method) const;
virtual MethodInfo get_method_info(const StringName& p_method) const;
+ virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
+
+
virtual ScriptLanguage *get_language() const;
GDScript();
@@ -236,6 +242,10 @@ public:
void reload_members();
+ virtual RPCMode get_rpc_mode(const StringName& p_method) const;
+ virtual RPCMode get_rset_mode(const StringName& p_variable) const;
+
+
GDInstance();
~GDInstance();
@@ -250,23 +260,23 @@ class GDScriptLanguage : public ScriptLanguage {
Map<StringName,int> globals;
- struct CallLevel {
+ struct CallLevel {
- Variant *stack;
- GDFunction *function;
- GDInstance *instance;
- int *ip;
- int *line;
+ Variant *stack;
+ GDFunction *function;
+ GDInstance *instance;
+ int *ip;
+ int *line;
- };
+ };
- int _debug_parse_err_line;
- String _debug_parse_err_file;
- String _debug_error;
- int _debug_call_stack_pos;
- int _debug_max_call_stack;
- CallLevel *_call_stack;
+ int _debug_parse_err_line;
+ String _debug_parse_err_file;
+ String _debug_error;
+ int _debug_call_stack_pos;
+ int _debug_max_call_stack;
+ CallLevel *_call_stack;
void _add_global(const StringName& p_name,const Variant& p_value);
@@ -288,54 +298,54 @@ public:
int calls;
- bool debug_break(const String& p_error,bool p_allow_continue=true);
- bool debug_break_parse(const String& p_file, int p_line,const String& p_error);
+ bool debug_break(const String& p_error,bool p_allow_continue=true);
+ bool debug_break_parse(const String& p_file, int p_line,const String& p_error);
- _FORCE_INLINE_ void enter_function(GDInstance *p_instance,GDFunction *p_function, Variant *p_stack, int *p_ip, int *p_line) {
+ _FORCE_INLINE_ void enter_function(GDInstance *p_instance,GDFunction *p_function, Variant *p_stack, int *p_ip, int *p_line) {
- if (Thread::get_main_ID()!=Thread::get_caller_ID())
- return; //no support for other threads than main for now
+ if (Thread::get_main_ID()!=Thread::get_caller_ID())
+ return; //no support for other threads than main for now
- if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0)
- ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() +1 );
+ if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0)
+ ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() +1 );
- if (_debug_call_stack_pos >= _debug_max_call_stack) {
- //stack overflow
- _debug_error="Stack Overflow (Stack Size: "+itos(_debug_max_call_stack)+")";
- ScriptDebugger::get_singleton()->debug(this);
- return;
- }
+ if (_debug_call_stack_pos >= _debug_max_call_stack) {
+ //stack overflow
+ _debug_error="Stack Overflow (Stack Size: "+itos(_debug_max_call_stack)+")";
+ ScriptDebugger::get_singleton()->debug(this);
+ return;
+ }
- _call_stack[_debug_call_stack_pos].stack=p_stack;
- _call_stack[_debug_call_stack_pos].instance=p_instance;
- _call_stack[_debug_call_stack_pos].function=p_function;
- _call_stack[_debug_call_stack_pos].ip=p_ip;
- _call_stack[_debug_call_stack_pos].line=p_line;
- _debug_call_stack_pos++;
- }
+ _call_stack[_debug_call_stack_pos].stack=p_stack;
+ _call_stack[_debug_call_stack_pos].instance=p_instance;
+ _call_stack[_debug_call_stack_pos].function=p_function;
+ _call_stack[_debug_call_stack_pos].ip=p_ip;
+ _call_stack[_debug_call_stack_pos].line=p_line;
+ _debug_call_stack_pos++;
+ }
- _FORCE_INLINE_ void exit_function() {
+ _FORCE_INLINE_ void exit_function() {
- if (Thread::get_main_ID()!=Thread::get_caller_ID())
- return; //no support for other threads than main for now
+ if (Thread::get_main_ID()!=Thread::get_caller_ID())
+ return; //no support for other threads than main for now
- if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0)
- ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() -1 );
+ if (ScriptDebugger::get_singleton()->get_lines_left()>0 && ScriptDebugger::get_singleton()->get_depth()>=0)
+ ScriptDebugger::get_singleton()->set_depth( ScriptDebugger::get_singleton()->get_depth() -1 );
- if (_debug_call_stack_pos==0) {
+ if (_debug_call_stack_pos==0) {
- _debug_error="Stack Underflow (Engine Bug)";
- ScriptDebugger::get_singleton()->debug(this);
- return;
- }
+ _debug_error="Stack Underflow (Engine Bug)";
+ ScriptDebugger::get_singleton()->debug(this);
+ return;
+ }
- _debug_call_stack_pos--;
- }
+ _debug_call_stack_pos--;
+ }
virtual Vector<StackInfo> debug_get_current_stack_info() {
- if (Thread::get_main_ID()!=Thread::get_caller_ID())
- return Vector<StackInfo>();
+ if (Thread::get_main_ID()!=Thread::get_caller_ID())
+ return Vector<StackInfo>();
Vector<StackInfo> csi;
csi.resize(_debug_call_stack_pos);
diff --git a/modules/gdscript/gd_tokenizer.cpp b/modules/gdscript/gd_tokenizer.cpp
index 93863c4eb2..47e740b227 100644
--- a/modules/gdscript/gd_tokenizer.cpp
+++ b/modules/gdscript/gd_tokenizer.cpp
@@ -100,6 +100,10 @@ const char* GDTokenizer::token_names[TK_MAX]={
"yield",
"signal",
"breakpoint",
+"rpc",
+"sync",
+"master",
+"slave",
"'['",
"']'",
"'{'",
@@ -865,6 +869,10 @@ void GDTokenizerText::_advance() {
{TK_PR_YIELD,"yield"},
{TK_PR_SIGNAL,"signal"},
{TK_PR_BREAKPOINT,"breakpoint"},
+ {TK_PR_REMOTE,"remote"},
+ {TK_PR_MASTER,"master"},
+ {TK_PR_SLAVE,"slave"},
+ {TK_PR_SYNC,"sync"},
{TK_PR_CONST,"const"},
//controlflow
{TK_CF_IF,"if"},
@@ -1047,7 +1055,7 @@ void GDTokenizerText::advance(int p_amount) {
//////////////////////////////////////////////////////////////////////////////////////////////////////
-#define BYTECODE_VERSION 10
+#define BYTECODE_VERSION 11
Error GDTokenizerBuffer::set_code_buffer(const Vector<uint8_t> & p_buffer) {
diff --git a/modules/gdscript/gd_tokenizer.h b/modules/gdscript/gd_tokenizer.h
index aaff573090..1815f82894 100644
--- a/modules/gdscript/gd_tokenizer.h
+++ b/modules/gdscript/gd_tokenizer.h
@@ -107,6 +107,10 @@ public:
TK_PR_YIELD,
TK_PR_SIGNAL,
TK_PR_BREAKPOINT,
+ TK_PR_REMOTE,
+ TK_PR_SYNC,
+ TK_PR_MASTER,
+ TK_PR_SLAVE,
TK_BRACKET_OPEN,
TK_BRACKET_CLOSE,
TK_CURLY_BRACKET_OPEN,
diff --git a/modules/gridmap/grid_map_editor_plugin.cpp b/modules/gridmap/grid_map_editor_plugin.cpp
index f3beabceb8..9bdad6713d 100644
--- a/modules/gridmap/grid_map_editor_plugin.cpp
+++ b/modules/gridmap/grid_map_editor_plugin.cpp
@@ -212,6 +212,18 @@ void GridMapEditor::_menu_option(int p_option) {
_update_areas_display();
update_areas();
} break;
+ case MENU_OPTION_SELECTION_DUPLICATE:
+ if (!(selection.active && input_action==INPUT_NONE))
+ return;
+ if (last_mouseover==Vector3(-1,-1,-1)) //nono mouseovering anythin
+ break;
+
+ input_action=INPUT_DUPLICATE;
+ selection.click=last_mouseover;
+ selection.current=last_mouseover;
+ selection.duplicate_rot=0;
+ _update_duplicate_indicator();
+ break;
case MENU_OPTION_SELECTION_CLEAR: {
if (!selection.active)
return;
@@ -377,7 +389,9 @@ bool GridMapEditor::do_input_action(Camera* p_camera,const Point2& p_point,bool
int item=node->get_cell_item(cell[0],cell[1],cell[2]);
if (item>=0) {
selected_pallete=item;
+ theme_pallete->set_current(item);
update_pallete();
+ _update_cursor_instance();
}
return true;
} if (input_action==INPUT_PAINT) {
@@ -530,29 +544,6 @@ bool GridMapEditor::forward_spatial_input_event(Camera* p_camera,const InputEven
if (edit_mode->get_selected()==0) { // regular click
switch (p_event.type) {
- case InputEvent::KEY: {
-
- if (p_event.key.pressed && p_event.key.scancode==KEY_D && p_event.key.mod.shift && selection.active && input_action==INPUT_NONE) {
-
- if (last_mouseover==Vector3(-1,-1,-1)) //nono mouseovering anythin
- return false;
-
- input_action=INPUT_DUPLICATE;
- selection.click=last_mouseover;
- selection.current=last_mouseover;
- selection.duplicate_rot=0;
- _update_duplicate_indicator();
-
-
- }
-
- if (p_event.key.pressed && p_event.key.scancode==KEY_DELETE && selection.active) {
-
- _delete_selection();
- return true;
- }
-
- } break;
case InputEvent::MOUSE_BUTTON: {
if (p_event.mouse_button.button_index==BUTTON_WHEEL_UP && (p_event.mouse_button.mod.command || p_event.mouse_button.mod.shift)) {
@@ -851,6 +842,11 @@ void GridMapEditor::edit(GridMap *p_gridmap) {
VS *vs = VS::get_singleton();
last_mouseover=Vector3(-1,-1,-1);
+ input_action=INPUT_NONE;
+ selection.active=false;
+ _update_selection_transform();
+ _update_duplicate_indicator();
+
spatial_editor = editor->get_editor_plugin_screen()->cast_to<SpatialEditorPlugin>();
if (!node) {
@@ -1247,7 +1243,8 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) {
options->get_popup()->add_item("Create Exterior Connector",MENU_OPTION_SELECTION_MAKE_EXTERIOR_CONNECTOR);
options->get_popup()->add_item("Erase Area",MENU_OPTION_REMOVE_AREA);
options->get_popup()->add_separator();
- options->get_popup()->add_item("Selection -> Clear",MENU_OPTION_SELECTION_CLEAR);
+ options->get_popup()->add_item("Selection -> Duplicate",MENU_OPTION_SELECTION_DUPLICATE,KEY_MASK_SHIFT+KEY_INSERT);
+ options->get_popup()->add_item("Selection -> Clear",MENU_OPTION_SELECTION_CLEAR,KEY_MASK_SHIFT+KEY_DELETE);
//options->get_popup()->add_separator();
//options->get_popup()->add_item("Configure",MENU_OPTION_CONFIGURE);
@@ -1266,7 +1263,7 @@ GridMapEditor::GridMapEditor(EditorNode *p_editor) {
settings_pick_distance->set_max(10000.0f);
settings_pick_distance->set_min(500.0f);
settings_pick_distance->set_step(1.0f);
- settings_pick_distance->set_val(EDITOR_DEF("gridmap_editor/pick_distance", 5000.0));
+ settings_pick_distance->set_val(EDITOR_DEF("grid_map/pick_distance", 5000.0));
settings_vbc->add_margin_child("Pick Distance:", settings_pick_distance);
clip_mode=CLIP_DISABLED;
diff --git a/modules/gridmap/grid_map_editor_plugin.h b/modules/gridmap/grid_map_editor_plugin.h
index fc43866ef3..535c51bcbf 100644
--- a/modules/gridmap/grid_map_editor_plugin.h
+++ b/modules/gridmap/grid_map_editor_plugin.h
@@ -167,6 +167,7 @@ class GridMapEditor : public VBoxContainer {
MENU_OPTION_DUPLICATE_SELECTS,
MENU_OPTION_SELECTION_MAKE_AREA,
MENU_OPTION_SELECTION_MAKE_EXTERIOR_CONNECTOR,
+ MENU_OPTION_SELECTION_DUPLICATE,
MENU_OPTION_SELECTION_CLEAR,
MENU_OPTION_REMOVE_AREA,
MENU_OPTION_GRIDMAP_SETTINGS
diff --git a/modules/visual_script/register_types.cpp b/modules/visual_script/register_types.cpp
index 1360e546f3..ad54149b51 100644
--- a/modules/visual_script/register_types.cpp
+++ b/modules/visual_script/register_types.cpp
@@ -36,6 +36,7 @@
#include "visual_script_builtin_funcs.h"
#include "visual_script_flow_control.h"
#include "visual_script_yield_nodes.h"
+#include "visual_script_expression.h"
VisualScriptLanguage *visual_script_language=NULL;
@@ -43,6 +44,10 @@ VisualScriptLanguage *visual_script_language=NULL;
void register_visual_script_types() {
+ visual_script_language=memnew( VisualScriptLanguage );
+ //script_language_gd->init();
+ ScriptServer::register_language(visual_script_language);
+
ObjectTypeDB::register_type<VisualScript>();
ObjectTypeDB::register_virtual_type<VisualScriptNode>();
ObjectTypeDB::register_virtual_type<VisualScriptFunctionState>();
@@ -54,7 +59,9 @@ void register_visual_script_types() {
ObjectTypeDB::register_type<VisualScriptIndexGet>();
ObjectTypeDB::register_type<VisualScriptIndexSet>();
ObjectTypeDB::register_type<VisualScriptGlobalConstant>();
+ ObjectTypeDB::register_type<VisualScriptClassConstant>();
ObjectTypeDB::register_type<VisualScriptMathConstant>();
+ ObjectTypeDB::register_type<VisualScriptBasicTypeConstant>();
ObjectTypeDB::register_type<VisualScriptEngineSingleton>();
ObjectTypeDB::register_type<VisualScriptSceneNode>();
ObjectTypeDB::register_type<VisualScriptSceneTree>();
@@ -62,11 +69,20 @@ void register_visual_script_types() {
ObjectTypeDB::register_type<VisualScriptSelf>();
ObjectTypeDB::register_type<VisualScriptCustomNode>();
ObjectTypeDB::register_type<VisualScriptSubCall>();
+ ObjectTypeDB::register_type<VisualScriptComment>();
+ ObjectTypeDB::register_type<VisualScriptConstructor>();
+ ObjectTypeDB::register_type<VisualScriptLocalVar>();
+ ObjectTypeDB::register_type<VisualScriptLocalVarSet>();
+ ObjectTypeDB::register_type<VisualScriptInputAction>();
+ ObjectTypeDB::register_type<VisualScriptDeconstruct>();
+ ObjectTypeDB::register_type<VisualScriptPreload>();
+ ObjectTypeDB::register_type<VisualScriptTypeCast>();
+
ObjectTypeDB::register_type<VisualScriptFunctionCall>();
ObjectTypeDB::register_type<VisualScriptPropertySet>();
ObjectTypeDB::register_type<VisualScriptPropertyGet>();
- ObjectTypeDB::register_type<VisualScriptScriptCall>();
+// ObjectTypeDB::register_type<VisualScriptScriptCall>();
ObjectTypeDB::register_type<VisualScriptEmitSignal>();
ObjectTypeDB::register_type<VisualScriptReturn>();
@@ -75,22 +91,22 @@ void register_visual_script_types() {
ObjectTypeDB::register_type<VisualScriptIterator>();
ObjectTypeDB::register_type<VisualScriptSequence>();
ObjectTypeDB::register_type<VisualScriptInputFilter>();
- ObjectTypeDB::register_type<VisualScriptInputSelector>();
+ ObjectTypeDB::register_type<VisualScriptSwitch >();
ObjectTypeDB::register_type<VisualScriptYield>();
ObjectTypeDB::register_type<VisualScriptYieldSignal>();
ObjectTypeDB::register_type<VisualScriptBuiltinFunc>();
- visual_script_language=memnew( VisualScriptLanguage );
- //script_language_gd->init();
- ScriptServer::register_language(visual_script_language);
+
+ ObjectTypeDB::register_type<VisualScriptExpression>();
register_visual_script_nodes();
register_visual_script_func_nodes();
register_visual_script_builtin_func_node();
register_visual_script_flow_control_nodes();
register_visual_script_yield_nodes();
+ register_visual_script_expression_node();
#ifdef TOOLS_ENABLED
VisualScriptEditor::register_editor();
@@ -102,8 +118,13 @@ void register_visual_script_types() {
void unregister_visual_script_types() {
+ unregister_visual_script_nodes();
+
ScriptServer::unregister_language(visual_script_language);
+#ifdef TOOLS_ENABLED
+ VisualScriptEditor::free_clipboard();
+#endif
if (visual_script_language)
memdelete( visual_script_language );
diff --git a/modules/visual_script/visual_script.cpp b/modules/visual_script/visual_script.cpp
index 91219679db..bd042c8989 100644
--- a/modules/visual_script/visual_script.cpp
+++ b/modules/visual_script/visual_script.cpp
@@ -1,9 +1,9 @@
#include "visual_script.h"
#include "visual_script_nodes.h"
#include "scene/main/node.h"
-
+#include "os/os.h"
#include "globals.h"
-#define SCRIPT_VARIABLES_PREFIX "script_variables/"
+
//used by editor, this is not really saved
@@ -31,15 +31,25 @@ void VisualScriptNode::_notification(int p_what) {
void VisualScriptNode::ports_changed_notify(){
+
default_input_values.resize( MAX(default_input_values.size(),get_input_value_port_count()) ); //let it grow as big as possible, we don't want to lose values on resize
+
emit_signal("ports_changed");
+
}
-void VisualScriptNode::set_default_input_value(int p_port,const Variant& p_value) {
+void VisualScriptNode::set_default_input_value(int p_port,const Variant& p_value) {
ERR_FAIL_INDEX(p_port,default_input_values.size());
default_input_values[p_port]=p_value;
+
+#ifdef TOOLS_ENABLED
+ for (Set<VisualScript*>::Element *E=scripts_used.front();E;E=E->next()) {
+ E->get()->set_edited(true);
+ }
+#endif
+
}
Variant VisualScriptNode::get_default_input_value(int p_port) const {
@@ -54,35 +64,40 @@ void VisualScriptNode::_set_default_input_values(Array p_values) {
default_input_values=p_values;
}
-Array VisualScriptNode::_get_default_input_values() const {
- //validate on save, since on load there is little info about this
+void VisualScriptNode::validate_input_default_values() {
+
+
- Array saved_values;
+ default_input_values.resize(get_input_value_port_count());
//actually validate on save
for(int i=0;i<get_input_value_port_count();i++) {
Variant::Type expected = get_input_value_port_info(i).type;
- if (i>=default_input_values.size()) {
+ if (expected==Variant::NIL || expected==default_input_values[i].get_type()) {
+ continue;
+ } else {
+ //not the same, reconvert
Variant::CallError ce;
- saved_values.push_back(Variant::construct(expected,NULL,0,ce,false));
- } else {
-
- if (expected==Variant::NIL || expected==default_input_values[i].get_type()) {
- saved_values.push_back(default_input_values[i]);
- } else {
- //not the same, reconvert
- Variant::CallError ce;
- Variant existing = default_input_values[i];
- const Variant *existingp=&existing;
- saved_values.push_back( Variant::construct(expected,&existingp,1,ce,false) );
+ Variant existing = default_input_values[i];
+ const Variant *existingp=&existing;
+ default_input_values[i] = Variant::construct(expected,&existingp,1,ce,false);
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ //could not convert? force..
+ default_input_values[i] = Variant::construct(expected,NULL,0,ce,false);
}
}
}
- return saved_values;
+}
+
+Array VisualScriptNode::_get_default_input_values() const {
+
+ //validate on save, since on load there is little info about this
+
+ return default_input_values;
}
@@ -99,6 +114,19 @@ void VisualScriptNode::_bind_methods() {
ADD_SIGNAL(MethodInfo("ports_changed"));
}
+VisualScriptNode::TypeGuess VisualScriptNode::guess_output_type(TypeGuess* p_inputs,int p_output) const {
+
+ PropertyInfo pinfo = get_output_value_port_info(p_output);
+
+ TypeGuess tg;
+
+ tg.type=pinfo.type;
+ if (pinfo.hint==PROPERTY_HINT_RESOURCE_TYPE) {
+ tg.obj_type=pinfo.hint_string;
+ }
+
+ return tg;
+}
Ref<VisualScript> VisualScriptNode::get_visual_script() const {
@@ -106,7 +134,6 @@ Ref<VisualScript> VisualScriptNode::get_visual_script() const {
return Ref<VisualScript>(scripts_used.front()->get());
return Ref<VisualScript>();
-
}
VisualScriptNode::VisualScriptNode() {
@@ -126,15 +153,15 @@ VisualScriptNodeInstance::VisualScriptNodeInstance() {
VisualScriptNodeInstance::~VisualScriptNodeInstance() {
if (sequence_outputs) {
- memdelete(sequence_outputs);
+ memdelete_arr(sequence_outputs);
}
if (input_ports) {
- memdelete(input_ports);
+ memdelete_arr(input_ports);
}
if (output_ports) {
- memdelete(output_ports);
+ memdelete_arr(output_ports);
}
}
@@ -224,6 +251,7 @@ int VisualScript::get_function_node_id(const StringName& p_name) const {
void VisualScript::_node_ports_changed(int p_id) {
+
StringName function;
for (Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) {
@@ -239,6 +267,10 @@ void VisualScript::_node_ports_changed(int p_id) {
Function &func = functions[function];
Ref<VisualScriptNode> vsn = func.nodes[p_id].node;
+ if (OS::get_singleton()->get_main_loop() && OS::get_singleton()->get_main_loop()->cast_to<SceneTree>() && OS::get_singleton()->get_main_loop()->cast_to<SceneTree>()->is_editor_hint()) {
+ vsn->validate_input_default_values(); //force validate default values when editing on editor
+ }
+
//must revalidate all the functions
{
@@ -542,6 +574,23 @@ bool VisualScript::is_input_value_port_connected(const StringName& p_func,int p_
return false;
}
+bool VisualScript::get_input_value_port_connection_source(const StringName& p_func,int p_node,int p_port,int *r_node,int *r_port) const {
+
+ ERR_FAIL_COND_V(!functions.has(p_func),false);
+ const Function &func = functions[p_func];
+
+ for (const Set<DataConnection>::Element *E=func.data_connections.front();E;E=E->next()) {
+ if (E->get().to_node==p_node && E->get().to_port==p_port) {
+ *r_node=E->get().from_node;
+ *r_port=E->get().from_port;
+ return true;
+ }
+ }
+
+ return false;
+
+}
+
void VisualScript::get_data_connection_list(const StringName& p_func,List<DataConnection> *r_connection) const {
ERR_FAIL_COND(!functions.has(p_func));
@@ -552,7 +601,7 @@ void VisualScript::get_data_connection_list(const StringName& p_func,List<DataCo
}
}
-void VisualScript::add_variable(const StringName& p_name,const Variant& p_default_value) {
+void VisualScript::add_variable(const StringName& p_name,const Variant& p_default_value,bool p_export) {
ERR_FAIL_COND( instances.size() );
ERR_FAIL_COND(!String(p_name).is_valid_identifier());
@@ -563,10 +612,9 @@ void VisualScript::add_variable(const StringName& p_name,const Variant& p_defaul
v.info.type=p_default_value.get_type();
v.info.name=p_name;
v.info.hint=PROPERTY_HINT_NONE;
+ v._export=p_export;
variables[p_name]=v;
- script_variable_remap[SCRIPT_VARIABLES_PREFIX+String(p_name)]=p_name;
-
#ifdef TOOLS_ENABLED
_update_placeholders();
@@ -583,7 +631,6 @@ void VisualScript::remove_variable(const StringName& p_name) {
ERR_FAIL_COND(!variables.has(p_name));
variables.erase(p_name);
- script_variable_remap.erase(SCRIPT_VARIABLES_PREFIX+String(p_name));
#ifdef TOOLS_ENABLED
_update_placeholders();
@@ -600,6 +647,7 @@ void VisualScript::set_variable_default_value(const StringName& p_name,const Var
_update_placeholders();
#endif
+
}
Variant VisualScript::get_variable_default_value(const StringName& p_name) const{
@@ -626,6 +674,21 @@ PropertyInfo VisualScript::get_variable_info(const StringName& p_name) const{
return variables[p_name].info;
}
+void VisualScript::set_variable_export(const StringName& p_name,bool p_export) {
+
+ ERR_FAIL_COND(!variables.has(p_name));
+
+ variables[p_name]._export=p_export;
+}
+
+bool VisualScript::get_variable_export(const StringName& p_name) const {
+
+ ERR_FAIL_COND_V(!variables.has(p_name),false);
+ return variables[p_name]._export;
+
+}
+
+
void VisualScript::_set_variable_info(const StringName& p_name,const Dictionary& p_info) {
PropertyInfo pinfo;
@@ -656,7 +719,7 @@ Dictionary VisualScript::_get_variable_info(const StringName& p_name) const{
return d;
}
-void VisualScript::get_variable_list(List<StringName> *r_variables){
+void VisualScript::get_variable_list(List<StringName> *r_variables) const{
for (Map<StringName,Variable>::Element *E=variables.front();E;E=E->next()) {
@@ -836,6 +899,10 @@ StringName VisualScript::get_instance_base_type() const {
return base_type;
}
+Ref<Script> VisualScript::get_base_script() const {
+ return Ref<Script>(); // no inheritance in visual script
+}
+
#ifdef TOOLS_ENABLED
void VisualScript::_placeholder_erased(PlaceHolderScriptInstance *p_placeholder) {
@@ -854,8 +921,11 @@ void VisualScript::_update_placeholders() {
for (Map<StringName,Variable>::Element *E=variables.front();E;E=E->next()) {
+ if (!E->get()._export)
+ continue;
+
PropertyInfo p = E->get().info;
- p.name=SCRIPT_VARIABLES_PREFIX+String(E->key());
+ p.name=String(E->key());
pinfo.push_back(p);
values[p.name]=E->get().default_value;
}
@@ -887,8 +957,11 @@ ScriptInstance* VisualScript::instance_create(Object *p_this) {
for (Map<StringName,Variable>::Element *E=variables.front();E;E=E->next()) {
+ if (!E->get()._export)
+ continue;
+
PropertyInfo p = E->get().info;
- p.name=SCRIPT_VARIABLES_PREFIX+String(E->key());
+ p.name=String(E->key());
pinfo.push_back(p);
values[p.name]=E->get().default_value;
}
@@ -986,13 +1059,13 @@ void VisualScript::get_script_signal_list(List<MethodInfo> *r_signals) const {
bool VisualScript::get_property_default_value(const StringName& p_property,Variant& r_value) const {
- if (!script_variable_remap.has(p_property))
+ if (!variables.has(p_property))
return false;
- r_value=variables[ script_variable_remap[p_property] ].default_value;
+ r_value=variables[ p_property ].default_value;
return true;
}
-void VisualScript::get_method_list(List<MethodInfo> *p_list) const {
+void VisualScript::get_script_method_list(List<MethodInfo> *p_list) const {
for (Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) {
@@ -1045,6 +1118,33 @@ MethodInfo VisualScript::get_method_info(const StringName& p_method) const{
return mi;
}
+void VisualScript::get_script_property_list(List<PropertyInfo> *p_list) const {
+
+ List<StringName> vars;
+ get_variable_list(&vars);
+
+ for (List<StringName>::Element *E=vars.front();E;E=E->next()) {
+ if (!variables[E->get()]._export)
+ continue;
+ p_list->push_back(variables[E->get()].info);
+ }
+}
+
+#ifdef TOOLS_ENABLED
+bool VisualScript::are_subnodes_edited() const {
+
+ for(const Map<StringName,Function>::Element *E=functions.front();E;E=E->next()) {
+
+ for (const Map<int,Function::NodeData>::Element *F=E->get().nodes.front();F;F=F->next()) {
+ if (F->get().node->is_edited()) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+#endif
void VisualScript::_set_data(const Dictionary& p_data) {
@@ -1061,6 +1161,7 @@ void VisualScript::_set_data(const Dictionary& p_data) {
add_variable(name);
_set_variable_info(name,v);
set_variable_default_value(name,v["default_value"]);
+ set_variable_export(name,v.has("export") && bool(v["export"]));
}
@@ -1131,6 +1232,7 @@ Dictionary VisualScript::_get_data() const{
Dictionary var = _get_variable_info(E->key());
var["name"]=E->key(); //make sure it's the right one
var["default_value"]=E->get().default_value;
+ var["export"]=E->get()._export;
vars.push_back(var);
}
d["variables"]=vars;
@@ -1241,13 +1343,15 @@ void VisualScript::_bind_methods() {
ObjectTypeDB::bind_method(_MD("data_disconnect","func","from_node","from_port","to_node","to_port"),&VisualScript::data_disconnect);
ObjectTypeDB::bind_method(_MD("has_data_connection","func","from_node","from_port","to_node","to_port"),&VisualScript::has_data_connection);
- ObjectTypeDB::bind_method(_MD("add_variable","name","default_value"),&VisualScript::add_variable,DEFVAL(Variant()));
+ ObjectTypeDB::bind_method(_MD("add_variable","name","default_value","export"),&VisualScript::add_variable,DEFVAL(Variant()),DEFVAL(false));
ObjectTypeDB::bind_method(_MD("has_variable","name"),&VisualScript::has_variable);
ObjectTypeDB::bind_method(_MD("remove_variable","name"),&VisualScript::remove_variable);
ObjectTypeDB::bind_method(_MD("set_variable_default_value","name","value"),&VisualScript::set_variable_default_value);
ObjectTypeDB::bind_method(_MD("get_variable_default_value","name"),&VisualScript::get_variable_default_value);
ObjectTypeDB::bind_method(_MD("set_variable_info","name","value"),&VisualScript::_set_variable_info);
ObjectTypeDB::bind_method(_MD("get_variable_info","name"),&VisualScript::_get_variable_info);
+ ObjectTypeDB::bind_method(_MD("set_variable_export","name","enable"),&VisualScript::set_variable_export);
+ ObjectTypeDB::bind_method(_MD("get_variable_export","name"),&VisualScript::get_variable_export);
ObjectTypeDB::bind_method(_MD("rename_variable","name","new_name"),&VisualScript::rename_variable);
ObjectTypeDB::bind_method(_MD("add_custom_signal","name"),&VisualScript::add_custom_signal);
@@ -1296,12 +1400,10 @@ VisualScript::~VisualScript() {
bool VisualScriptInstance::set(const StringName& p_name, const Variant& p_value) {
- const Map<StringName,StringName>::Element *remap = script->script_variable_remap.find(p_name);
- if (!remap)
- return false;
- Map<StringName,Variant>::Element *E=variables.find(remap->get());
- ERR_FAIL_COND_V(!E,false);
+ Map<StringName,Variant>::Element *E=variables.find(p_name);
+ if (!E)
+ return false;
E->get()=p_value;
@@ -1311,35 +1413,29 @@ bool VisualScriptInstance::set(const StringName& p_name, const Variant& p_value)
bool VisualScriptInstance::get(const StringName& p_name, Variant &r_ret) const {
- const Map<StringName,StringName>::Element *remap = script->script_variable_remap.find(p_name);
- if (!remap)
+ const Map<StringName,Variant>::Element *E=variables.find(p_name);
+ if (!E)
return false;
- const Map<StringName,Variant>::Element *E=variables.find(remap->get());
- ERR_FAIL_COND_V(!E,false);
-
- return E->get();
+ r_ret=E->get();
+ return true;
}
void VisualScriptInstance::get_property_list(List<PropertyInfo> *p_properties) const{
for (const Map<StringName,VisualScript::Variable>::Element *E=script->variables.front();E;E=E->next()) {
+ if (!E->get()._export)
+ continue;
PropertyInfo p = E->get().info;
- p.name=SCRIPT_VARIABLES_PREFIX+String(E->key());
+ p.name=String(E->key());
p_properties->push_back(p);
}
}
Variant::Type VisualScriptInstance::get_property_type(const StringName& p_name,bool *r_is_valid) const{
- const Map<StringName,StringName>::Element *remap = script->script_variable_remap.find(p_name);
- if (!remap) {
- if (r_is_valid)
- *r_is_valid=false;
- return Variant::NIL;
- }
- const Map<StringName,VisualScript::Variable>::Element *E=script->variables.find(remap->get());
+ const Map<StringName,VisualScript::Variable>::Element *E=script->variables.find(p_name);
if (!E) {
if (r_is_valid)
*r_is_valid=false;
@@ -1389,7 +1485,59 @@ bool VisualScriptInstance::has_method(const StringName& p_method) const{
//#define VSDEBUG(m_text) print_line(m_text)
#define VSDEBUG(m_text)
-Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p_stack, int p_stack_size, VisualScriptNodeInstance* p_node, int p_flow_stack_pos, bool p_resuming_yield, Variant::CallError &r_error) {
+void VisualScriptInstance::_dependency_step(VisualScriptNodeInstance* node,int p_pass,int *pass_stack,const Variant **input_args,Variant **output_args,Variant *variant_stack,Variant::CallError& r_error,String& error_str,VisualScriptNodeInstance** r_error_node) {
+
+ ERR_FAIL_COND(node->pass_idx==-1);
+
+ if (pass_stack[node->pass_idx]==p_pass)
+ return;
+
+ pass_stack[node->pass_idx]=p_pass;
+
+ if (!node->dependencies.empty()) {
+
+ int dc = node->dependencies.size();
+ VisualScriptNodeInstance **deps=node->dependencies.ptr();
+
+ for(int i=0;i<dc;i++) {
+
+ _dependency_step(deps[i],p_pass,pass_stack,input_args,output_args,variant_stack,r_error,error_str,r_error_node);
+ if (r_error.error!=Variant::CallError::CALL_OK)
+ return;
+
+ }
+ }
+
+
+ for(int i=0;i<node->input_port_count;i++) {
+
+ int index = node->input_ports[i] & VisualScriptNodeInstance::INPUT_MASK;
+
+
+ if (node->input_ports[i] & VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT) {
+ //is a default value (unassigned input port)
+ input_args[i]=&default_values[index];
+ } else {
+ //regular temporary in stack
+ input_args[i]=&variant_stack[index];
+
+ }
+ }
+ for(int i=0 ; i<node->output_port_count ; i++) {
+ output_args[i] = &variant_stack[ node->output_ports[i] ];
+ }
+
+ Variant *working_mem=node->working_mem_idx>=0 ? &variant_stack[node->working_mem_idx] : (Variant*)NULL;
+
+ node->step(input_args,output_args,VisualScriptNodeInstance::START_MODE_BEGIN_SEQUENCE,working_mem,r_error,error_str);
+ //ignore return
+ if (r_error.error!=Variant::CallError::CALL_OK) {
+ *r_error_node=node;
+ }
+
+}
+
+Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p_stack, int p_stack_size, VisualScriptNodeInstance* p_node, int p_flow_stack_pos, int p_pass, bool p_resuming_yield, Variant::CallError &r_error) {
Map<StringName,Function>::Element *F = functions.find(p_method);
ERR_FAIL_COND_V(!F,Variant());
@@ -1402,6 +1550,7 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
Variant **output_args=(Variant**)(input_args + max_input_args);
int flow_max = f->flow_stack_size;
int* flow_stack = flow_max? (int*)(output_args + max_output_args) : (int*)NULL;
+ int *pass_stack = flow_stack + flow_max;
String error_str;
@@ -1421,6 +1570,7 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
while(true) {
+ p_pass++; //increment pass
current_node_id=node->get_id();
VSDEBUG("==========AT NODE: "+itos(current_node_id)+" base: "+node->get_base_node()->get_type());
@@ -1439,38 +1589,46 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
input_args[i]=&variant_stack[i];
}
} else {
- //setup input pointers normally
- VSDEBUG("INPUT PORTS: "+itos(node->input_port_count));
- for(int i=0 ; i<node->input_port_count ; i++) {
+ //run dependencies first
- int index = node->input_ports[i] & VisualScriptNodeInstance::INPUT_MASK;
+ if (!node->dependencies.empty()) {
- if (node->input_ports[i] & VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT) {
- //is a default value (unassigned input port)
- input_args[i]=&default_values[index];
- VSDEBUG("\tPORT "+itos(i)+" DEFAULT VAL");
- } else if (node->input_ports[i] & VisualScriptNodeInstance::INPUT_UNSEQUENCED_READ_BIT) {
- //from a node that requires read
- Function::UnsequencedGet *ug = &f->unsequenced_gets[index];
+ int dc = node->dependencies.size();
+ VisualScriptNodeInstance **deps=node->dependencies.ptr();
- bool ok = ug->from->get_output_port_unsequenced(i,&variant_stack[ug->to_stack],working_mem,error_str);
- if (!ok) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- current_node_id=ug->from->get_id();
+ for(int i=0;i<dc;i++) {
+
+ _dependency_step(deps[i],p_pass,pass_stack,input_args,output_args,variant_stack,r_error,error_str,&node);
+ if (r_error.error!=Variant::CallError::CALL_OK) {
error=true;
- working_mem=NULL;
+ current_node_id=node->id;
break;
}
+ }
+ }
- VSDEBUG("\tPORT "+itos(i)+" UNSEQ READ TO STACK: " + itos(ug->to_stack));
- input_args[i]=&variant_stack[ug->to_stack];
- } else {
- //regular temporary in stack
- input_args[i]=&variant_stack[index];
- VSDEBUG("PORT "+itos(i)+" AT STACK "+itos(index));
+ if (!error) {
+
+ //setup input pointers normally
+ VSDEBUG("INPUT PORTS: "+itos(node->input_port_count));
+
+ for(int i=0 ; i<node->input_port_count ; i++) {
+
+ int index = node->input_ports[i] & VisualScriptNodeInstance::INPUT_MASK;
+
+ if (node->input_ports[i] & VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT) {
+ //is a default value (unassigned input port)
+ input_args[i]=&default_values[index];
+ VSDEBUG("\tPORT "+itos(i)+" DEFAULT VAL");
+ } else {
+ //regular temporary in stack
+ input_args[i]=&variant_stack[index];
+ VSDEBUG("PORT "+itos(i)+" AT STACK "+itos(index));
+
+ }
}
}
}
@@ -1492,13 +1650,13 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
{
if (p_resuming_yield)
start_mode=VisualScriptNodeInstance::START_MODE_RESUME_YIELD;
- else if (flow_stack && !(flow_stack[flow_stack_pos] & VisualScriptNodeInstance::FLOW_STACK_PUSHED_BIT)) //if there is a push bit, it means we are continuing a sequence
+ else if (!flow_stack || !(flow_stack[flow_stack_pos] & VisualScriptNodeInstance::FLOW_STACK_PUSHED_BIT)) //if there is a push bit, it means we are continuing a sequence
start_mode=VisualScriptNodeInstance::START_MODE_BEGIN_SEQUENCE;
else
start_mode=VisualScriptNodeInstance::START_MODE_CONTINUE_SEQUENCE;
}
- VSDEBUG("STEP - STARTSEQ: "+itos(start_sequence));
+ VSDEBUG("STEP - STARTSEQ: "+itos(start_mode));
int ret = node->step(input_args,output_args,start_mode,working_mem,r_error,error_str);
@@ -1537,6 +1695,7 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
state->node=node;
state->flow_stack_pos=flow_stack_pos;
state->stack.resize(p_stack_size);
+ state->pass=p_pass;
copymem(state->stack.ptr(),p_stack,p_stack_size);
//step 2, run away, return directly
r_error.error=Variant::CallError::CALL_OK;
@@ -1707,6 +1866,7 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
node = instances[ flow_stack[i] & VisualScriptNodeInstance::FLOW_STACK_MASK ];
flow_stack_pos=i;
found=true;
+ break;
}
}
@@ -1735,6 +1895,26 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
String err_func = p_method;
int err_line=current_node_id; //not a line but it works as one
+ if (node && (r_error.error!=Variant::CallError::CALL_ERROR_INVALID_METHOD || error_str==String())) {
+
+ if (error_str!=String()) {
+ error_str+=" ";
+ }
+
+ if (r_error.error==Variant::CallError::CALL_ERROR_INVALID_ARGUMENT) {
+ int errorarg=r_error.argument;
+ error_str+="Cannot convert argument "+itos(errorarg+1)+" to "+Variant::get_type_name(r_error.expected)+".";
+ } else if (r_error.error==Variant::CallError::CALL_ERROR_TOO_MANY_ARGUMENTS) {
+ error_str+="Expected "+itos(r_error.argument)+" arguments.";
+ } else if (r_error.error==Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS) {
+ error_str+="Expected "+itos(r_error.argument)+" arguments.";
+ } else if (r_error.error==Variant::CallError::CALL_ERROR_INVALID_METHOD) {
+ error_str+="Invalid Call.";
+ } else if (r_error.error==Variant::CallError::CALL_ERROR_INSTANCE_IS_NULL) {
+ error_str+="Base Instance is null";
+ }
+ }
+
//if (!GDScriptLanguage::get_singleton()->debug_break(err_text,false)) {
// debugger break did not happen
@@ -1767,7 +1947,7 @@ Variant VisualScriptInstance::_call_internal(const StringName& p_method, void* p
}
-Variant VisualScriptInstance::call(const StringName& p_method,const Variant** p_args,int p_argcount,Variant::CallError &r_error){
+Variant VisualScriptInstance::call(const StringName& p_method, const Variant** p_args, int p_argcount, Variant::CallError &r_error){
r_error.error=Variant::CallError::CALL_OK; //ok by default
@@ -1787,6 +1967,7 @@ Variant VisualScriptInstance::call(const StringName& p_method,const Variant** p_
total_stack_size+=f->node_count*sizeof(bool);
total_stack_size+=(max_input_args+max_output_args)*sizeof(Variant*); //arguments
total_stack_size+=f->flow_stack_size*sizeof(int); //flow
+ total_stack_size+=f->pass_stack_size*sizeof(int);
VSDEBUG("STACK SIZE: "+itos(total_stack_size));
VSDEBUG("STACK VARIANTS: : "+itos(f->max_stack));
@@ -1794,6 +1975,7 @@ Variant VisualScriptInstance::call(const StringName& p_method,const Variant** p_
VSDEBUG("MAX INPUT: "+itos(max_input_args));
VSDEBUG("MAX OUTPUT: "+itos(max_output_args));
VSDEBUG("FLOW STACK SIZE: "+itos(f->flow_stack_size));
+ VSDEBUG("PASS STACK SIZE: "+itos(f->pass_stack_size));
void *stack = alloca(total_stack_size);
@@ -1803,11 +1985,13 @@ Variant VisualScriptInstance::call(const StringName& p_method,const Variant** p_
Variant **output_args=(Variant**)(input_args + max_input_args);
int flow_max = f->flow_stack_size;
int* flow_stack = flow_max? (int*)(output_args + max_output_args) : (int*)NULL;
+ int *pass_stack = flow_stack + flow_max;
for(int i=0;i<f->node_count;i++) {
sequence_bits[i]=false; //all starts as false
}
+ zeromem(pass_stack,f->pass_stack_size*sizeof(int));
Map<int,VisualScriptNodeInstance*>::Element *E = instances.find(f->node);
if (!E) {
@@ -1850,7 +2034,7 @@ Variant VisualScriptInstance::call(const StringName& p_method,const Variant** p_
variant_stack[i]=*p_args[i];
}
- return _call_internal(p_method,stack,total_stack_size,node,0,false,r_error);
+ return _call_internal(p_method,stack,total_stack_size,node,0,0,false,r_error);
}
@@ -1871,6 +2055,30 @@ Ref<Script> VisualScriptInstance::get_script() const{
return script;
}
+ScriptInstance::RPCMode VisualScriptInstance::get_rpc_mode(const StringName& p_method) const {
+
+ const Map<StringName,VisualScript::Function>::Element *E = script->functions.find(p_method);
+ if (!E) {
+ return RPC_MODE_DISABLED;
+ }
+
+ if (E->get().function_id>=0 && E->get().nodes.has(E->get().function_id)) {
+
+ Ref<VisualScriptFunction> vsf = E->get().nodes[E->get().function_id].node;
+ if (vsf.is_valid()) {
+
+ return vsf->get_rpc_mode();
+ }
+ }
+
+ return RPC_MODE_DISABLED;
+}
+
+ScriptInstance::RPCMode VisualScriptInstance::get_rset_mode(const StringName& p_variable) const {
+
+ return RPC_MODE_DISABLED;
+}
+
void VisualScriptInstance::create(const Ref<VisualScript>& p_script,Object *p_owner) {
@@ -1898,6 +2106,7 @@ void VisualScriptInstance::create(const Ref<VisualScript>& p_script,Object *p_ow
for(const Map<StringName,VisualScript::Variable>::Element *E=script->variables.front();E;E=E->next()) {
variables[E->key()]=E->get().default_value;
+ //no hacer que todo exporte, solo las que queres!
}
@@ -1907,7 +2116,9 @@ void VisualScriptInstance::create(const Ref<VisualScript>& p_script,Object *p_ow
function.node=E->get().function_id;
function.max_stack=0;
function.flow_stack_size=0;
+ function.pass_stack_size=0;
function.node_count=0;
+ Map<StringName,int> local_var_indices;
if (function.node<0) {
VisualScriptLanguage::singleton->debug_break_parse(get_script()->get_path(),0,"No start node in function: "+String(E->key()));
@@ -1946,15 +2157,20 @@ void VisualScriptInstance::create(const Ref<VisualScript>& p_script,Object *p_ow
instance->id=F->key();
instance->input_port_count = node->get_input_value_port_count();
+ instance->input_ports=NULL;
instance->output_port_count = node->get_output_value_port_count();
+ instance->output_ports=NULL;
instance->sequence_output_count = node->get_output_sequence_port_count();
instance->sequence_index=function.node_count++;
+ instance->sequence_outputs=NULL;
+ instance->pass_idx=-1;
if (instance->input_port_count) {
instance->input_ports = memnew_arr(int,instance->input_port_count);
for(int i=0;i<instance->input_port_count;i++) {
+
instance->input_ports[i]=-1; //if not assigned, will become default value
- }
+ }
}
if (instance->output_port_count) {
@@ -1971,7 +2187,25 @@ void VisualScriptInstance::create(const Ref<VisualScript>& p_script,Object *p_ow
}
}
- if (instance->get_working_memory_size()) {
+ if (node->cast_to<VisualScriptLocalVar>() || node->cast_to<VisualScriptLocalVarSet>()) {
+ //working memory is shared only for this node, for the same variables
+ Ref<VisualScriptLocalVar> vslv = node;
+
+ StringName var_name;
+
+ if (node->cast_to<VisualScriptLocalVar>())
+ var_name = String(node->cast_to<VisualScriptLocalVar>()->get_var_name()).strip_edges();
+ else
+ var_name = String(node->cast_to<VisualScriptLocalVarSet>()->get_var_name()).strip_edges();
+
+ if (!local_var_indices.has(var_name)) {
+ local_var_indices[var_name]=function.max_stack;
+ function.max_stack++;
+ }
+
+ instance->working_mem_idx=local_var_indices[var_name];
+
+ } else if (instance->get_working_memory_size()) {
instance->working_mem_idx = function.max_stack;
function.max_stack+=instance->get_working_memory_size();
} else {
@@ -2007,24 +2241,17 @@ void VisualScriptInstance::create(const Ref<VisualScript>& p_script,Object *p_ow
}
- if (from->is_output_port_unsequenced(dc.from_node)) {
-
- //prepare an unsequenced read (must actually get the value from the output)
- int stack_pos = function.max_stack++;
-
- Function::UnsequencedGet uget;
- uget.from=from;
- uget.from_port=dc.from_port;
- uget.to_stack=stack_pos;
-
- to->input_ports[dc.to_port] = function.unsequenced_gets.size() | VisualScriptNodeInstance::INPUT_UNSEQUENCED_READ_BIT;
- function.unsequenced_gets.push_back(uget);
-
- } else {
-
- to->input_ports[dc.to_port] = from->output_ports[dc.from_port]; //read from wherever the stack is
+ if (from->get_sequence_output_count()==0 && to->dependencies.find(from)==-1) {
+ //if the node we are reading from has no output sequence, we must call step() before reading from it.
+ if (from->pass_idx==-1) {
+ from->pass_idx=function.pass_stack_size;
+ function.pass_stack_size++;
+ }
+ to->dependencies.push_back(from);
}
+ to->input_ports[dc.to_port] = from->output_ports[dc.from_port]; //read from wherever the stack is
+
}
//third pass, do sequence connections
@@ -2159,7 +2386,7 @@ Variant VisualScriptFunctionState::_signal_callback(const Variant** p_args, int
*working_mem=args; //arguments go to working mem.
- Variant ret = instance->_call_internal(function,stack.ptr(),stack.size(),node,flow_stack_pos,true,r_error);
+ Variant ret = instance->_call_internal(function,stack.ptr(),stack.size(),node,flow_stack_pos,pass,true,r_error);
function=StringName(); //invalidate
return ret;
}
@@ -2201,7 +2428,7 @@ Variant VisualScriptFunctionState::resume(Array p_args) {
*working_mem=p_args; //arguments go to working mem.
- Variant ret= instance->_call_internal(function,stack.ptr(),stack.size(),node,flow_stack_pos,true,r_error);
+ Variant ret= instance->_call_internal(function,stack.ptr(),stack.size(),node,flow_stack_pos,pass,true,r_error);
function=StringName(); //invalidate
return ret;
}
@@ -2212,7 +2439,7 @@ void VisualScriptFunctionState::_bind_methods() {
ObjectTypeDB::bind_method(_MD("connect_to_signal","obj","signals","args"),&VisualScriptFunctionState::connect_to_signal);
ObjectTypeDB::bind_method(_MD("resume:Array","args"),&VisualScriptFunctionState::resume,DEFVAL(Variant()));
ObjectTypeDB::bind_method(_MD("is_valid"),&VisualScriptFunctionState::is_valid);
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&VisualScriptFunctionState::_signal_callback,MethodInfo("_signal_callback"));
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"_signal_callback",&VisualScriptFunctionState::_signal_callback,MethodInfo("_signal_callback"));
}
VisualScriptFunctionState::VisualScriptFunctionState() {
@@ -2404,7 +2631,7 @@ void VisualScriptLanguage::debug_get_stack_level_locals(int p_level,List<String>
const StringName *f = _call_stack[l].function;
ERR_FAIL_COND(!_call_stack[l].instance->functions.has(*f));
- VisualScriptInstance::Function *func = &_call_stack[l].instance->functions[*f];
+// VisualScriptInstance::Function *func = &_call_stack[l].instance->functions[*f];
VisualScriptNodeInstance *node =_call_stack[l].instance->instances[*_call_stack[l].current_id];
ERR_FAIL_COND(!node);
@@ -2427,8 +2654,6 @@ void VisualScriptLanguage::debug_get_stack_level_locals(int p_level,List<String>
if (in_from&VisualScriptNodeInstance::INPUT_DEFAULT_VALUE_BIT) {
p_values->push_back(_call_stack[l].instance->default_values[in_value]);
- } else if (in_from&VisualScriptNodeInstance::INPUT_UNSEQUENCED_READ_BIT) {
- p_values->push_back( _call_stack[l].stack[ func->unsequenced_gets[ in_value ].to_stack ] );
} else {
p_values->push_back( _call_stack[l].stack[ in_value] );
}
@@ -2579,7 +2804,6 @@ void VisualScriptLanguage::get_registered_node_names(List<String> *r_names) {
VisualScriptLanguage::VisualScriptLanguage() {
notification="_notification";
- _get_output_port_unsequenced="_get_output_port_unsequenced";
_step="_step";
_subcall="_subcall";
singleton=this;
diff --git a/modules/visual_script/visual_script.h b/modules/visual_script/visual_script.h
index 786b9b873e..63b018b0c2 100644
--- a/modules/visual_script/visual_script.h
+++ b/modules/visual_script/visual_script.h
@@ -20,6 +20,8 @@ friend class VisualScript;
void _set_default_input_values(Array p_values);
Array _get_default_input_values() const;
+
+ void validate_input_default_values();
protected:
virtual bool _use_builtin_script() const { return false; }
@@ -36,6 +38,8 @@ public:
virtual String get_output_sequence_port_text(int p_port) const=0;
+ virtual bool has_mixed_input_and_sequence_ports() const { return false; }
+
virtual int get_input_value_port_count() const=0;
virtual int get_output_value_port_count() const=0;
@@ -56,6 +60,18 @@ public:
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance)=0;
+ struct TypeGuess {
+
+ Variant::Type type;
+ InputEvent::Type ev_type;
+ StringName obj_type;
+ Ref<Script> script;
+
+ TypeGuess() { type=Variant::NIL; ev_type=InputEvent::NONE; }
+ };
+
+ virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
+
VisualScriptNode();
};
@@ -69,7 +85,6 @@ friend class VisualScriptLanguage; //for debugger
INPUT_SHIFT=1<<24,
INPUT_MASK=INPUT_SHIFT-1,
INPUT_DEFAULT_VALUE_BIT=INPUT_SHIFT, // from unassigned input port, using default value (edited by user)
- INPUT_UNSEQUENCED_READ_BIT=INPUT_SHIFT<<1, //from unsequenced read (requires calling a function, used for constants, variales, etc).
};
@@ -77,11 +92,13 @@ friend class VisualScriptLanguage; //for debugger
int sequence_index;
VisualScriptNodeInstance **sequence_outputs;
int sequence_output_count;
+ Vector<VisualScriptNodeInstance*> dependencies;
int *input_ports;
int input_port_count;
int *output_ports;
int output_port_count;
int working_mem_idx;
+ int pass_idx;
VisualScriptNode *base;
@@ -115,10 +132,6 @@ public:
virtual int get_working_memory_size() const { return 0; }
- //unsequenced ports are those that can return a value even if no sequence happened through them, used for constants, variables, etc.
- virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
-
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str)=0; //do a step, return which sequence port to go out
Ref<VisualScriptNode> get_base_node() { return Ref<VisualScriptNode>( base ); }
@@ -207,13 +220,13 @@ friend class VisualScriptInstance;
struct Variable {
PropertyInfo info;
Variant default_value;
+ bool _export;
};
Map<StringName,Function> functions;
Map<StringName,Variable> variables;
- Map<StringName,StringName> script_variable_remap;
Map<StringName,Vector<Argument> > custom_signals;
Map<Object*,VisualScriptInstance*> instances;
@@ -267,15 +280,18 @@ public:
bool has_data_connection(const StringName& p_func,int p_from_node,int p_from_port,int p_to_node,int p_to_port) const;
void get_data_connection_list(const StringName& p_func,List<DataConnection> *r_connection) const;
bool is_input_value_port_connected(const StringName& p_name,int p_node,int p_port) const;
+ bool get_input_value_port_connection_source(const StringName& p_name,int p_node,int p_port,int *r_node,int *r_port) const;
- void add_variable(const StringName& p_name,const Variant& p_default_value=Variant());
+ void add_variable(const StringName& p_name,const Variant& p_default_value=Variant(),bool p_export=false);
bool has_variable(const StringName& p_name) const;
void remove_variable(const StringName& p_name);
void set_variable_default_value(const StringName& p_name,const Variant& p_value);
Variant get_variable_default_value(const StringName& p_name) const;
void set_variable_info(const StringName& p_name,const PropertyInfo& p_info);
PropertyInfo get_variable_info(const StringName& p_name) const;
- void get_variable_list(List<StringName> *r_variables);
+ void set_variable_export(const StringName& p_name,bool p_export);
+ bool get_variable_export(const StringName& p_name) const;
+ void get_variable_list(List<StringName> *r_variables) const;
void rename_variable(const StringName& p_name,const StringName& p_new_name);
@@ -300,6 +316,7 @@ public:
virtual bool can_instance() const;
+ virtual Ref<Script> get_base_script() const;
virtual StringName get_instance_base_type() const;
virtual ScriptInstance* instance_create(Object *p_this);
virtual bool instance_has(const Object *p_this) const;
@@ -320,12 +337,16 @@ public:
virtual void get_script_signal_list(List<MethodInfo> *r_signals) const;
virtual bool get_property_default_value(const StringName& p_property,Variant& r_value) const;
- virtual void get_method_list(List<MethodInfo> *p_list) const;
+ virtual void get_script_method_list(List<MethodInfo> *p_list) const;
virtual bool has_method(const StringName& p_method) const;
virtual MethodInfo get_method_info(const StringName& p_method) const;
+ virtual void get_script_property_list(List<PropertyInfo> *p_list) const;
+#ifdef TOOLS_ENABLED
+ virtual bool are_subnodes_edited() const;
+#endif
VisualScript();
~VisualScript();
@@ -345,18 +366,10 @@ class VisualScriptInstance : public ScriptInstance {
int trash_pos;
int return_pos;
int flow_stack_size;
+ int pass_stack_size;
int node_count;
int argument_count;
bool valid;
-
- struct UnsequencedGet {
- VisualScriptNodeInstance* from;
- int from_port;
- int to_stack;
- };
-
- Vector<UnsequencedGet> unsequenced_gets;
-
};
Map<StringName,Function> functions;
@@ -366,7 +379,8 @@ class VisualScriptInstance : public ScriptInstance {
StringName source;
- Variant _call_internal(const StringName& p_method, void* p_stack,int p_stack_size, VisualScriptNodeInstance* p_node, int p_flow_stack_pos, bool p_resuming_yield,Variant::CallError &r_error);
+ void _dependency_step(VisualScriptNodeInstance* node, int p_pass, int *pass_stack, const Variant **input_args, Variant **output_args, Variant *variant_stack, Variant::CallError& r_error, String& error_str, VisualScriptNodeInstance **r_error_node);
+ Variant _call_internal(const StringName& p_method, void* p_stack,int p_stack_size, VisualScriptNodeInstance* p_node, int p_flow_stack_pos, int p_pass, bool p_resuming_yield,Variant::CallError &r_error);
//Map<StringName,Function> functions;
@@ -413,6 +427,9 @@ public:
virtual ScriptLanguage *get_language();
+ virtual RPCMode get_rpc_mode(const StringName& p_method) const;
+ virtual RPCMode get_rset_mode(const StringName& p_variable) const;
+
VisualScriptInstance();
~VisualScriptInstance();
};
@@ -432,6 +449,7 @@ friend class VisualScriptInstance;
int variant_stack_size;
VisualScriptNodeInstance *node;
int flow_stack_pos;
+ int pass;
Variant _signal_callback(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
protected:
diff --git a/modules/visual_script/visual_script_builtin_funcs.cpp b/modules/visual_script/visual_script_builtin_funcs.cpp
index e813d9ea84..24a44d3506 100644
--- a/modules/visual_script/visual_script_builtin_funcs.cpp
+++ b/modules/visual_script/visual_script_builtin_funcs.cpp
@@ -65,22 +65,48 @@ const char* VisualScriptBuiltinFunc::func_name[VisualScriptBuiltinFunc::FUNC_MAX
"bytes2var",
};
+VisualScriptBuiltinFunc::BuiltinFunc VisualScriptBuiltinFunc::find_function(const String& p_string) {
+
+ for(int i=0;i<FUNC_MAX;i++) {
+ if (p_string==func_name[i])
+ return BuiltinFunc(i);
+ }
+
+ return FUNC_MAX;
+}
+
+String VisualScriptBuiltinFunc::get_func_name(BuiltinFunc p_func) {
+
+ ERR_FAIL_INDEX_V(p_func,FUNC_MAX,String());
+ return func_name[p_func];
+}
int VisualScriptBuiltinFunc::get_output_sequence_port_count() const {
- return 1;
+ return has_input_sequence_port() ? 1 : 0;
}
bool VisualScriptBuiltinFunc::has_input_sequence_port() const{
- return true;
+ switch(func) {
+
+ case MATH_RANDOMIZE:
+ case TEXT_PRINT:
+ case TEXT_PRINTERR:
+ case TEXT_PRINTRAW:
+ return true;
+ default:
+ return false;
+
+ }
+
}
-int VisualScriptBuiltinFunc::get_input_value_port_count() const{
+int VisualScriptBuiltinFunc::get_func_argument_count(BuiltinFunc p_func) {
- switch(func) {
+ switch(p_func) {
case MATH_RANDOMIZE:
case MATH_RAND:
@@ -146,6 +172,11 @@ int VisualScriptBuiltinFunc::get_input_value_port_count() const{
}
return 0;
}
+
+int VisualScriptBuiltinFunc::get_input_value_port_count() const{
+
+ return get_func_argument_count(func);
+}
int VisualScriptBuiltinFunc::get_output_value_port_count() const{
switch(func) {
@@ -549,118 +580,124 @@ VisualScriptBuiltinFunc::BuiltinFunc VisualScriptBuiltinFunc::get_func() {
r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;\
r_error.argument=m_arg;\
r_error.expected=Variant::REAL;\
- return 0;\
+ return;\
}
-class VisualScriptNodeInstanceBuiltinFunc : public VisualScriptNodeInstance {
-public:
- VisualScriptBuiltinFunc *node;
- VisualScriptInstance *instance;
+void VisualScriptBuiltinFunc::exec_func(BuiltinFunc p_func,const Variant** p_inputs,Variant* r_return,Variant::CallError& r_error,String& r_error_str) {
- VisualScriptBuiltinFunc::BuiltinFunc func;
+ switch(p_func) {
+ case VisualScriptBuiltinFunc::MATH_SIN: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::sin(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_COS: {
- //virtual int get_working_memory_size() const { return 0; }
- //virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
- //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::cos(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_TAN: {
- virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::tan(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_SINH: {
- switch(func) {
- case VisualScriptBuiltinFunc::MATH_SIN: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::sinh(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_COSH: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::sin(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_COS: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::cosh(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_TANH: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::cos(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_TAN: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::tanh(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ASIN: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::tan(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_SINH: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::asin(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ACOS: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::sinh(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_COSH: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::acos(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ATAN: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::cosh(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_TANH: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::atan(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ATAN2: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::tanh(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ASIN: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return=Math::atan2(*p_inputs[0],*p_inputs[1]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_SQRT: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::asin(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ACOS: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::sqrt(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_FMOD: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::acos(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ATAN: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return=Math::fmod(*p_inputs[0],*p_inputs[1]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_FPOSMOD: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::atan(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ATAN2: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return=Math::fposmod(*p_inputs[0],*p_inputs[1]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_FLOOR: {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- *p_outputs[0]=Math::atan2(*p_inputs[0],*p_inputs[1]);
- } break;
- case VisualScriptBuiltinFunc::MATH_SQRT: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::floor(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_CEIL: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::sqrt(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_FMOD: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::ceil(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ROUND: {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- *p_outputs[0]=Math::fmod(*p_inputs[0],*p_inputs[1]);
- } break;
- case VisualScriptBuiltinFunc::MATH_FPOSMOD: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::round(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ABS: {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- *p_outputs[0]=Math::fposmod(*p_inputs[0],*p_inputs[1]);
- } break;
- case VisualScriptBuiltinFunc::MATH_FLOOR: {
+ if (p_inputs[0]->get_type()==Variant::INT) {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::floor(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_CEIL: {
+ int64_t i = *p_inputs[0];
+ *r_return=ABS(i);
+ } else if (p_inputs[0]->get_type()==Variant::REAL) {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::ceil(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ROUND: {
+ real_t r = *p_inputs[0];
+ *r_return=Math::abs(r);
+ } else {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::round(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ABS: {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::REAL;
+
+ }
+ } break;
+ case VisualScriptBuiltinFunc::MATH_SIGN: {
if (p_inputs[0]->get_type()==Variant::INT) {
int64_t i = *p_inputs[0];
- *p_outputs[0]=ABS(i);
+ *r_return= i < 0 ? -1 : ( i > 0 ? +1 : 0);
} else if (p_inputs[0]->get_type()==Variant::REAL) {
real_t r = *p_inputs[0];
- *p_outputs[0]=Math::abs(r);
+ *r_return= r < 0.0 ? -1.0 : ( r > 0.0 ? +1.0 : 0.0);
} else {
r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
@@ -668,410 +705,412 @@ public:
r_error.expected=Variant::REAL;
}
- } break;
- case VisualScriptBuiltinFunc::MATH_SIGN: {
+ } break;
+ case VisualScriptBuiltinFunc::MATH_POW: {
- if (p_inputs[0]->get_type()==Variant::INT) {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return=Math::pow(*p_inputs[0],*p_inputs[1]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_LOG: {
- int64_t i = *p_inputs[0];
- *p_outputs[0]= i < 0 ? -1 : ( i > 0 ? +1 : 0);
- } else if (p_inputs[0]->get_type()==Variant::REAL) {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::log(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_EXP: {
- real_t r = *p_inputs[0];
- *p_outputs[0]= r < 0.0 ? -1.0 : ( r > 0.0 ? +1.0 : 0.0);
- } else {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::exp(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ISNAN: {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::REAL;
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::is_nan(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_ISINF: {
- }
- } break;
- case VisualScriptBuiltinFunc::MATH_POW: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::is_inf(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_EASE: {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- *p_outputs[0]=Math::pow(*p_inputs[0],*p_inputs[1]);
- } break;
- case VisualScriptBuiltinFunc::MATH_LOG: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return=Math::ease(*p_inputs[0],*p_inputs[1]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_DECIMALS: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::log(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_EXP: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::step_decimals(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_STEPIFY: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::exp(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ISNAN: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return=Math::stepify(*p_inputs[0],*p_inputs[1]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_LERP: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::is_nan(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_ISINF: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ VALIDATE_ARG_NUM(2);
+ *r_return=Math::lerp(*p_inputs[0],*p_inputs[1],*p_inputs[2]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_DECTIME: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::is_inf(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_EASE: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ VALIDATE_ARG_NUM(2);
+ *r_return=Math::dectime(*p_inputs[0],*p_inputs[1],*p_inputs[2]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_RANDOMIZE: {
+ Math::randomize();
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- *p_outputs[0]=Math::ease(*p_inputs[0],*p_inputs[1]);
- } break;
- case VisualScriptBuiltinFunc::MATH_DECIMALS: {
+ } break;
+ case VisualScriptBuiltinFunc::MATH_RAND: {
+ *r_return=Math::rand();
+ } break;
+ case VisualScriptBuiltinFunc::MATH_RANDF: {
+ *r_return=Math::randf();
+ } break;
+ case VisualScriptBuiltinFunc::MATH_RANDOM: {
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::step_decimals(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_STEPIFY: {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ *r_return=Math::random(*p_inputs[0],*p_inputs[1]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_SEED: {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- *p_outputs[0]=Math::stepify(*p_inputs[0],*p_inputs[1]);
- } break;
- case VisualScriptBuiltinFunc::MATH_LERP: {
+ VALIDATE_ARG_NUM(0);
+ uint32_t seed=*p_inputs[0];
+ Math::seed(seed);
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- VALIDATE_ARG_NUM(2);
- *p_outputs[0]=Math::lerp(*p_inputs[0],*p_inputs[1],*p_inputs[2]);
- } break;
- case VisualScriptBuiltinFunc::MATH_DECTIME: {
+ } break;
+ case VisualScriptBuiltinFunc::MATH_RANDSEED: {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- VALIDATE_ARG_NUM(2);
- *p_outputs[0]=Math::dectime(*p_inputs[0],*p_inputs[1],*p_inputs[2]);
- } break;
- case VisualScriptBuiltinFunc::MATH_RANDOMIZE: {
- Math::randomize();
-
- } break;
- case VisualScriptBuiltinFunc::MATH_RAND: {
- *p_outputs[0]=Math::rand();
- } break;
- case VisualScriptBuiltinFunc::MATH_RANDF: {
- *p_outputs[0]=Math::randf();
- } break;
- case VisualScriptBuiltinFunc::MATH_RANDOM: {
+ VALIDATE_ARG_NUM(0);
+ uint32_t seed=*p_inputs[0];
+ int ret = Math::rand_from_seed(&seed);
+ Array reta;
+ reta.push_back(ret);
+ reta.push_back(seed);
+ *r_return=reta;
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- *p_outputs[0]=Math::random(*p_inputs[0],*p_inputs[1]);
- } break;
- case VisualScriptBuiltinFunc::MATH_SEED: {
+ } break;
+ case VisualScriptBuiltinFunc::MATH_DEG2RAD: {
- VALIDATE_ARG_NUM(0);
- uint32_t seed=*p_inputs[0];
- Math::seed(seed);
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::deg2rad(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_RAD2DEG: {
+
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::rad2deg(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_LINEAR2DB: {
- } break;
- case VisualScriptBuiltinFunc::MATH_RANDSEED: {
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::linear2db(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::MATH_DB2LINEAR: {
- VALIDATE_ARG_NUM(0);
- uint32_t seed=*p_inputs[0];
- int ret = Math::rand_from_seed(&seed);
- Array reta;
- reta.push_back(ret);
- reta.push_back(seed);
- *p_outputs[0]=reta;
+ VALIDATE_ARG_NUM(0);
+ *r_return=Math::db2linear(*p_inputs[0]);
+ } break;
+ case VisualScriptBuiltinFunc::LOGIC_MAX: {
- } break;
- case VisualScriptBuiltinFunc::MATH_DEG2RAD: {
+ if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT) {
+ int64_t a = *p_inputs[0];
+ int64_t b = *p_inputs[1];
+ *r_return=MAX(a,b);
+ } else {
VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::deg2rad(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_RAD2DEG: {
+ VALIDATE_ARG_NUM(1);
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::rad2deg(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_LINEAR2DB: {
+ real_t a = *p_inputs[0];
+ real_t b = *p_inputs[1];
- VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::linear2db(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::MATH_DB2LINEAR: {
+ *r_return=MAX(a,b);
+ }
+
+ } break;
+ case VisualScriptBuiltinFunc::LOGIC_MIN: {
+ if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT) {
+
+ int64_t a = *p_inputs[0];
+ int64_t b = *p_inputs[1];
+ *r_return=MIN(a,b);
+ } else {
VALIDATE_ARG_NUM(0);
- *p_outputs[0]=Math::db2linear(*p_inputs[0]);
- } break;
- case VisualScriptBuiltinFunc::LOGIC_MAX: {
+ VALIDATE_ARG_NUM(1);
- if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT) {
+ real_t a = *p_inputs[0];
+ real_t b = *p_inputs[1];
- int64_t a = *p_inputs[0];
- int64_t b = *p_inputs[1];
- *p_outputs[0]=MAX(a,b);
- } else {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
+ *r_return=MIN(a,b);
+ }
+ } break;
+ case VisualScriptBuiltinFunc::LOGIC_CLAMP: {
- real_t a = *p_inputs[0];
- real_t b = *p_inputs[1];
+ if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT && p_inputs[2]->get_type()==Variant::INT) {
- *p_outputs[0]=MAX(a,b);
- }
+ int64_t a = *p_inputs[0];
+ int64_t b = *p_inputs[1];
+ int64_t c = *p_inputs[2];
+ *r_return=CLAMP(a,b,c);
+ } else {
+ VALIDATE_ARG_NUM(0);
+ VALIDATE_ARG_NUM(1);
+ VALIDATE_ARG_NUM(2);
- } break;
- case VisualScriptBuiltinFunc::LOGIC_MIN: {
+ real_t a = *p_inputs[0];
+ real_t b = *p_inputs[1];
+ real_t c = *p_inputs[2];
- if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT) {
+ *r_return=CLAMP(a,b,c);
+ }
+ } break;
+ case VisualScriptBuiltinFunc::LOGIC_NEAREST_PO2: {
- int64_t a = *p_inputs[0];
- int64_t b = *p_inputs[1];
- *p_outputs[0]=MIN(a,b);
- } else {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
+ VALIDATE_ARG_NUM(0);
+ int64_t num = *p_inputs[0];
+ *r_return = nearest_power_of_2(num);
+ } break;
+ case VisualScriptBuiltinFunc::OBJ_WEAKREF: {
- real_t a = *p_inputs[0];
- real_t b = *p_inputs[1];
+ if (p_inputs[0]->get_type()!=Variant::OBJECT) {
- *p_outputs[0]=MIN(a,b);
- }
- } break;
- case VisualScriptBuiltinFunc::LOGIC_CLAMP: {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::OBJECT;
- if (p_inputs[0]->get_type()==Variant::INT && p_inputs[1]->get_type()==Variant::INT && p_inputs[2]->get_type()==Variant::INT) {
+ return;
- int64_t a = *p_inputs[0];
- int64_t b = *p_inputs[1];
- int64_t c = *p_inputs[2];
- *p_outputs[0]=CLAMP(a,b,c);
- } else {
- VALIDATE_ARG_NUM(0);
- VALIDATE_ARG_NUM(1);
- VALIDATE_ARG_NUM(2);
+ }
+
+ if (p_inputs[0]->is_ref()) {
- real_t a = *p_inputs[0];
- real_t b = *p_inputs[1];
- real_t c = *p_inputs[2];
+ REF r = *p_inputs[0];
+ if (!r.is_valid()) {
- *p_outputs[0]=CLAMP(a,b,c);
+ return;
}
- } break;
- case VisualScriptBuiltinFunc::LOGIC_NEAREST_PO2: {
- VALIDATE_ARG_NUM(0);
- int64_t num = *p_inputs[0];
- *p_outputs[0] = nearest_power_of_2(num);
- } break;
- case VisualScriptBuiltinFunc::OBJ_WEAKREF: {
+ Ref<WeakRef> wref = memnew( WeakRef );
+ wref->set_ref(r);
+ *r_return=wref;
+ } else {
+ Object *obj = *p_inputs[0];
+ if (!obj) {
- if (p_inputs[0]->get_type()!=Variant::OBJECT) {
+ return;
+ }
+ Ref<WeakRef> wref = memnew( WeakRef );
+ wref->set_obj(obj);
+ *r_return=wref;
+ }
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::OBJECT;
- return 0;
- }
- if (p_inputs[0]->is_ref()) {
+ } break;
+ case VisualScriptBuiltinFunc::FUNC_FUNCREF: {
- REF r = *p_inputs[0];
- if (!r.is_valid()) {
+ if (p_inputs[0]->get_type()!=Variant::OBJECT) {
- return 0;
- }
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::OBJECT;
- Ref<WeakRef> wref = memnew( WeakRef );
- wref->set_ref(r);
- *p_outputs[0]=wref;
- } else {
- Object *obj = *p_inputs[0];
- if (!obj) {
-
- return 0;
- }
- Ref<WeakRef> wref = memnew( WeakRef );
- wref->set_obj(obj);
- *p_outputs[0]=wref;
- }
+ return;
+ }
+ if (p_inputs[1]->get_type()!=Variant::STRING && p_inputs[1]->get_type()!=Variant::NODE_PATH) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=1;
+ r_error.expected=Variant::STRING;
+ return;
- } break;
- case VisualScriptBuiltinFunc::FUNC_FUNCREF: {
+ }
- if (p_inputs[0]->get_type()!=Variant::OBJECT) {
+ Ref<FuncRef> fr = memnew( FuncRef);
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::OBJECT;
+ fr->set_instance(*p_inputs[0]);
+ fr->set_function(*p_inputs[1]);
- return 0;
+ *r_return=fr;
- }
- if (p_inputs[1]->get_type()!=Variant::STRING && p_inputs[1]->get_type()!=Variant::NODE_PATH) {
+ } break;
+ case VisualScriptBuiltinFunc::TYPE_CONVERT: {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=1;
- r_error.expected=Variant::STRING;
+ VALIDATE_ARG_NUM(1);
+ int type=*p_inputs[1];
+ if (type<0 || type>=Variant::VARIANT_MAX) {
- return 0;
+ r_error_str=RTR("Invalid type argument to convert(), use TYPE_* constants.");
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::INT;
+ return;
+
+ } else {
- }
- Ref<FuncRef> fr = memnew( FuncRef);
+ *r_return=Variant::construct(Variant::Type(type),p_inputs,1,r_error);
+ }
+ } break;
+ case VisualScriptBuiltinFunc::TYPE_OF: {
- fr->set_instance(*p_inputs[0]);
- fr->set_function(*p_inputs[1]);
- *p_outputs[0]=fr;
+ *r_return = p_inputs[0]->get_type();
- } break;
- case VisualScriptBuiltinFunc::TYPE_CONVERT: {
+ } break;
+ case VisualScriptBuiltinFunc::TYPE_EXISTS: {
- VALIDATE_ARG_NUM(1);
- int type=*p_inputs[1];
- if (type<0 || type>=Variant::VARIANT_MAX) {
- *p_outputs[0]=RTR("Invalid type argument to convert(), use TYPE_* constants.");
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::INT;
- return 0;
+ *r_return = ObjectTypeDB::type_exists(*p_inputs[0]);
- } else {
+ } break;
+ case VisualScriptBuiltinFunc::TEXT_STR: {
+ String str = *p_inputs[0];
- *p_outputs[0]=Variant::construct(Variant::Type(type),p_inputs,1,r_error);
- }
- } break;
- case VisualScriptBuiltinFunc::TYPE_OF: {
+ *r_return=str;
+ } break;
+ case VisualScriptBuiltinFunc::TEXT_PRINT: {
- *p_outputs[0] = p_inputs[0]->get_type();
+ String str = *p_inputs[0];
+ print_line(str);
- } break;
- case VisualScriptBuiltinFunc::TYPE_EXISTS: {
+ } break;
- *p_outputs[0] = ObjectTypeDB::type_exists(*p_inputs[0]);
+ case VisualScriptBuiltinFunc::TEXT_PRINTERR: {
- } break;
- case VisualScriptBuiltinFunc::TEXT_STR: {
+ String str = *p_inputs[0];
- String str = *p_inputs[0];
+ //str+="\n";
+ OS::get_singleton()->printerr("%s\n",str.utf8().get_data());
- *p_outputs[0]=str;
- } break;
- case VisualScriptBuiltinFunc::TEXT_PRINT: {
+ } break;
+ case VisualScriptBuiltinFunc::TEXT_PRINTRAW: {
+ String str = *p_inputs[0];
- String str = *p_inputs[0];
- print_line(str);
+ //str+="\n";
+ OS::get_singleton()->print("%s",str.utf8().get_data());
- } break;
+ } break;
+ case VisualScriptBuiltinFunc::VAR_TO_STR: {
- case VisualScriptBuiltinFunc::TEXT_PRINTERR: {
+ String vars;
+ VariantWriter::write_to_string(*p_inputs[0],vars);
+ *r_return=vars;
+ } break;
+ case VisualScriptBuiltinFunc::STR_TO_VAR: {
- String str = *p_inputs[0];
+ if (p_inputs[0]->get_type()!=Variant::STRING) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::STRING;
- //str+="\n";
- OS::get_singleton()->printerr("%s\n",str.utf8().get_data());
+ return;
+ }
+ VariantParser::StreamString ss;
+ ss.s=*p_inputs[0];
- } break;
- case VisualScriptBuiltinFunc::TEXT_PRINTRAW: {
- String str = *p_inputs[0];
+ String errs;
+ int line;
+ Error err = VariantParser::parse(&ss,*r_return,errs,line);
- //str+="\n";
- OS::get_singleton()->print("%s",str.utf8().get_data());
+ if (err!=OK) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::STRING;
+ *r_return="Parse error at line "+itos(line)+": "+errs;
+ return;
+ }
+ } break;
+ case VisualScriptBuiltinFunc::VAR_TO_BYTES: {
- } break;
- case VisualScriptBuiltinFunc::VAR_TO_STR: {
- String vars;
- VariantWriter::write_to_string(*p_inputs[0],vars);
- *p_outputs[0]=vars;
- } break;
- case VisualScriptBuiltinFunc::STR_TO_VAR: {
+ ByteArray barr;
+ int len;
+ Error err = encode_variant(*p_inputs[0],NULL,len);
+ if (err) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::NIL;
+ r_error_str="Unexpected error encoding variable to bytes, likely unserializable type found (Object or RID).";
+ return;
+ }
- if (p_inputs[0]->get_type()!=Variant::STRING) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::STRING;
+ barr.resize(len);
+ {
+ ByteArray::Write w = barr.write();
+ encode_variant(*p_inputs[0],w.ptr(),len);
- return 0;
- }
+ }
+ *r_return=barr;
+ } break;
+ case VisualScriptBuiltinFunc::BYTES_TO_VAR: {
- VariantParser::StreamString ss;
- ss.s=*p_inputs[0];
+ if (p_inputs[0]->get_type()!=Variant::RAW_ARRAY) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::RAW_ARRAY;
- String errs;
- int line;
- Error err = VariantParser::parse(&ss,*p_outputs[0],errs,line);
+ return;
+ }
+ ByteArray varr=*p_inputs[0];
+ Variant ret;
+ {
+ ByteArray::Read r=varr.read();
+ Error err = decode_variant(ret,r.ptr(),varr.size(),NULL);
if (err!=OK) {
+ r_error_str=RTR("Not enough bytes for decoding bytes, or invalid format.");
r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
r_error.argument=0;
- r_error.expected=Variant::STRING;
- *p_outputs[0]="Parse error at line "+itos(line)+": "+errs;
- return 0;
+ r_error.expected=Variant::RAW_ARRAY;
+ return;
}
- } break;
- case VisualScriptBuiltinFunc::VAR_TO_BYTES: {
+ }
+ *r_return=ret;
- ByteArray barr;
- int len;
- Error err = encode_variant(*p_inputs[0],NULL,len);
- if (err) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::NIL;
- *p_outputs[0]="Unexpected error encoding variable to bytes, likely unserializable type found (Object or RID).";
- return 0;
- }
+ } break;
+ default: {}
+ }
- barr.resize(len);
- {
- ByteArray::Write w = barr.write();
- encode_variant(*p_inputs[0],w.ptr(),len);
+}
- }
- *p_outputs[0]=barr;
- } break;
- case VisualScriptBuiltinFunc::BYTES_TO_VAR: {
- if (p_inputs[0]->get_type()!=Variant::RAW_ARRAY) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::RAW_ARRAY;
+class VisualScriptNodeInstanceBuiltinFunc : public VisualScriptNodeInstance {
+public:
- return 0;
- }
+ VisualScriptBuiltinFunc *node;
+ VisualScriptInstance *instance;
- ByteArray varr=*p_inputs[0];
- Variant ret;
- {
- ByteArray::Read r=varr.read();
- Error err = decode_variant(ret,r.ptr(),varr.size(),NULL);
- if (err!=OK) {
- *p_outputs[0]=RTR("Not enough bytes for decoding bytes, or invalid format.");
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
- r_error.argument=0;
- r_error.expected=Variant::RAW_ARRAY;
- return 0;
- }
+ VisualScriptBuiltinFunc::BuiltinFunc func;
- }
- *p_outputs[0]=ret;
+ //virtual int get_working_memory_size() const { return 0; }
+ //virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
+ //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
- } break;
- default: {}
- }
+ VisualScriptBuiltinFunc::exec_func(func,p_inputs,p_outputs[0],r_error,r_error_str);
return 0;
}
diff --git a/modules/visual_script/visual_script_builtin_funcs.h b/modules/visual_script/visual_script_builtin_funcs.h
index ebf227a192..000230d84f 100644
--- a/modules/visual_script/visual_script_builtin_funcs.h
+++ b/modules/visual_script/visual_script_builtin_funcs.h
@@ -68,6 +68,11 @@ public:
FUNC_MAX
};
+ static int get_func_argument_count(BuiltinFunc p_func);
+ static String get_func_name(BuiltinFunc p_func);
+ static void exec_func(BuiltinFunc p_func, const Variant** p_inputs, Variant* r_return, Variant::CallError& r_error, String& r_error_str);
+ static BuiltinFunc find_function(const String& p_string);
+
private:
static const char* func_name[FUNC_MAX];
BuiltinFunc func;
diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp
index 412865fbfe..acdcec7ae5 100644
--- a/modules/visual_script/visual_script_editor.cpp
+++ b/modules/visual_script/visual_script_editor.cpp
@@ -3,7 +3,9 @@
#include "visual_script_nodes.h"
#include "visual_script_flow_control.h"
#include "visual_script_func_nodes.h"
+#include "visual_script_expression.h"
#include "os/input.h"
+#include "tools/editor/editor_resource_preview.h"
#include "os/keyboard.h"
#ifdef TOOLS_ENABLED
@@ -241,6 +243,11 @@ protected:
return true;
}
+ if (String(p_name)=="export") {
+ script->set_variable_export(var,p_value);
+ return true;
+ }
+
return false;
}
@@ -270,6 +277,11 @@ protected:
return true;
}
+ if (String(p_name)=="export") {
+ r_ret=script->get_variable_export(var);
+ return true;
+ }
+
return false;
}
void _get_property_list( List<PropertyInfo> *p_list) const {
@@ -285,6 +297,7 @@ protected:
p_list->push_back(PropertyInfo(script->get_variable_info(var).type,"value",script->get_variable_info(var).hint,script->get_variable_info(var).hint_string,PROPERTY_USAGE_DEFAULT));
p_list->push_back(PropertyInfo(Variant::INT,"hint",PROPERTY_HINT_ENUM,"None,Range,ExpRange,Enum,ExpEasing,Length,SpriteFrame,KeyAccel,BitFlags,AllFlags,File,Dir,GlobalFile,GlobalDir,ResourceType,MultilineText"));
p_list->push_back(PropertyInfo(Variant::STRING,"hint_string"));
+ p_list->push_back(PropertyInfo(Variant::BOOL,"export"));
}
@@ -301,9 +314,45 @@ public:
};
static Color _color_from_type(Variant::Type p_type) {
-
Color color;
- color.set_hsv(p_type/float(Variant::VARIANT_MAX),0.7,0.7);
+ switch(p_type) {
+ case Variant::NIL: color = Color::html("69ecbd"); break;
+
+ case Variant::BOOL: color = Color::html("8da6f0"); break;
+ case Variant::INT: color = Color::html("7dc6ef"); break;
+ case Variant::REAL: color = Color::html("61daf4"); break;
+ case Variant::STRING: color = Color::html("6ba7ec"); break;
+
+ case Variant::VECTOR2: color = Color::html("bd91f1"); break;
+ case Variant::RECT2: color = Color::html("f191a5"); break;
+ case Variant::VECTOR3: color = Color::html("d67dee"); break;
+ case Variant::MATRIX32: color = Color::html("c4ec69"); break;
+ case Variant::PLANE: color = Color::html("f77070"); break;
+ case Variant::QUAT: color = Color::html("ec69a3"); break;
+ case Variant::_AABB: color = Color::html("ee7991"); break;
+ case Variant::MATRIX3: color = Color::html("e3ec69"); break;
+ case Variant::TRANSFORM: color = Color::html("ecd669"); break;
+
+ case Variant::COLOR: color = Color::html("9dff70"); break;
+ case Variant::IMAGE: color = Color::html("93f1b9"); break;
+ case Variant::NODE_PATH: color = Color::html("6993ec"); break;
+ case Variant::_RID: color = Color::html("69ec9a"); break;
+ case Variant::OBJECT: color = Color::html("79f3e8"); break;
+ case Variant::INPUT_EVENT: color = Color::html("adf18f"); break;
+ case Variant::DICTIONARY: color = Color::html("77edb1"); break;
+
+ case Variant::ARRAY: color = Color::html("e0e0e0"); break;
+ case Variant::RAW_ARRAY: color = Color::html("aaf4c8"); break;
+ case Variant::INT_ARRAY: color = Color::html("afdcf5"); break;
+ case Variant::REAL_ARRAY: color = Color::html("97e7f8"); break;
+ case Variant::STRING_ARRAY: color = Color::html("9dc4f2"); break;
+ case Variant::VECTOR2_ARRAY: color = Color::html("d1b3f5"); break;
+ case Variant::VECTOR3_ARRAY: color = Color::html("df9bf2"); break;
+ case Variant::COLOR_ARRAY: color = Color::html("e9ff97"); break;
+
+ default:
+ color.set_hsv(p_type/float(Variant::VARIANT_MAX),0.7,0.7);
+ }
return color;
}
@@ -347,6 +396,8 @@ void VisualScriptEditor::_update_graph_connections() {
void VisualScriptEditor::_update_graph(int p_only_id) {
+ if (updating_graph)
+ return;
updating_graph=true;
@@ -387,7 +438,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
Control::get_icon("MiniVector2","EditorIcons"),
Control::get_icon("MiniRect2","EditorIcons"),
Control::get_icon("MiniVector3","EditorIcons"),
- Control::get_icon("MiniMatrix2","EditorIcons"),
+ Control::get_icon("MiniMatrix32","EditorIcons"),
Control::get_icon("MiniPlane","EditorIcons"),
Control::get_icon("MiniQuat","EditorIcons"),
Control::get_icon("MiniAabb","EditorIcons"),
@@ -438,6 +489,8 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
gnode->set_modulate(EditorSettings::get_singleton()->get("visual_script_editor/color_"+node->get_category()));
}
+
+
gnode->set_meta("__vnode",node);
gnode->set_name(itos(E->get()));
gnode->connect("dragged",this,"_node_moved",varray(E->get()));
@@ -449,9 +502,31 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
gnode->set_show_close_button(true);
}
- Label *text = memnew( Label );
- text->set_text(node->get_text());
- gnode->add_child(text);
+
+ if (node->cast_to<VisualScriptExpression>()) {
+
+ LineEdit *line_edit = memnew( LineEdit );
+ line_edit->set_text(node->get_text());
+ line_edit->set_expand_to_text_length(true);
+ line_edit->add_font_override("font",get_font("source","EditorFonts"));
+ gnode->add_child(line_edit);
+ line_edit->connect("text_changed",this,"_expression_text_changed",varray(E->get()));
+ } else {
+ Label *text = memnew( Label );
+ text->set_text(node->get_text());
+ gnode->add_child(text);
+ }
+
+
+ if (node->cast_to<VisualScriptComment>()) {
+ Ref<VisualScriptComment> vsc=node;
+ gnode->set_comment(true);
+ gnode->set_resizeable(true);
+ gnode->set_custom_minimum_size(vsc->get_size()*EDSCALE);
+ gnode->connect("resize_request",this,"_comment_node_resized",varray(E->get()));
+
+ }
+
int slot_idx=0;
@@ -460,24 +535,34 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
gnode->set_offset(pos*EDSCALE);
slot_idx++;
+
+ int mixed_seq_ports=0;
+
if (!single_seq_output) {
- for(int i=0;i<node->get_output_sequence_port_count();i++) {
- Label *text2 = memnew( Label );
- text2->set_text(node->get_output_sequence_port_text(i));
- text2->set_align(Label::ALIGN_RIGHT);
- gnode->add_child(text2);
- gnode->set_slot(slot_idx,false,0,Color(),true,TYPE_SEQUENCE,Color(1,1,1,1),seq_port,seq_port);
- slot_idx++;
+ if (node->has_mixed_input_and_sequence_ports()) {
+ mixed_seq_ports=node->get_output_sequence_port_count();
+ } else {
+ for(int i=0;i<node->get_output_sequence_port_count();i++) {
+
+ Label *text2 = memnew( Label );
+ text2->set_text(node->get_output_sequence_port_text(i));
+ text2->set_align(Label::ALIGN_RIGHT);
+ gnode->add_child(text2);
+ gnode->set_slot(slot_idx,false,0,Color(),true,TYPE_SEQUENCE,Color(1,1,1,1),seq_port,seq_port);
+ slot_idx++;
+ }
}
}
- for(int i=0;i<MAX(node->get_output_value_port_count(),node->get_input_value_port_count());i++) {
+ for(int i=0;i<MAX(node->get_output_value_port_count(),MAX(mixed_seq_ports,node->get_input_value_port_count()));i++) {
bool left_ok=false;
Variant::Type left_type=Variant::NIL;
String left_name;
+
+
if (i<node->get_input_value_port_count()) {
PropertyInfo pi = node->get_input_value_port_info(i);
left_ok=true;
@@ -489,8 +574,8 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
Variant::Type right_type=Variant::NIL;
String right_name;
- if (i<node->get_output_value_port_count()) {
- PropertyInfo pi = node->get_output_value_port_info(i);
+ if (i>=mixed_seq_ports && i<node->get_output_value_port_count()+mixed_seq_ports) {
+ PropertyInfo pi = node->get_output_value_port_info(i-mixed_seq_ports);
right_ok=true;
right_type=pi.type;
right_name=pi.name;
@@ -514,6 +599,8 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
hbc->add_child(memnew(Label(left_name)));
if (left_type!=Variant::NIL && !script->is_input_value_port_connected(edited_func,E->get(),i)) {
+
+ PropertyInfo pi = node->get_input_value_port_info(i);
Button *button = memnew( Button );
Variant value = node->get_default_input_value(i);
if (value.get_type()!=left_type) {
@@ -524,7 +611,24 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
value = Variant::construct(left_type,&existingp,1,ce,false);
}
- button->set_text(value);
+ if (left_type==Variant::COLOR) {
+ button->set_custom_minimum_size(Size2(30,0)*EDSCALE);
+ button->connect("draw",this,"_draw_color_over_button",varray(button,value));
+ } else if (left_type==Variant::OBJECT && Ref<Resource>(value).is_valid()) {
+
+ Ref<Resource> res = value;
+ Array arr;
+ arr.push_back(button->get_instance_ID());
+ arr.push_back(String(value));
+ EditorResourcePreview::get_singleton()->queue_edited_resource_preview(res,this,"_button_resource_previewed",arr);
+
+ } else if (pi.type==Variant::INT && pi.hint==PROPERTY_HINT_ENUM){
+
+ button->set_text(pi.hint_string.get_slice(",",value));
+ } else {
+
+ button->set_text(value);
+ }
button->connect("pressed",this,"_default_value_edited",varray(button,E->get(),i));
hbc->add_child(button);
}
@@ -536,6 +640,14 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
hbc->add_spacer();
+ if (i<mixed_seq_ports) {
+
+ Label *text2 = memnew( Label );
+ text2->set_text(node->get_output_sequence_port_text(i));
+ text2->set_align(Label::ALIGN_RIGHT);
+ hbc->add_child(text2);
+ }
+
if (right_ok) {
hbc->add_child(memnew(Label(right_name)));
@@ -555,12 +667,20 @@ void VisualScriptEditor::_update_graph(int p_only_id) {
gnode->add_child(hbc);
- gnode->set_slot(slot_idx,left_ok,left_type,_color_from_type(left_type),right_ok,right_type,_color_from_type(right_type));
+ if (i<mixed_seq_ports) {
+ gnode->set_slot(slot_idx,left_ok,left_type,_color_from_type(left_type),true,TYPE_SEQUENCE,Color(1,1,1,1),Ref<Texture>(),seq_port);
+ } else {
+ gnode->set_slot(slot_idx,left_ok,left_type,_color_from_type(left_type),right_ok,right_type,_color_from_type(right_type));
+ }
slot_idx++;
}
graph->add_child(gnode);
+
+ if (gnode->is_comment()) {
+ graph->move_child(gnode,0);
+ }
}
_update_graph_connections();
@@ -608,12 +728,48 @@ void VisualScriptEditor::_update_members() {
variables->add_button(0,Control::get_icon("Add","EditorIcons"));
variables->set_custom_bg_color(0,Control::get_color("prop_section","Editor"));
+ Ref<Texture> type_icons[Variant::VARIANT_MAX]={
+ Control::get_icon("MiniVariant","EditorIcons"),
+ Control::get_icon("MiniBoolean","EditorIcons"),
+ Control::get_icon("MiniInteger","EditorIcons"),
+ Control::get_icon("MiniFloat","EditorIcons"),
+ Control::get_icon("MiniString","EditorIcons"),
+ Control::get_icon("MiniVector2","EditorIcons"),
+ Control::get_icon("MiniRect2","EditorIcons"),
+ Control::get_icon("MiniVector3","EditorIcons"),
+ Control::get_icon("MiniMatrix32","EditorIcons"),
+ Control::get_icon("MiniPlane","EditorIcons"),
+ Control::get_icon("MiniQuat","EditorIcons"),
+ Control::get_icon("MiniAabb","EditorIcons"),
+ Control::get_icon("MiniMatrix3","EditorIcons"),
+ Control::get_icon("MiniTransform","EditorIcons"),
+ Control::get_icon("MiniColor","EditorIcons"),
+ Control::get_icon("MiniImage","EditorIcons"),
+ Control::get_icon("MiniPath","EditorIcons"),
+ Control::get_icon("MiniRid","EditorIcons"),
+ Control::get_icon("MiniObject","EditorIcons"),
+ Control::get_icon("MiniInput","EditorIcons"),
+ Control::get_icon("MiniDictionary","EditorIcons"),
+ Control::get_icon("MiniArray","EditorIcons"),
+ Control::get_icon("MiniRawArray","EditorIcons"),
+ Control::get_icon("MiniIntArray","EditorIcons"),
+ Control::get_icon("MiniFloatArray","EditorIcons"),
+ Control::get_icon("MiniStringArray","EditorIcons"),
+ Control::get_icon("MiniVector2Array","EditorIcons"),
+ Control::get_icon("MiniVector3Array","EditorIcons"),
+ Control::get_icon("MiniColorArray","EditorIcons")
+ };
List<StringName> var_names;
script->get_variable_list(&var_names);
for (List<StringName>::Element *E=var_names.front();E;E=E->next()) {
TreeItem *ti = members->create_item(variables);
+
ti->set_text(0,E->get());
+ Variant var = script->get_variable_default_value(E->get());
+ ti->set_suffix(0,"="+String(var));
+ ti->set_icon(0,type_icons[script->get_variable_info(E->get()).type]);
+
ti->set_selectable(0,true);
ti->set_editable(0,true);
ti->add_button(0,Control::get_icon("Edit","EditorIcons"),0);
@@ -1053,6 +1209,30 @@ void VisualScriptEditor::_member_button(Object *p_item, int p_column, int p_butt
}
}
+void VisualScriptEditor::_expression_text_changed(const String& p_text,int p_id) {
+
+ Ref<VisualScriptExpression> vse = script->get_node(edited_func,p_id);
+ if (!vse.is_valid())
+ return;
+
+
+ updating_graph=true;
+
+ undo_redo->create_action(TTR("Change Expression"),UndoRedo::MERGE_ENDS);
+ undo_redo->add_do_property(vse.ptr(),"expression",p_text);
+ undo_redo->add_undo_property(vse.ptr(),"expression",vse->get("expression"));
+ undo_redo->add_do_method(this,"_update_graph",p_id);
+ undo_redo->add_undo_method(this,"_update_graph",p_id);
+ undo_redo->commit_action();
+
+ Node *node = graph->get_node(itos(p_id));
+ if (node->cast_to<Control>())
+ node->cast_to<Control>()->set_size(Vector2(1,1)); //shrink if text is smaller
+
+ updating_graph=false;
+
+}
+
void VisualScriptEditor::_available_node_doubleclicked() {
TreeItem *item = nodes->get_selected();
@@ -1385,6 +1565,8 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2& p_point,const Variant& p
String(d["type"])=="visual_script_variable_drag" ||
String(d["type"])=="visual_script_signal_drag" ||
String(d["type"])=="obj_property" ||
+ String(d["type"])=="resource" ||
+ String(d["type"])=="files" ||
String(d["type"])=="nodes"
) ) {
@@ -1392,18 +1574,27 @@ bool VisualScriptEditor::can_drop_data_fw(const Point2& p_point,const Variant& p
if (String(d["type"])=="obj_property") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor*>(this)->_show_hint("Hold Meta to drop a Setter, Shift+Meta to drop a Setter and copy the value.");
+ const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Meta to drop a Getter. Hold Shift to drop a generic signature."));
#else
- const_cast<VisualScriptEditor*>(this)->_show_hint("Hold Ctrl to drop a Setter, Shift+Ctrl to drop a Setter and copy the value.");
+ const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."));
+#endif
+ }
+
+ if (String(d["type"])=="nodes") {
+
+#ifdef OSX_ENABLED
+ const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Meta to drop a simple reference to the node."));
+#else
+ const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Ctrl to drop a simple reference to the node."));
#endif
}
if (String(d["type"])=="visual_script_variable_drag") {
#ifdef OSX_ENABLED
- const_cast<VisualScriptEditor*>(this)->_show_hint("Hold Meta to drop a Variable Setter.");
+ const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Meta to drop a Variable Setter."));
#else
- const_cast<VisualScriptEditor*>(this)->_show_hint("Hold Ctrl to drop a Variable Setter.");
+ const_cast<VisualScriptEditor*>(this)->_show_hint(TTR("Hold Ctrl to drop a Variable Setter."));
#endif
}
@@ -1442,6 +1633,8 @@ static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const R
#endif
+
+
void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_data,Control* p_from){
if (p_from==graph) {
@@ -1531,15 +1724,17 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
ofs/=EDSCALE;
- Ref<VisualScriptScriptCall> vnode;
+ Ref<VisualScriptFunctionCall> vnode;
vnode.instance();
- vnode->set_call_mode(VisualScriptScriptCall::CALL_MODE_SELF);
- vnode->set_function(d["function"]);
+ vnode->set_call_mode(VisualScriptFunctionCall::CALL_MODE_SELF);
int new_id = script->get_available_id();
undo_redo->create_action(TTR("Add Node"));
undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs);
+ undo_redo->add_do_method(vnode.ptr(),"set_base_type",script->get_instance_base_type());
+ undo_redo->add_do_method(vnode.ptr(),"set_function",d["function"]);
+
undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id);
undo_redo->add_do_method(this,"_update_graph");
undo_redo->add_undo_method(this,"_update_graph");
@@ -1550,6 +1745,7 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
graph->set_selected(node);
_node_selected(node);
}
+
}
@@ -1580,8 +1776,90 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
if (node) {
graph->set_selected(node);
_node_selected(node);
+ }
+ }
+
+ if (d.has("type") && String(d["type"])=="resource") {
+
+ Vector2 ofs = graph->get_scroll_ofs() + p_point;
+ if (graph->is_using_snap()) {
+ int snap = graph->get_snap();
+ ofs = ofs.snapped(Vector2(snap,snap));
+ }
+
+ ofs/=EDSCALE;
+
+ Ref<VisualScriptPreload> prnode;
+ prnode.instance();
+ prnode->set_preload(d["resource"]);
+
+ int new_id = script->get_available_id();
+
+ undo_redo->create_action(TTR("Add Preload Node"));
+ undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,prnode,ofs);
+ undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id);
+ undo_redo->add_do_method(this,"_update_graph");
+ undo_redo->add_undo_method(this,"_update_graph");
+ undo_redo->commit_action();
+
+ Node* node = graph->get_node(itos(new_id));
+ if (node) {
+ graph->set_selected(node);
+ _node_selected(node);
+ }
+ }
+
+ if (d.has("type") && String(d["type"])=="files") {
+
+ Vector2 ofs = graph->get_scroll_ofs() + p_point;
+ if (graph->is_using_snap()) {
+ int snap = graph->get_snap();
+ ofs = ofs.snapped(Vector2(snap,snap));
+ }
+
+ ofs/=EDSCALE;
+
+ Array files = d["files"];
+
+ List<int> new_ids;
+ int new_id = script->get_available_id();
+
+ if (files.size()) {
+ undo_redo->create_action(TTR("Add Preload Node"));
+
+ for(int i=0;i<files.size();i++) {
+
+ Ref<Resource> res = ResourceLoader::load(files[i]);
+ if (!res.is_valid())
+ continue;
+
+ Ref<VisualScriptPreload> prnode;
+ prnode.instance();
+ prnode->set_preload(res);
+
+ undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,prnode,ofs);
+ undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id);
+ new_ids.push_back(new_id);
+ new_id++;
+ ofs+=Vector2(20,20)*EDSCALE;
+ }
+
+
+ undo_redo->add_do_method(this,"_update_graph");
+ undo_redo->add_undo_method(this,"_update_graph");
+ undo_redo->commit_action();
+ }
+
+ for(List<int>::Element *E=new_ids.front();E;E=E->next()) {
+
+ Node* node = graph->get_node(itos(E->get()));
+ if (node) {
+ graph->set_selected(node);
+ _node_selected(node);
+ }
}
}
+
if (d.has("type") && String(d["type"])=="nodes") {
Node* sn = _find_script_node(get_tree()->get_edited_scene_root(),get_tree()->get_edited_scene_root(),script);
@@ -1592,6 +1870,14 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
return;
}
+
+#ifdef OSX_ENABLED
+ bool use_node = Input::get_singleton()->is_key_pressed(KEY_META);
+#else
+ bool use_node = Input::get_singleton()->is_key_pressed(KEY_CONTROL);
+#endif
+
+
Array nodes = d["nodes"];
Vector2 ofs = graph->get_scroll_ofs() + p_point;
@@ -1605,6 +1891,10 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
undo_redo->create_action(TTR("Add Node(s) From Tree"));
int base_id = script->get_available_id();
+ if (nodes.size()>1) {
+ use_node=true;
+ }
+
for(int i=0;i<nodes.size();i++) {
NodePath np = nodes[i];
@@ -1613,10 +1903,30 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
continue;
}
- Ref<VisualScriptSceneNode> scene_node;
- scene_node.instance();
- scene_node->set_node_path(sn->get_path_to(node));
- undo_redo->add_do_method(script.ptr(),"add_node",edited_func,base_id,scene_node,ofs);
+ Ref<VisualScriptNode> n;
+
+ if (use_node) {
+ Ref<VisualScriptSceneNode> scene_node;
+ scene_node.instance();
+ scene_node->set_node_path(sn->get_path_to(node));
+ n=scene_node;
+
+
+ } else {
+ Ref<VisualScriptFunctionCall> call;
+ call.instance();
+ call->set_call_mode(VisualScriptFunctionCall::CALL_MODE_NODE_PATH);
+ call->set_base_path(sn->get_path_to(node));;
+ call->set_base_type(node->get_type());
+ n=call;
+
+ method_select->select_method_from_instance(node);
+ selecting_method_id=base_id;
+
+ }
+
+
+ undo_redo->add_do_method(script.ptr(),"add_node",edited_func,base_id,n,ofs);
undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,base_id);
base_id++;
@@ -1634,9 +1944,9 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
Node* sn = _find_script_node(get_tree()->get_edited_scene_root(),get_tree()->get_edited_scene_root(),script);
- if (!sn) {
- //EditorNode::get_singleton()->show_warning("Can't drop properties because script '"+get_name()+"' is not used in this scene.");
- //return;
+ if (!sn && !Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
+ EditorNode::get_singleton()->show_warning("Can't drop properties because script '"+get_name()+"' is not used in this scene.\nDrop holding 'Shift' to just copy the signature.");
+ return;
}
Object *obj=d["object"];
@@ -1654,36 +1964,33 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
ofs/=EDSCALE;
#ifdef OSX_ENABLED
- bool use_set = Input::get_singleton()->is_key_pressed(KEY_META);
+ bool use_get = Input::get_singleton()->is_key_pressed(KEY_META);
#else
- bool use_set = Input::get_singleton()->is_key_pressed(KEY_CONTROL);
+ bool use_get = Input::get_singleton()->is_key_pressed(KEY_CONTROL);
#endif
- bool use_value = Input::get_singleton()->is_key_pressed(KEY_SHIFT);
-
- if (!node) {
+ if (!node || Input::get_singleton()->is_key_pressed(KEY_SHIFT)) {
- if (use_set)
- undo_redo->create_action(TTR("Add Setter Property"));
- else
+ if (use_get)
undo_redo->create_action(TTR("Add Getter Property"));
+ else
+ undo_redo->create_action(TTR("Add Setter Property"));
int base_id = script->get_available_id();
Ref<VisualScriptNode> vnode;
- if (use_set) {
+ if (!use_get) {
Ref<VisualScriptPropertySet> pset;
pset.instance();
pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_INSTANCE);
pset->set_base_type(obj->get_type());
- pset->set_property(d["property"]);
- if (use_value) {
+ /*if (use_value) {
pset->set_use_builtin_value(true);
pset->set_builtin_value(d["value"]);
- }
+ }*/
vnode=pset;
} else {
@@ -1691,12 +1998,17 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
pget.instance();
pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_INSTANCE);
pget->set_base_type(obj->get_type());
- pget->set_property(d["property"]);
+
vnode=pget;
}
undo_redo->add_do_method(script.ptr(),"add_node",edited_func,base_id,vnode,ofs);
+ undo_redo->add_do_method(vnode.ptr(),"set_property",d["property"]);
+ if (!use_get) {
+ undo_redo->add_do_method(vnode.ptr(),"set_default_input_value",0,d["value"]);
+ }
+
undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,base_id);
undo_redo->add_do_method(this,"_update_graph");
@@ -1707,25 +2019,24 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
- if (use_set)
- undo_redo->create_action(TTR("Add Setter Property"));
- else
+ if (use_get)
undo_redo->create_action(TTR("Add Getter Property"));
+ else
+ undo_redo->create_action(TTR("Add Setter Property"));
int base_id = script->get_available_id();
Ref<VisualScriptNode> vnode;
- if (use_set) {
+ if (!use_get) {
Ref<VisualScriptPropertySet> pset;
pset.instance();
- pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_NODE_PATH);
- pset->set_base_path(sn->get_path_to(sn));
- pset->set_property(d["property"]);
- if (use_value) {
- pset->set_use_builtin_value(true);
- pset->set_builtin_value(d["value"]);
+ if (sn==node) {
+ pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_SELF);
+ } else {
+ pset->set_call_mode(VisualScriptPropertySet::CALL_MODE_NODE_PATH);
+ pset->set_base_path(sn->get_path_to(node));
}
vnode=pset;
@@ -1733,13 +2044,20 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
Ref<VisualScriptPropertyGet> pget;
pget.instance();
- pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_NODE_PATH);
- pget->set_base_path(sn->get_path_to(sn));
- pget->set_property(d["property"]);
+ if (sn==node) {
+ pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_SELF);
+ } else {
+ pget->set_call_mode(VisualScriptPropertyGet::CALL_MODE_NODE_PATH);
+ pget->set_base_path(sn->get_path_to(node));
+ }
vnode=pget;
}
undo_redo->add_do_method(script.ptr(),"add_node",edited_func,base_id,vnode,ofs);
+ undo_redo->add_do_method(vnode.ptr(),"set_property",d["property"]);
+ if (!use_get) {
+ undo_redo->add_do_method(vnode.ptr(),"set_default_input_value",0,d["value"]);
+ }
undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,base_id);
undo_redo->add_do_method(this,"_update_graph");
@@ -1757,6 +2075,50 @@ void VisualScriptEditor::drop_data_fw(const Point2& p_point,const Variant& p_dat
}
+void VisualScriptEditor::_selected_method(const String& p_method) {
+
+ Ref<VisualScriptFunctionCall> vsfc = script->get_node(edited_func,selecting_method_id);
+ if (!vsfc.is_valid())
+ return;
+ vsfc->set_function(p_method);
+
+}
+
+void VisualScriptEditor::_draw_color_over_button(Object* obj,Color p_color) {
+
+ Button *button = obj->cast_to<Button>();
+ if (!button)
+ return;
+
+ Ref<StyleBox> normal = get_stylebox("normal","Button" );
+ button->draw_rect(Rect2(normal->get_offset(),button->get_size()-normal->get_minimum_size()),p_color);
+
+}
+
+void VisualScriptEditor::_button_resource_previewed(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud) {
+
+
+ Array ud=p_ud;
+ ERR_FAIL_COND(ud.size()!=2);
+
+ ObjectID id = ud[0];
+ Object *obj = ObjectDB::get_instance(id);
+
+ if (!obj)
+ return;
+
+ Button *b = obj->cast_to<Button>();
+ ERR_FAIL_COND(!b);
+
+ if (p_preview.is_null()) {
+ b->set_text(ud[1]);
+ } else {
+
+ b->set_icon(p_preview);
+ }
+
+}
+
/////////////////////////
@@ -1821,7 +2183,8 @@ Ref<Texture> VisualScriptEditor::get_icon(){
bool VisualScriptEditor::is_unsaved(){
#ifdef TOOLS_ENABLED
- return script->is_edited();
+
+ return script->is_edited() || script->are_subnodes_edited();
#else
return false;
#endif
@@ -2251,6 +2614,320 @@ void VisualScriptEditor::_graph_disconnected(const String& p_from,int p_from_slo
}
+
+void VisualScriptEditor::_graph_connect_to_empty(const String& p_from,int p_from_slot,const Vector2& p_release_pos) {
+
+ Node* node = graph->get_node(p_from);
+ if (!node)
+ return;
+
+ GraphNode *gn = node->cast_to<GraphNode>();
+ if (!gn)
+ return;
+
+ Ref<VisualScriptNode> vsn = script->get_node(edited_func,p_from.to_int());
+ if (!vsn.is_valid())
+ return;
+
+ if (p_from_slot<vsn->get_output_sequence_port_count()) {
+
+ port_action_popup->clear();
+ port_action_popup->add_item(TTR("Condition"),CREATE_COND);
+ port_action_popup->add_item(TTR("Sequence"),CREATE_SEQUENCE);
+ port_action_popup->add_item(TTR("Switch"),CREATE_SWITCH);
+ port_action_popup->add_item(TTR("Iterator"),CREATE_ITERATOR);
+ port_action_popup->add_item(TTR("While"),CREATE_WHILE);
+ port_action_popup->add_item(TTR("Return"),CREATE_RETURN);
+
+ port_action_node=p_from.to_int();
+ port_action_output=p_from_slot;
+
+ } else {
+ port_action_popup->clear();
+ port_action_popup->add_item(TTR("Call"),CREATE_CALL);
+ port_action_popup->add_item(TTR("Get"),CREATE_GET);
+ port_action_popup->add_item(TTR("Set"),CREATE_SET);
+
+
+ port_action_output=p_from_slot-vsn->get_output_sequence_port_count();
+ port_action_node=p_from.to_int();
+
+
+ }
+
+ port_action_pos=p_release_pos;
+ port_action_popup->set_size(Size2(1,1));
+ port_action_popup->set_pos(graph->get_global_pos()+p_release_pos);
+ port_action_popup->popup();
+}
+
+VisualScriptNode::TypeGuess VisualScriptEditor::_guess_output_type(int p_node,int p_output,Set<int> &visited_nodes) {
+
+
+ VisualScriptNode::TypeGuess tg;
+ tg.type=Variant::NIL;
+
+ if (visited_nodes.has(p_node))
+ return tg; //no loop
+
+ visited_nodes.insert(p_node);
+
+ Ref<VisualScriptNode> node = script->get_node(edited_func,p_node);
+
+ if (!node.is_valid()) {
+
+ return tg;
+ }
+
+ Vector<VisualScriptNode::TypeGuess> in_guesses;
+
+ for(int i=0;i<node->get_input_value_port_count();i++) {
+ PropertyInfo pi = node->get_input_value_port_info(i);
+ VisualScriptNode::TypeGuess g;
+ g.type=pi.type;
+
+ if (g.type==Variant::NIL || g.type==Variant::OBJECT) {
+ //any or object input, must further guess what this is
+ int from_node;
+ int from_port;
+
+ if (script->get_input_value_port_connection_source(edited_func,p_node,i,&from_node,&from_port)) {
+
+ g = _guess_output_type(from_node,from_port,visited_nodes);
+ } else {
+ Variant defval = node->get_default_input_value(i);
+ if (defval.get_type()==Variant::OBJECT) {
+
+ Object *obj = defval;
+
+ if (obj) {
+
+ g.type=Variant::OBJECT;
+ g.obj_type=obj->get_type();
+ g.script=obj->get_script();
+ }
+ }
+ }
+
+ }
+
+ in_guesses.push_back(g);
+ }
+
+ return node->guess_output_type(in_guesses.ptr(),p_output);
+}
+
+void VisualScriptEditor::_port_action_menu(int p_option) {
+
+ Vector2 ofs = graph->get_scroll_ofs() + port_action_pos;
+ if (graph->is_using_snap()) {
+ int snap = graph->get_snap();
+ ofs = ofs.snapped(Vector2(snap,snap));
+ }
+ ofs/=EDSCALE;
+
+ bool seq_connect=false;
+
+ Ref<VisualScriptNode> vnode;
+ Set<int> vn;
+
+ switch(p_option) {
+
+ case CREATE_CALL: {
+
+ Ref<VisualScriptFunctionCall> n;
+ n.instance();
+ vnode=n;
+
+ VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node,port_action_output,vn);
+
+ if (tg.type==Variant::OBJECT) {
+ n->set_call_mode(VisualScriptFunctionCall::CALL_MODE_INSTANCE);
+
+ if (tg.obj_type!=StringName()) {
+ n->set_base_type(tg.obj_type);
+ } else {
+ n->set_base_type("Object");
+ }
+
+ if (tg.script.is_valid()) {
+ n->set_base_script(tg.script->get_path());
+ new_connect_node_select->select_method_from_script(tg.script);
+ } else {
+ new_connect_node_select->select_method_from_base_type(n->get_base_type());
+ }
+
+
+ } else {
+ n->set_call_mode(VisualScriptFunctionCall::CALL_MODE_BASIC_TYPE);
+ n->set_basic_type(tg.type);
+ new_connect_node_select->select_method_from_basic_type(tg.type);
+ }
+
+
+
+ } break;
+ case CREATE_SET: {
+
+ Ref<VisualScriptPropertySet> n;
+ n.instance();
+ vnode=n;
+
+
+ VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node,port_action_output,vn);
+
+ if (tg.type==Variant::OBJECT) {
+ n->set_call_mode(VisualScriptPropertySet::CALL_MODE_INSTANCE);
+
+ if (tg.obj_type!=StringName()) {
+ n->set_base_type(tg.obj_type);
+ } else {
+ n->set_base_type("Object");
+ }
+
+ if (tg.script.is_valid()) {
+ n->set_base_script(tg.script->get_path());
+ new_connect_node_select->select_property_from_script(tg.script);
+ } else {
+ new_connect_node_select->select_property_from_base_type(n->get_base_type());
+ }
+
+
+ } else {
+ n->set_call_mode(VisualScriptPropertySet::CALL_MODE_BASIC_TYPE);
+ n->set_basic_type(tg.type);
+ new_connect_node_select->select_property_from_basic_type(tg.type,tg.ev_type);
+ }
+ } break;
+ case CREATE_GET: {
+
+ Ref<VisualScriptPropertyGet> n;
+ n.instance();
+ vnode=n;
+
+ VisualScriptNode::TypeGuess tg = _guess_output_type(port_action_node,port_action_output,vn);
+
+ if (tg.type==Variant::OBJECT) {
+ n->set_call_mode(VisualScriptPropertyGet::CALL_MODE_INSTANCE);
+
+ if (tg.obj_type!=StringName()) {
+ n->set_base_type(tg.obj_type);
+ } else {
+ n->set_base_type("Object");
+ }
+
+ if (tg.script.is_valid()) {
+ n->set_base_script(tg.script->get_path());
+ new_connect_node_select->select_property_from_script(tg.script);
+ } else {
+ new_connect_node_select->select_property_from_base_type(n->get_base_type());
+ }
+
+
+ } else {
+ n->set_call_mode(VisualScriptPropertyGet::CALL_MODE_BASIC_TYPE);
+ n->set_basic_type(tg.type);
+ new_connect_node_select->select_property_from_basic_type(tg.type,tg.ev_type);
+ }
+
+ } break;
+ case CREATE_COND: {
+
+ Ref<VisualScriptCondition> n;
+ n.instance();
+ vnode=n;
+ seq_connect=true;
+
+ } break;
+ case CREATE_SEQUENCE: {
+
+ Ref<VisualScriptSequence> n;
+ n.instance();
+ vnode=n;
+ seq_connect=true;
+
+ } break;
+ case CREATE_SWITCH: {
+
+ Ref<VisualScriptSwitch> n;
+ n.instance();
+ vnode=n;
+ seq_connect=true;
+
+ } break;
+ case CREATE_ITERATOR: {
+
+ Ref<VisualScriptIterator> n;
+ n.instance();
+ vnode=n;
+ seq_connect=true;
+
+ } break;
+ case CREATE_WHILE: {
+
+ Ref<VisualScriptWhile> n;
+ n.instance();
+ vnode=n;
+ seq_connect=true;
+
+ } break;
+ case CREATE_RETURN: {
+
+ Ref<VisualScriptReturn> n;
+ n.instance();
+ vnode=n;
+ seq_connect=true;
+
+ } break;
+
+ }
+
+ int new_id = script->get_available_id();
+ undo_redo->create_action(TTR("Add Node"));
+ undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,vnode,ofs);
+ if (seq_connect) {
+ undo_redo->add_do_method(script.ptr(),"sequence_connect",edited_func,port_action_node,port_action_output,new_id);
+ }
+ undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id);
+ undo_redo->add_do_method(this,"_update_graph",new_id);
+ undo_redo->add_undo_method(this,"_update_graph",new_id);
+ undo_redo->commit_action();
+
+ port_action_new_node=new_id;
+
+}
+
+void VisualScriptEditor::_selected_connect_node_method_or_setget(const String& p_text) {
+
+ Ref<VisualScriptNode> vsn = script->get_node(edited_func,port_action_new_node);
+
+ if (vsn->cast_to<VisualScriptFunctionCall>()) {
+
+ Ref<VisualScriptFunctionCall> vsfc = vsn;
+ vsfc->set_function(p_text);
+ script->data_connect(edited_func,port_action_node,port_action_output,port_action_new_node,0);
+ }
+
+ if (vsn->cast_to<VisualScriptPropertySet>()) {
+
+ Ref<VisualScriptPropertySet> vsp = vsn;
+ vsp->set_property(p_text);
+ script->data_connect(edited_func,port_action_node,port_action_output,port_action_new_node,0);
+ }
+
+ if (vsn->cast_to<VisualScriptPropertyGet>()) {
+
+ Ref<VisualScriptPropertyGet> vsp = vsn;
+ vsp->set_property(p_text);
+ script->data_connect(edited_func,port_action_node,port_action_output,port_action_new_node,0);
+ }
+
+ _update_graph(port_action_new_node);
+ _update_graph_connections();
+
+}
+
+
void VisualScriptEditor::_default_value_changed() {
@@ -2286,8 +2963,12 @@ void VisualScriptEditor::_default_value_edited(Node * p_button,int p_id,int p_in
default_value_edit->set_pos(p_button->cast_to<Control>()->get_global_pos()+Vector2(0,p_button->cast_to<Control>()->get_size().y));
default_value_edit->set_size(Size2(1,1));
- if (default_value_edit->edit(NULL,pinfo.name,pinfo.type,existing,pinfo.hint,pinfo.hint_string))
- default_value_edit->popup();
+ if (default_value_edit->edit(NULL,pinfo.name,pinfo.type,existing,pinfo.hint,pinfo.hint_string)) {
+ if (pinfo.hint==PROPERTY_HINT_MULTILINE_TEXT)
+ default_value_edit->popup_centered_ratio();
+ else
+ default_value_edit->popup();
+ }
editing_id = p_id;
editing_input=p_input_port;
@@ -2332,6 +3013,39 @@ void VisualScriptEditor::_graph_ofs_changed(const Vector2& p_ofs) {
updating_graph=false;
}
+void VisualScriptEditor::_comment_node_resized(const Vector2& p_new_size,int p_node) {
+
+ if (updating_graph)
+ return;
+
+ Ref<VisualScriptComment> vsc = script->get_node(edited_func,p_node);
+ if (vsc.is_null())
+ return;
+
+ Node *node = graph->get_node(itos(p_node));
+ if (!node)
+ return;
+ GraphNode *gn = node->cast_to<GraphNode>();
+ if (!gn)
+ return;
+
+ updating_graph=true;
+
+ graph->set_block_minimum_size_adjust(true); //faster resize
+
+ undo_redo->create_action("Resize Comment",UndoRedo::MERGE_ENDS);
+ undo_redo->add_do_method(vsc.ptr(),"set_size",p_new_size/EDSCALE);
+ undo_redo->add_undo_method(vsc.ptr(),"set_size",vsc->get_size());
+ undo_redo->commit_action();
+
+ gn->set_custom_minimum_size(p_new_size); //for this time since graph update is blocked
+ gn->set_size(Size2(1,1));
+ graph->set_block_minimum_size_adjust(false);
+ updating_graph=false;
+
+
+}
+
void VisualScriptEditor::_menu_option(int p_what) {
switch(p_what) {
@@ -2367,8 +3081,151 @@ void VisualScriptEditor::_menu_option(int p_what) {
//popup disappearing grabs focus to owner, so use call deferred
node_filter->call_deferred("grab_focus");
node_filter->call_deferred("select_all");
+ } break;
+ case EDIT_COPY_NODES:
+ case EDIT_CUT_NODES: {
+
+ if (!script->has_function(edited_func))
+ break;
+
+ clipboard->nodes.clear();
+ clipboard->data_connections.clear();
+ clipboard->sequence_connections.clear();
+
+ for(int i=0;i<graph->get_child_count();i++) {
+ GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>();
+ if (gn) {
+ if (gn->is_selected()) {
+
+ int id = String(gn->get_name()).to_int();
+ Ref<VisualScriptNode> node = script->get_node(edited_func,id);
+ if (node->cast_to<VisualScriptFunction>()) {
+ EditorNode::get_singleton()->show_warning("Can't copy the function node.");
+ return;
+ }
+ if (node.is_valid()) {
+ clipboard->nodes[id]=node->duplicate();
+ clipboard->nodes_positions[id]=script->get_node_pos(edited_func,id);
+ }
+
+ }
+ }
+ }
+
+ if (clipboard->nodes.empty())
+ break;
+
+ List<VisualScript::SequenceConnection> sequence_connections;
+
+ script->get_sequence_connection_list(edited_func,&sequence_connections);
+
+ for (List<VisualScript::SequenceConnection>::Element *E=sequence_connections.front();E;E=E->next()) {
+
+ if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) {
+
+ clipboard->sequence_connections.insert(E->get());
+ }
+ }
+
+ List<VisualScript::DataConnection> data_connections;
+
+ script->get_data_connection_list(edited_func,&data_connections);
+
+ for (List<VisualScript::DataConnection>::Element *E=data_connections.front();E;E=E->next()) {
+
+ if (clipboard->nodes.has(E->get().from_node) && clipboard->nodes.has(E->get().to_node)) {
+
+ clipboard->data_connections.insert(E->get());
+ }
+ }
+
+ if (p_what==EDIT_CUT_NODES) {
+ _on_nodes_delete(); // oh yeah, also delete on cut
+ }
+
+
+ } break;
+ case EDIT_PASTE_NODES: {
+ if (!script->has_function(edited_func))
+ break;
+
+ if (clipboard->nodes.empty()) {
+ EditorNode::get_singleton()->show_warning("Clipboard is empty!");
+ break;
+ }
+
+ Map<int,int> remap;
+
+ undo_redo->create_action("Paste VisualScript Nodes");
+ int idc=script->get_available_id()+1;
+
+ Set<int> to_select;
+
+ Set<Vector2> existing_positions;
+
+ {
+ List<int> nodes;
+ script->get_node_list(edited_func,&nodes);
+ for (List<int>::Element *E=nodes.front();E;E=E->next()) {
+ Vector2 pos = script->get_node_pos(edited_func,E->get()).snapped(Vector2(2,2));
+ existing_positions.insert(pos);
+ }
+ }
+
+ for (Map<int,Ref<VisualScriptNode> >::Element *E=clipboard->nodes.front();E;E=E->next()) {
+
+
+ Ref<VisualScriptNode> node = E->get()->duplicate();
+
+ int new_id = idc++;
+ to_select.insert(new_id);
+
+ remap[E->key()]=new_id;
+
+ Vector2 paste_pos = clipboard->nodes_positions[E->key()];
+
+ while(existing_positions.has(paste_pos.snapped(Vector2(2,2)))) {
+ paste_pos+=Vector2(20,20)*EDSCALE;
+ }
+
+
+ undo_redo->add_do_method(script.ptr(),"add_node",edited_func,new_id,node,paste_pos);
+ undo_redo->add_undo_method(script.ptr(),"remove_node",edited_func,new_id);
+
+ }
+
+ for (Set<VisualScript::SequenceConnection>::Element *E=clipboard->sequence_connections.front();E;E=E->next()) {
+
+
+ undo_redo->add_do_method(script.ptr(),"sequence_connect",edited_func,remap[E->get().from_node],E->get().from_output,remap[E->get().to_node]);
+ undo_redo->add_undo_method(script.ptr(),"sequence_disconnect",edited_func,remap[E->get().from_node],E->get().from_output,remap[E->get().to_node]);
+
+ }
+
+ for (Set<VisualScript::DataConnection>::Element *E=clipboard->data_connections.front();E;E=E->next()) {
+
+
+ undo_redo->add_do_method(script.ptr(),"data_connect",edited_func,remap[E->get().from_node],E->get().from_port,remap[E->get().to_node],E->get().to_port);
+ undo_redo->add_undo_method(script.ptr(),"data_disconnect",edited_func,remap[E->get().from_node],E->get().from_port,remap[E->get().to_node],E->get().to_port);
+
+ }
+
+ undo_redo->add_do_method(this,"_update_graph");
+ undo_redo->add_undo_method(this,"_update_graph");
+
+ undo_redo->commit_action();
+
+ for(int i=0;i<graph->get_child_count();i++) {
+ GraphNode *gn = graph->get_child(i)->cast_to<GraphNode>();
+ if (gn) {
+ int id = gn->get_name().operator String().to_int();
+ gn->set_selected(to_select.has(id));
+
+ }
+ }
} break;
+
}
}
@@ -2395,6 +3252,12 @@ void VisualScriptEditor::_bind_methods() {
ObjectTypeDB::bind_method("_menu_option",&VisualScriptEditor::_menu_option);
ObjectTypeDB::bind_method("_graph_ofs_changed",&VisualScriptEditor::_graph_ofs_changed);
ObjectTypeDB::bind_method("_center_on_node",&VisualScriptEditor::_center_on_node);
+ ObjectTypeDB::bind_method("_comment_node_resized",&VisualScriptEditor::_comment_node_resized);
+ ObjectTypeDB::bind_method("_button_resource_previewed",&VisualScriptEditor::_button_resource_previewed);
+ ObjectTypeDB::bind_method("_port_action_menu",&VisualScriptEditor::_port_action_menu);
+ ObjectTypeDB::bind_method("_selected_connect_node_method_or_setget",&VisualScriptEditor::_selected_connect_node_method_or_setget);
+ ObjectTypeDB::bind_method("_expression_text_changed",&VisualScriptEditor::_expression_text_changed);
+
@@ -2410,9 +3273,16 @@ void VisualScriptEditor::_bind_methods() {
ObjectTypeDB::bind_method("_graph_connected",&VisualScriptEditor::_graph_connected);
ObjectTypeDB::bind_method("_graph_disconnected",&VisualScriptEditor::_graph_disconnected);
+ ObjectTypeDB::bind_method("_graph_connect_to_empty",&VisualScriptEditor::_graph_connect_to_empty);
+
ObjectTypeDB::bind_method("_update_graph_connections",&VisualScriptEditor::_update_graph_connections);
ObjectTypeDB::bind_method("_node_filter_changed",&VisualScriptEditor::_node_filter_changed);
+ ObjectTypeDB::bind_method("_selected_method",&VisualScriptEditor::_selected_method);
+ ObjectTypeDB::bind_method("_draw_color_over_button",&VisualScriptEditor::_draw_color_over_button);
+
+
+
}
@@ -2420,6 +3290,9 @@ void VisualScriptEditor::_bind_methods() {
VisualScriptEditor::VisualScriptEditor() {
+ if (!clipboard) {
+ clipboard = memnew( Clipboard );
+ }
updating_graph=false;
edit_menu = memnew( MenuButton );
@@ -2427,6 +3300,11 @@ VisualScriptEditor::VisualScriptEditor() {
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/delete_selected"), EDIT_DELETE_NODES);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/toggle_breakpoint"), EDIT_TOGGLE_BREAKPOINT);
edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/find_node_type"), EDIT_FIND_NODE_TYPE);
+ edit_menu->get_popup()->add_separator();
+ edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/copy_nodes"), EDIT_COPY_NODES);
+ edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/cut_nodes"), EDIT_CUT_NODES);
+ edit_menu->get_popup()->add_shortcut(ED_GET_SHORTCUT("visual_script_editor/paste_nodes"), EDIT_PASTE_NODES);
+
edit_menu->get_popup()->connect("item_pressed",this,"_menu_option");
main_hsplit = memnew( HSplitContainer );
@@ -2439,9 +3317,9 @@ VisualScriptEditor::VisualScriptEditor() {
VBoxContainer *left_vb = memnew( VBoxContainer );
left_vsplit->add_child(left_vb);
left_vb->set_v_size_flags(SIZE_EXPAND_FILL);
- left_vb->set_custom_minimum_size(Size2(180,1)*EDSCALE);
+ left_vb->set_custom_minimum_size(Size2(230,1)*EDSCALE);
- base_type_select = memnew( Button );
+ base_type_select = memnew( Button );
left_vb->add_margin_child(TTR("Base Type:"),base_type_select);
base_type_select->connect("pressed",this,"_change_base_type");
@@ -2532,6 +3410,7 @@ VisualScriptEditor::VisualScriptEditor() {
graph->connect("connection_request",this,"_graph_connected");
graph->connect("disconnection_request",this,"_graph_disconnected");
+ graph->connect("connection_to_empty",this,"_graph_connect_to_empty");
edit_signal_dialog = memnew( AcceptDialog );
edit_signal_dialog->get_ok()->set_text(TTR("Close"));
@@ -2577,7 +3456,20 @@ VisualScriptEditor::VisualScriptEditor() {
add_child(default_value_edit);
default_value_edit->connect("variant_changed",this,"_default_value_changed");
+ method_select = memnew( PropertySelector );
+ add_child(method_select);
+ method_select->connect("selected",this,"_selected_method");
error_line=-1;
+
+ new_connect_node_select = memnew( PropertySelector );
+ add_child(new_connect_node_select);
+ new_connect_node_select->connect("selected",this,"_selected_connect_node_method_or_setget");
+
+ port_action_popup = memnew( PopupMenu );
+ add_child(port_action_popup);
+ port_action_popup->connect("item_pressed",this,"_port_action_menu");
+
+
}
VisualScriptEditor::~VisualScriptEditor() {
@@ -2596,6 +3488,14 @@ static ScriptEditorBase * create_editor(const Ref<Script>& p_script) {
return NULL;
}
+
+VisualScriptEditor::Clipboard *VisualScriptEditor::clipboard=NULL;
+
+void VisualScriptEditor::free_clipboard() {
+ if (clipboard)
+ memdelete(clipboard);
+}
+
static void register_editor_callback() {
ScriptEditor::register_create_script_editor_function(create_editor);
@@ -2604,11 +3504,15 @@ static void register_editor_callback() {
EditorSettings::get_singleton()->set("visual_script_editor/color_operators",Color(0.9,0.9,1.0));
EditorSettings::get_singleton()->set("visual_script_editor/color_flow_control",Color(1.0,1.0,0.8));
EditorSettings::get_singleton()->set("visual_script_editor/color_custom",Color(0.8,1.0,1.0));
+ EditorSettings::get_singleton()->set("visual_script_editor/color_constants",Color(1.0,0.8,1.0));
ED_SHORTCUT("visual_script_editor/delete_selected", TTR("Delete Selected"));
ED_SHORTCUT("visual_script_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9);
- ED_SHORTCUT("visual_script_editor/find_node_type", TTR("Find Node Tyoe"), KEY_MASK_CMD+KEY_F);
+ ED_SHORTCUT("visual_script_editor/find_node_type", TTR("Find Node Type"), KEY_MASK_CMD+KEY_F);
+ ED_SHORTCUT("visual_script_editor/copy_nodes", TTR("Copy Nodes"), KEY_MASK_CMD+KEY_C);
+ ED_SHORTCUT("visual_script_editor/cut_nodes", TTR("Cut Nodes"), KEY_MASK_CMD+KEY_X);
+ ED_SHORTCUT("visual_script_editor/paste_nodes", TTR("Paste Nodes"), KEY_MASK_CMD+KEY_V);
}
diff --git a/modules/visual_script/visual_script_editor.h b/modules/visual_script/visual_script_editor.h
index 252519913d..483ae1644c 100644
--- a/modules/visual_script/visual_script_editor.h
+++ b/modules/visual_script/visual_script_editor.h
@@ -6,13 +6,14 @@
#include "tools/editor/property_editor.h"
#include "scene/gui/graph_edit.h"
#include "tools/editor/create_dialog.h"
-
+#include "tools/editor/property_selector.h"
class VisualScriptEditorSignalEdit;
class VisualScriptEditorVariableEdit;
#ifdef TOOLS_ENABLED
+
class VisualScriptEditor : public ScriptEditorBase {
OBJ_TYPE(VisualScriptEditor,ScriptEditorBase)
@@ -27,6 +28,22 @@ class VisualScriptEditor : public ScriptEditorBase {
EDIT_DELETE_NODES,
EDIT_TOGGLE_BREAKPOINT,
EDIT_FIND_NODE_TYPE,
+ EDIT_COPY_NODES,
+ EDIT_CUT_NODES,
+ EDIT_PASTE_NODES,
+ };
+
+ enum PortAction {
+
+ CREATE_CALL,
+ CREATE_SET,
+ CREATE_GET,
+ CREATE_COND,
+ CREATE_SEQUENCE,
+ CREATE_SWITCH,
+ CREATE_ITERATOR,
+ CREATE_WHILE,
+ CREATE_RETURN,
};
MenuButton *edit_menu;
@@ -48,6 +65,8 @@ class VisualScriptEditor : public ScriptEditorBase {
AcceptDialog *edit_signal_dialog;
PropertyEditor *edit_signal_edit;
+ PropertySelector *method_select;
+ PropertySelector *new_connect_node_select;
VisualScriptEditorVariableEdit *variable_editor;
@@ -98,6 +117,27 @@ class VisualScriptEditor : public ScriptEditorBase {
String _validate_name(const String& p_name) const;
+ struct Clipboard {
+
+ Map<int,Ref<VisualScriptNode> > nodes;
+ Map<int,Vector2 > nodes_positions;
+
+ Set<VisualScript::SequenceConnection> sequence_connections;
+ Set<VisualScript::DataConnection> data_connections;
+ };
+
+ static Clipboard *clipboard;
+
+ PopupMenu *port_action_popup;
+
+ PortAction port_action;
+ int port_action_node;
+ int port_action_output;
+ Vector2 port_action_pos;
+ int port_action_new_node;
+ void _port_action_menu(int p_option);
+ void _selected_connect_node_method_or_setget(const String& p_text);
+
int error_line;
@@ -119,6 +159,8 @@ class VisualScriptEditor : public ScriptEditorBase {
void _remove_node(int p_id);
void _graph_connected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot);
void _graph_disconnected(const String& p_from,int p_from_slot,const String& p_to,int p_to_slot);
+ void _graph_connect_to_empty(const String& p_from,int p_from_slot,const Vector2& p_release_pos);
+
void _node_ports_changed(const String& p_func,int p_id);
void _available_node_doubleclicked();
@@ -126,6 +168,8 @@ class VisualScriptEditor : public ScriptEditorBase {
void _member_button(Object *p_item, int p_column, int p_button);
+ void _expression_text_changed(const String& p_text,int p_id);
+
String revert_on_drag;
@@ -147,6 +191,17 @@ class VisualScriptEditor : public ScriptEditorBase {
void _menu_option(int p_what);
void _graph_ofs_changed(const Vector2& p_ofs);
+ void _comment_node_resized(const Vector2& p_new_size,int p_node);
+
+ int selecting_method_id;
+ void _selected_method(const String& p_method);
+
+ void _draw_color_over_button(Object* obj,Color p_color);
+ void _button_resource_previewed(const String& p_path,const Ref<Texture>& p_preview,Variant p_ud);
+
+ VisualScriptNode::TypeGuess _guess_output_type(int p_port_action_node,int p_port_action_output,Set<int> &visited_nodes);
+
+
protected:
void _notification(int p_what);
@@ -175,9 +230,12 @@ public:
virtual void set_debugger_active(bool p_active);
virtual void set_tooltip_request_func(String p_method,Object* p_obj);
virtual Control *get_edit_menu();
+ virtual bool can_lose_focus_on_node_selection() { return false; }
static void register_editor();
+ static void free_clipboard();
+
VisualScriptEditor();
~VisualScriptEditor();
};
diff --git a/modules/visual_script/visual_script_expression.cpp b/modules/visual_script/visual_script_expression.cpp
new file mode 100644
index 0000000000..cc3b5f2174
--- /dev/null
+++ b/modules/visual_script/visual_script_expression.cpp
@@ -0,0 +1,1523 @@
+#include "visual_script_expression.h"
+
+
+bool VisualScriptExpression::_set(const StringName& p_name, const Variant& p_value) {
+
+ if (String(p_name)=="expression") {
+ expression=p_value;
+ expression_dirty=true;
+ ports_changed_notify();
+ return true;
+ }
+
+ if (String(p_name)=="out_type") {
+ output_type=Variant::Type(int(p_value));
+ expression_dirty=true;
+ ports_changed_notify();
+ return true;
+ }
+ if (String(p_name)=="sequenced") {
+ sequenced=p_value;
+ ports_changed_notify();
+ return true;
+ }
+
+ if (String(p_name)=="input_count") {
+
+ int from=inputs.size();
+ inputs.resize(int(p_value));
+ for(int i=from;i<inputs.size();i++) {
+ inputs[i].name=String::chr('a'+i);
+ if (from==0) {
+ inputs[i].type=output_type;
+ } else {
+ inputs[i].type=inputs[from-1].type;
+ }
+ }
+ expression_dirty=true;
+ ports_changed_notify();
+ _change_notify();
+ return true;
+ }
+
+ if (String(p_name).begins_with("input/")) {
+
+ int idx=String(p_name).get_slice("/",1).to_int();
+ ERR_FAIL_INDEX_V(idx,inputs.size(),false);
+
+ String what=String(p_name).get_slice("/",2);
+
+ if (what=="type") {
+
+ inputs[idx].type=Variant::Type(int(p_value));
+ } else if (what=="name") {
+
+ inputs[idx].name=p_value;
+ } else {
+ return false;
+ }
+
+ expression_dirty=true;
+ ports_changed_notify();
+ return true;
+ }
+
+
+ return false;
+
+}
+
+bool VisualScriptExpression::_get(const StringName& p_name,Variant &r_ret) const {
+
+ if (String(p_name)=="expression") {
+ r_ret=expression;
+ return true;
+ }
+
+ if (String(p_name)=="out_type") {
+ r_ret=output_type;
+ return true;
+ }
+
+ if (String(p_name)=="sequenced") {
+ r_ret=sequenced;
+ return true;
+ }
+
+ if (String(p_name)=="input_count") {
+ r_ret=inputs.size();
+ return true;
+ }
+
+ if (String(p_name).begins_with("input/")) {
+
+ int idx=String(p_name).get_slice("/",1).to_int();
+ ERR_FAIL_INDEX_V(idx,inputs.size(),false);
+
+ String what=String(p_name).get_slice("/",2);
+
+ if (what=="type") {
+
+ r_ret=inputs[idx].type;
+ } else if (what=="name") {
+
+ r_ret=inputs[idx].name;
+ } else {
+ return false;
+ }
+
+ return true;
+ }
+
+
+ return false;
+}
+void VisualScriptExpression::_get_property_list( List<PropertyInfo> *p_list) const {
+
+
+ String argt="Any";
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+ argt+=","+Variant::get_type_name(Variant::Type(i));
+ }
+
+ p_list->push_back(PropertyInfo(Variant::STRING,"expression",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR));
+ p_list->push_back(PropertyInfo(Variant::INT,"out_type",PROPERTY_HINT_ENUM,argt));
+ p_list->push_back(PropertyInfo(Variant::INT,"input_count",PROPERTY_HINT_RANGE,"0,64,1"));
+ p_list->push_back(PropertyInfo(Variant::BOOL,"sequenced"));
+
+ for(int i=0;i<inputs.size();i++) {
+
+ p_list->push_back(PropertyInfo(Variant::INT,"input/"+itos(i)+"/type",PROPERTY_HINT_ENUM,argt));
+ p_list->push_back(PropertyInfo(Variant::STRING,"input/"+itos(i)+"/name"));
+ }
+}
+
+int VisualScriptExpression::get_output_sequence_port_count() const {
+
+ return sequenced?1:0;
+}
+bool VisualScriptExpression::has_input_sequence_port() const{
+
+ return sequenced;
+}
+
+
+String VisualScriptExpression::get_output_sequence_port_text(int p_port) const{
+
+ return String();
+}
+
+
+int VisualScriptExpression::get_input_value_port_count() const{
+
+ return inputs.size();
+
+}
+int VisualScriptExpression::get_output_value_port_count() const{
+
+ return 1;
+}
+
+
+PropertyInfo VisualScriptExpression::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo(inputs[p_idx].type,inputs[p_idx].name);
+}
+PropertyInfo VisualScriptExpression::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(output_type,"result");
+}
+
+String VisualScriptExpression::get_caption() const{
+
+ return "Expression";
+}
+String VisualScriptExpression::get_text() const{
+
+ return expression;
+}
+
+
+Error VisualScriptExpression::_get_token(Token& r_token) {
+
+ while (true) {
+#define GET_CHAR() (str_ofs>=expression.length()?0:expression[str_ofs++])
+
+ CharType cchar = GET_CHAR();
+ if (cchar==0) {
+ r_token.type=TK_EOF;
+ return OK;
+ }
+
+
+ switch(cchar) {
+
+ case 0: {
+ r_token.type=TK_EOF;
+ return OK;
+ } break;
+ case '{': {
+
+ r_token.type=TK_CURLY_BRACKET_OPEN;
+ return OK;
+ };
+ case '}': {
+
+ r_token.type=TK_CURLY_BRACKET_CLOSE;
+ return OK;
+ };
+ case '[': {
+
+ r_token.type=TK_BRACKET_OPEN;
+ return OK;
+ };
+ case ']': {
+
+ r_token.type=TK_BRACKET_CLOSE;
+ return OK;
+ };
+ case '(': {
+
+ r_token.type=TK_PARENTHESIS_OPEN;
+ return OK;
+ };
+ case ')': {
+
+ r_token.type=TK_PARENTHESIS_CLOSE;
+ return OK;
+ };
+ case ',': {
+
+ r_token.type=TK_COMMA;
+ return OK;
+ };
+ case ':': {
+
+ r_token.type=TK_COLON;
+ return OK;
+ };
+ case '.': {
+
+ r_token.type=TK_PERIOD;
+ return OK;
+ };
+ case '=': {
+
+ cchar=GET_CHAR();
+ if (cchar=='=') {
+ r_token.type=TK_OP_EQUAL;
+ } else {
+ _set_error("Expected '='");
+ r_token.type=TK_ERROR;
+ return ERR_PARSE_ERROR;
+ }
+ return OK;
+ };
+ case '!': {
+
+ if (expression[str_ofs]=='=') {
+ r_token.type=TK_OP_NOT_EQUAL;
+ str_ofs++;
+ } else {
+ r_token.type=TK_OP_NOT;
+ }
+ return OK;
+ };
+ case '>': {
+
+ if (expression[str_ofs]=='=') {
+ r_token.type=TK_OP_GREATER_EQUAL;
+ str_ofs++;
+ } else if (expression[str_ofs]=='>') {
+ r_token.type=TK_OP_SHIFT_RIGHT;
+ str_ofs++;
+ } else {
+ r_token.type=TK_OP_GREATER;
+ }
+ return OK;
+ };
+ case '<': {
+
+ if (expression[str_ofs]=='=') {
+ r_token.type=TK_OP_LESS_EQUAL;
+ str_ofs++;
+ } else if (expression[str_ofs]=='<') {
+ r_token.type=TK_OP_SHIFT_LEFT;
+ str_ofs++;
+ } else {
+ r_token.type=TK_OP_LESS;
+ }
+ return OK;
+ };
+ case '+': {
+ r_token.type=TK_OP_ADD;
+ return OK;
+ };
+ case '-': {
+ r_token.type=TK_OP_SUB;
+ return OK;
+ };
+ case '/': {
+ r_token.type=TK_OP_DIV;
+ return OK;
+ };
+ case '*': {
+ r_token.type=TK_OP_MUL;
+ return OK;
+ };
+ case '%': {
+ r_token.type=TK_OP_MOD;
+ return OK;
+ };
+ case '&': {
+
+ if (expression[str_ofs]=='&') {
+ r_token.type=TK_OP_AND;
+ str_ofs++;
+ } else {
+ r_token.type=TK_OP_BIT_AND;
+ }
+ return OK;
+ };
+ case '|': {
+
+ if (expression[str_ofs]=='|') {
+ r_token.type=TK_OP_OR;
+ str_ofs++;
+ } else {
+ r_token.type=TK_OP_BIT_OR;
+ }
+ return OK;
+ };
+ case '^': {
+
+ r_token.type=TK_OP_BIT_XOR;
+
+ return OK;
+ };
+ case '~': {
+
+ r_token.type=TK_OP_BIT_INVERT;
+
+ return OK;
+ };
+ case '"': {
+
+
+ String str;
+ while(true) {
+
+ CharType ch=GET_CHAR();
+
+ if (ch==0) {
+ _set_error("Unterminated String");
+ r_token.type=TK_ERROR;
+ return ERR_PARSE_ERROR;
+ } else if (ch=='"') {
+ break;
+ } else if (ch=='\\') {
+ //escaped characters...
+
+ CharType next = GET_CHAR();
+ if (next==0) {
+ _set_error("Unterminated String");
+ r_token.type=TK_ERROR;
+ return ERR_PARSE_ERROR;
+ }
+ CharType res=0;
+
+ switch(next) {
+
+ case 'b': res=8; break;
+ case 't': res=9; break;
+ case 'n': res=10; break;
+ case 'f': res=12; break;
+ case 'r': res=13; break;
+ case 'u': {
+ //hexnumbarh - oct is deprecated
+
+
+ for(int j=0;j<4;j++) {
+ CharType c = GET_CHAR();
+
+ if (c==0) {
+ _set_error("Unterminated String");
+ r_token.type=TK_ERROR;
+ return ERR_PARSE_ERROR;
+ }
+ if (!((c>='0' && c<='9') || (c>='a' && c<='f') || (c>='A' && c<='F'))) {
+
+ _set_error("Malformed hex constant in string");
+ r_token.type=TK_ERROR;
+ return ERR_PARSE_ERROR;
+ }
+ CharType v;
+ if (c>='0' && c<='9') {
+ v=c-'0';
+ } else if (c>='a' && c<='f') {
+ v=c-'a';
+ v+=10;
+ } else if (c>='A' && c<='F') {
+ v=c-'A';
+ v+=10;
+ } else {
+ ERR_PRINT("BUG");
+ v=0;
+ }
+
+ res<<=4;
+ res|=v;
+
+
+ }
+
+
+
+ } break;
+ //case '\"': res='\"'; break;
+ //case '\\': res='\\'; break;
+ //case '/': res='/'; break;
+ default: {
+ res = next;
+ //r_err_str="Invalid escape sequence";
+ //return ERR_PARSE_ERROR;
+ } break;
+ }
+
+ str+=res;
+
+ } else {
+ str+=ch;
+ }
+ }
+
+ r_token.type=TK_CONSTANT;
+ r_token.value=str;
+ return OK;
+
+ } break;
+ default: {
+
+ if (cchar<=32) {
+ break;
+ }
+
+ if (cchar=='-' || (cchar>='0' && cchar<='9')) {
+ //a number
+
+
+ String num;
+#define READING_SIGN 0
+#define READING_INT 1
+#define READING_DEC 2
+#define READING_EXP 3
+#define READING_DONE 4
+ int reading=READING_INT;
+
+ if (cchar=='-') {
+ num+='-';
+ cchar=GET_CHAR();
+
+ }
+
+
+
+ CharType c = cchar;
+ bool exp_sign=false;
+ bool exp_beg=false;
+ bool is_float=false;
+
+ while(true) {
+
+ switch(reading) {
+ case READING_INT: {
+
+ if (c>='0' && c<='9') {
+ //pass
+ } else if (c=='.') {
+ reading=READING_DEC;
+ is_float=true;
+ } else if (c=='e') {
+ reading=READING_EXP;
+ } else {
+ reading=READING_DONE;
+ }
+
+ } break;
+ case READING_DEC: {
+
+ if (c>='0' && c<='9') {
+
+ } else if (c=='e') {
+ reading=READING_EXP;
+
+ } else {
+ reading=READING_DONE;
+ }
+
+ } break;
+ case READING_EXP: {
+
+ if (c>='0' && c<='9') {
+ exp_beg=true;
+
+ } else if ((c=='-' || c=='+') && !exp_sign && !exp_beg) {
+ if (c=='-')
+ is_float=true;
+ exp_sign=true;
+
+ } else {
+ reading=READING_DONE;
+ }
+ } break;
+ }
+
+ if (reading==READING_DONE)
+ break;
+ num+=String::chr(c);
+ c = GET_CHAR();
+
+
+ }
+
+ str_ofs--;
+
+ r_token.type=TK_CONSTANT;
+
+ if (is_float)
+ r_token.value=num.to_double();
+ else
+ r_token.value=num.to_int();
+ return OK;
+
+ } else if ((cchar>='A' && cchar<='Z') || (cchar>='a' && cchar<='z') || cchar=='_') {
+
+ String id;
+ bool first=true;
+
+ while((cchar>='A' && cchar<='Z') || (cchar>='a' && cchar<='z') || cchar=='_' || (!first && cchar>='0' && cchar<='9')) {
+
+ id+=String::chr(cchar);
+ cchar=GET_CHAR();
+ first=false;
+ }
+
+ str_ofs--; //go back one
+
+ if (id=="in") {
+ r_token.type=TK_OP_IN;
+ } else if (id=="null") {
+ r_token.type=TK_CONSTANT;
+ r_token.value=Variant();
+ } else if (id=="true") {
+ r_token.type=TK_CONSTANT;
+ r_token.value=true;
+ } else if (id=="false") {
+ r_token.type=TK_CONSTANT;
+ r_token.value=false;
+ } else if (id=="PI") {
+ r_token.type=TK_CONSTANT;
+ r_token.value=Math_PI;
+ } else if (id=="not") {
+ r_token.type=TK_OP_NOT;
+ } else if (id=="or") {
+ r_token.type=TK_OP_OR;
+ } else if (id=="and") {
+ r_token.type=TK_OP_AND;
+ } else if (id=="self") {
+ r_token.type=TK_SELF;
+ } else {
+
+ for(int i=0;i<Variant::VARIANT_MAX;i++) {
+ if (id==Variant::get_type_name(Variant::Type(i))) {
+ r_token.type=TK_BASIC_TYPE;
+ r_token.value=i;
+ return OK;
+ break;
+ }
+ }
+
+ VisualScriptBuiltinFunc::BuiltinFunc bifunc = VisualScriptBuiltinFunc::find_function(id);
+ if (bifunc!=VisualScriptBuiltinFunc::FUNC_MAX) {
+ r_token.type=TK_BUILTIN_FUNC;
+ r_token.value=bifunc;
+ return OK;
+ }
+
+ r_token.type=TK_IDENTIFIER;
+ r_token.value=id;
+ }
+
+ return OK;
+ } else {
+ _set_error("Unexpected character.");
+ r_token.type=TK_ERROR;
+ return ERR_PARSE_ERROR;
+ }
+ }
+ }
+ }
+
+ r_token.type=TK_ERROR;
+ return ERR_PARSE_ERROR;
+}
+
+const char* VisualScriptExpression::token_name[TK_MAX]={
+"CURLY BRACKET OPEN",
+"CURLY BRACKET CLOSE",
+"BRACKET OPEN",
+"BRACKET CLOSE",
+"PARENTHESIS OPEN",
+"PARENTHESIS CLOSE",
+"IDENTIFIER",
+"BUILTIN FUNC",
+"SELF",
+"CONSTANT",
+"BASIC TYPE",
+"COLON",
+"COMMA",
+"PERIOD",
+"OP IN",
+"OP EQUAL",
+"OP NOT EQUAL",
+"OP LESS",
+"OP LESS EQUAL",
+"OP GREATER",
+"OP GREATER EQUAL",
+"OP AND",
+"OP OR",
+"OP NOT",
+"OP ADD",
+"OP SUB",
+"OP MUL",
+"OP DIV",
+"OP MOD",
+"OP SHIFT LEFT",
+"OP SHIFT RIGHT",
+"OP BIT AND",
+"OP BIT OR",
+"OP BIT XOR",
+"OP BIT INVERT",
+"EOF",
+"ERROR"
+};
+
+VisualScriptExpression::ENode* VisualScriptExpression::_parse_expression() {
+
+
+ Vector<Expression> expression;
+
+ while(true) {
+ //keep appending stuff to expression
+ ENode*expr=NULL;
+
+ Token tk;
+ _get_token(tk);
+ if (error_set)
+ return NULL;
+
+
+
+ switch(tk.type) {
+ case TK_CURLY_BRACKET_OPEN: {
+ //a dictionary
+ DictionaryNode *dn = alloc_node<DictionaryNode>();
+
+
+ while(true) {
+
+ int cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_CURLY_BRACKET_CLOSE) {
+ break;
+ }
+ str_ofs=cofs; //revert
+ //parse an expression
+ ENode* expr=_parse_expression();
+ if (!expr)
+ return NULL;
+ dn->dict.push_back(expr);
+
+ _get_token(tk);
+ if (tk.type!=TK_COLON) {
+ _set_error("Expected ':'");
+ return NULL;
+ }
+
+ expr=_parse_expression();
+ if (!expr)
+ return NULL;
+
+ dn->dict.push_back(expr);
+
+ cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_COMMA) {
+ //all good
+ } else if (tk.type==TK_CURLY_BRACKET_CLOSE) {
+ str_ofs=cofs;
+ } else {
+ _set_error("Expected ',' or '}'");
+ }
+ }
+
+ expr=dn;
+ } break;
+ case TK_BRACKET_OPEN: {
+ //an array
+
+ ArrayNode *an = alloc_node<ArrayNode>();
+
+
+ while(true) {
+
+ int cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_BRACKET_CLOSE) {
+ break;
+ }
+ str_ofs=cofs; //revert
+ //parse an expression
+ ENode* expr=_parse_expression();
+ if (!expr)
+ return NULL;
+ an->array.push_back(expr);
+
+ cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_COMMA) {
+ //all good
+ } else if (tk.type==TK_BRACKET_CLOSE) {
+ str_ofs=cofs;
+ } else {
+ _set_error("Expected ',' or ']'");
+ }
+ }
+
+ expr=an;
+ } break;
+ case TK_PARENTHESIS_OPEN: {
+ //a suexpression
+ ENode* e=_parse_expression();
+ if (error_set)
+ return NULL;
+ _get_token(tk);
+ if (tk.type!=TK_PARENTHESIS_CLOSE) {
+ _set_error("Expected ')'");
+ return NULL;
+ }
+
+ expr=e;
+
+ } break;
+ case TK_IDENTIFIER: {
+
+ String what = tk.value;
+ int index=-1;
+ for(int i=0;i<inputs.size();i++) {
+ if (what==inputs[i].name) {
+ index=i;
+ break;
+ }
+ }
+
+ if (index!=-1) {
+ InputNode *input = alloc_node<InputNode>();
+ input->index=index;
+ expr=input;
+ } else {
+ _set_error("Invalid input identifier '"+what+"'. For script variables, use self (locals are for inputs)."+what);
+ return NULL;
+ }
+ } break;
+ case TK_SELF: {
+
+ SelfNode *self = alloc_node<SelfNode>();
+ expr=self;
+ } break;
+ case TK_CONSTANT: {
+ ConstantNode *constant = alloc_node<ConstantNode>();
+ constant->value=tk.value;
+ expr=constant;
+ } break;
+ case TK_BASIC_TYPE: {
+ //constructor..
+
+ Variant::Type bt = Variant::Type(int(tk.value));
+ _get_token(tk);
+ if (tk.type!=TK_PARENTHESIS_OPEN) {
+ _set_error("Expected '('");
+ return NULL;
+ }
+
+ ConstructorNode *constructor = alloc_node<ConstructorNode>();
+ constructor->data_type=bt;
+
+ while(true) {
+
+ int cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_PARENTHESIS_CLOSE) {
+ break;
+ }
+ str_ofs=cofs; //revert
+ //parse an expression
+ ENode* expr=_parse_expression();
+ if (!expr)
+ return NULL;
+
+ constructor->arguments.push_back(expr);
+
+ cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_COMMA) {
+ //all good
+ } else if (tk.type==TK_PARENTHESIS_CLOSE) {
+ str_ofs=cofs;
+ } else {
+ _set_error("Expected ',' or ')'");
+ }
+ }
+
+ expr=constructor;
+
+ } break;
+ case TK_BUILTIN_FUNC: {
+ //builtin function
+
+ Variant::Type bt = Variant::Type(int(tk.value));
+ _get_token(tk);
+ if (tk.type!=TK_PARENTHESIS_OPEN) {
+ _set_error("Expected '('");
+ return NULL;
+ }
+
+ BuiltinFuncNode *bifunc = alloc_node<BuiltinFuncNode>();
+ bifunc->func=VisualScriptBuiltinFunc::BuiltinFunc(int(tk.value));
+
+ while(true) {
+
+ int cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_PARENTHESIS_CLOSE) {
+ break;
+ }
+ str_ofs=cofs; //revert
+ //parse an expression
+ ENode* expr=_parse_expression();
+ if (!expr)
+ return NULL;
+
+ bifunc->arguments.push_back(expr);
+
+ cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_COMMA) {
+ //all good
+ } else if (tk.type==TK_PARENTHESIS_CLOSE) {
+ str_ofs=cofs;
+ } else {
+ _set_error("Expected ',' or ')'");
+ }
+ }
+
+ int expected_args = VisualScriptBuiltinFunc::get_func_argument_count(bifunc->func);
+ if (bifunc->arguments.size() != expected_args) {
+ _set_error("Builtin func '"+VisualScriptBuiltinFunc::get_func_name(bifunc->func)+"' expects "+itos(expected_args)+" arguments.");
+ }
+
+ expr=bifunc;
+
+ } break;
+ case TK_OP_SUB: {
+
+ Expression e;
+ e.is_op=true;
+ e.op=Variant::OP_NEGATE;
+ expression.push_back(e);
+ continue;
+ } break;
+ case TK_OP_NOT: {
+
+ Expression e;
+ e.is_op=true;
+ e.op=Variant::OP_NOT;
+ expression.push_back(e);
+ continue;
+ } break;
+
+ default: {
+ _set_error("Expected expression.");
+ return NULL;
+ } break;
+
+ }
+
+ //before going to operators, must check indexing!
+
+ while(true) {
+ int cofs2=str_ofs;
+ _get_token(tk);
+ if (error_set)
+ return NULL;
+
+ bool done=false;
+
+ switch(tk.type) {
+ case TK_BRACKET_OPEN: {
+ //value indexing
+
+ IndexNode *index = alloc_node<IndexNode>();
+ index->base=expr;
+
+ ENode* what=_parse_expression();
+ if (!what)
+ return NULL;
+
+ index->index=what;
+
+ _get_token(tk);
+ if (tk.type!=TK_BRACKET_CLOSE) {
+ _set_error("Expected ']' at end of index.");
+ return NULL;
+ }
+ expr=index;
+
+ } break;
+ case TK_PERIOD: {
+ //named indexing or function call
+ _get_token(tk);
+ if (tk.type!=TK_IDENTIFIER) {
+ _set_error("Expected identifier after '.'");
+ return NULL;
+ }
+
+ StringName identifier=tk.value;
+
+ int cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_PARENTHESIS_OPEN) {
+ //function call
+ CallNode *func_call = alloc_node<CallNode>();
+ func_call->method=identifier;
+ func_call->base=expr;
+
+ while(true) {
+
+ int cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_PARENTHESIS_CLOSE) {
+ break;
+ }
+ str_ofs=cofs; //revert
+ //parse an expression
+ ENode* expr=_parse_expression();
+ if (!expr)
+ return NULL;
+
+ func_call->arguments.push_back(expr);
+
+ cofs=str_ofs;
+ _get_token(tk);
+ if (tk.type==TK_COMMA) {
+ //all good
+ } else if (tk.type==TK_PARENTHESIS_CLOSE) {
+ str_ofs=cofs;
+ } else {
+ _set_error("Expected ',' or ')'");
+ }
+ }
+
+ expr=func_call;
+ } else {
+ //named indexing
+ str_ofs=cofs;
+
+ NamedIndexNode *index = alloc_node<NamedIndexNode>();
+ index->base=expr;
+ index->name=identifier;
+ expr=index;
+
+ }
+
+ } break;
+ default: {
+ str_ofs=cofs2;
+ done=true;
+ } break;
+ }
+
+ if (done)
+ break;
+ }
+
+ //push expression
+ {
+ Expression e;
+ e.is_op=false;
+ e.node=expr;
+ expression.push_back(e);
+ }
+
+ //ok finally look for an operator
+
+
+ int cofs=str_ofs;
+ _get_token(tk);
+ if (error_set)
+ return NULL;
+
+
+ Variant::Operator op = Variant::OP_MAX;
+
+ switch(tk.type) {
+ case TK_OP_IN: op=Variant::OP_IN; break;
+ case TK_OP_EQUAL: op=Variant::OP_EQUAL; break;
+ case TK_OP_NOT_EQUAL: op=Variant::OP_NOT_EQUAL; break;
+ case TK_OP_LESS: op=Variant::OP_LESS; break;
+ case TK_OP_LESS_EQUAL: op=Variant::OP_LESS_EQUAL; break;
+ case TK_OP_GREATER: op=Variant::OP_GREATER; break;
+ case TK_OP_GREATER_EQUAL: op=Variant::OP_GREATER_EQUAL; break;
+ case TK_OP_AND: op=Variant::OP_AND; break;
+ case TK_OP_OR: op=Variant::OP_OR; break;
+ case TK_OP_NOT: op=Variant::OP_NOT; break;
+ case TK_OP_ADD: op=Variant::OP_ADD; break;
+ case TK_OP_SUB: op=Variant::OP_SUBSTRACT; break;
+ case TK_OP_MUL: op=Variant::OP_MULTIPLY; break;
+ case TK_OP_DIV: op=Variant::OP_DIVIDE; break;
+ case TK_OP_MOD: op=Variant::OP_MODULE; break;
+ case TK_OP_SHIFT_LEFT: op=Variant::OP_SHIFT_LEFT; break;
+ case TK_OP_SHIFT_RIGHT: op=Variant::OP_SHIFT_RIGHT; break;
+ case TK_OP_BIT_AND: op=Variant::OP_BIT_AND; break;
+ case TK_OP_BIT_OR: op=Variant::OP_BIT_OR; break;
+ case TK_OP_BIT_XOR: op=Variant::OP_BIT_XOR; break;
+ case TK_OP_BIT_INVERT: op=Variant::OP_BIT_NEGATE; break;
+ default: {};
+ }
+
+ if (op==Variant::OP_MAX) { //stop appending stuff
+ str_ofs=cofs;
+ break;
+ }
+
+ //push operator and go on
+ {
+ Expression e;
+ e.is_op=true;
+ e.op=op;
+ expression.push_back(e);
+ }
+ }
+
+
+ /* Reduce the set set of expressions and place them in an operator tree, respecting precedence */
+
+
+ while(expression.size()>1) {
+
+ int next_op=-1;
+ int min_priority=0xFFFFF;
+ bool is_unary=false;
+
+ for(int i=0;i<expression.size();i++) {
+
+
+
+ if (!expression[i].is_op) {
+
+ continue;
+ }
+
+ int priority;
+
+ bool unary=false;
+
+ switch(expression[i].op) {
+
+
+ case Variant::OP_BIT_NEGATE: priority=0; unary=true; break;
+ case Variant::OP_NEGATE: priority=1; unary=true; break;
+
+ case Variant::OP_MULTIPLY: priority=2; break;
+ case Variant::OP_DIVIDE: priority=2; break;
+ case Variant::OP_MODULE: priority=2; break;
+
+ case Variant::OP_ADD: priority=3; break;
+ case Variant::OP_SUBSTRACT: priority=3; break;
+
+ case Variant::OP_SHIFT_LEFT: priority=4; break;
+ case Variant::OP_SHIFT_RIGHT: priority=4; break;
+
+ case Variant::OP_BIT_AND: priority=5; break;
+ case Variant::OP_BIT_XOR: priority=6; break;
+ case Variant::OP_BIT_OR: priority=7; break;
+
+ case Variant::OP_LESS: priority=8; break;
+ case Variant::OP_LESS_EQUAL: priority=8; break;
+ case Variant::OP_GREATER: priority=8; break;
+ case Variant::OP_GREATER_EQUAL: priority=8; break;
+
+ case Variant::OP_EQUAL: priority=8; break;
+ case Variant::OP_NOT_EQUAL: priority=8; break;
+
+ case Variant::OP_IN: priority=10; break;
+
+ case Variant::OP_NOT: priority=11; unary=true; break;
+ case Variant::OP_AND: priority=12; break;
+ case Variant::OP_OR: priority=13; break;
+
+
+ default: {
+ _set_error("Parser bug, invalid operator in expression: "+itos(expression[i].op));
+ return NULL;
+ }
+
+ }
+
+ if (priority<min_priority) {
+ // < is used for left to right (default)
+ // <= is used for right to left
+
+ next_op=i;
+ min_priority=priority;
+ is_unary=unary;
+ }
+
+ }
+
+ if (next_op==-1) {
+
+
+ _set_error("Yet another parser bug....");
+ ERR_FAIL_COND_V(next_op==-1,NULL);
+ }
+
+
+ // OK! create operator..
+ if (is_unary) {
+
+ int expr_pos=next_op;
+ while(expression[expr_pos].is_op) {
+
+ expr_pos++;
+ if (expr_pos==expression.size()) {
+ //can happen..
+ _set_error("Unexpected end of expression..");
+ return NULL;
+ }
+ }
+
+ //consecutively do unary opeators
+ for(int i=expr_pos-1;i>=next_op;i--) {
+
+ OperatorNode *op = alloc_node<OperatorNode>();
+ op->op=expression[i].op;
+ op->nodes[0]=expression[i+1].node;
+ op->nodes[1]=NULL;
+ expression[i].is_op=false;
+ expression[i].node=op;
+ expression.remove(i+1);
+ }
+
+
+ } else {
+
+ if (next_op <1 || next_op>=(expression.size()-1)) {
+ _set_error("Parser bug..");
+ ERR_FAIL_V(NULL);
+ }
+
+ OperatorNode *op = alloc_node<OperatorNode>();
+ op->op=expression[next_op].op;
+
+ if (expression[next_op-1].is_op) {
+
+ _set_error("Parser bug..");
+ ERR_FAIL_V(NULL);
+ }
+
+ if (expression[next_op+1].is_op) {
+ // this is not invalid and can really appear
+ // but it becomes invalid anyway because no binary op
+ // can be followed by an unary op in a valid combination,
+ // due to how precedence works, unaries will always dissapear first
+
+ _set_error("Unexpected two consecutive operators.");
+ return NULL;
+ }
+
+
+ op->nodes[0]=expression[next_op-1].node; //expression goes as left
+ op->nodes[1]=expression[next_op+1].node; //next expression goes as right
+
+ //replace all 3 nodes by this operator and make it an expression
+ expression[next_op-1].node=op;
+ expression.remove(next_op);
+ expression.remove(next_op);
+ }
+ }
+
+ return expression[0].node;
+}
+
+bool VisualScriptExpression::_compile_expression() {
+
+ if (!expression_dirty)
+ return error_set;
+
+ if (nodes) {
+ memdelete(nodes);
+ nodes=NULL;
+ root=NULL;
+
+ }
+
+ error_str=String();
+ error_set=false;
+ str_ofs=0;
+
+ root=_parse_expression();
+
+ if (error_set) {
+ root=NULL;
+ if (nodes) {
+ memdelete(nodes);
+ }
+ nodes=NULL;
+ return true;
+ }
+
+ expression_dirty=false;
+ return false;
+}
+
+
+class VisualScriptNodeInstanceExpression : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+ VisualScriptExpression *expression;
+
+ //virtual int get_working_memory_size() const { return 0; }
+ //execute by parsing the tree directly
+ virtual bool _execute(const Variant** p_inputs,VisualScriptExpression::ENode *p_node,Variant& r_ret,String& r_error_str,Variant::CallError &ce) {
+
+ switch(p_node->type) {
+ case VisualScriptExpression::ENode::TYPE_INPUT: {
+
+ const VisualScriptExpression::InputNode *in = static_cast<const VisualScriptExpression::InputNode*>(p_node);
+ r_ret=*p_inputs[in->index];
+ } break;
+ case VisualScriptExpression::ENode::TYPE_CONSTANT: {
+
+ const VisualScriptExpression::ConstantNode *c = static_cast<const VisualScriptExpression::ConstantNode*>(p_node);
+ r_ret=c->value;
+
+ } break;
+ case VisualScriptExpression::ENode::TYPE_SELF: {
+
+ r_ret=instance->get_owner_ptr();
+ } break;
+ case VisualScriptExpression::ENode::TYPE_OPERATOR: {
+
+
+ const VisualScriptExpression::OperatorNode *op = static_cast<const VisualScriptExpression::OperatorNode*>(p_node);
+
+ Variant a;
+ bool ret = _execute(p_inputs,op->nodes[0],a,r_error_str,ce);
+ if (ret)
+ return true;
+
+ Variant b;
+
+ if (op->nodes[1]) {
+ ret = _execute(p_inputs,op->nodes[1],b,r_error_str,ce);
+ if (ret)
+ return true;
+ }
+
+ bool valid=true;
+ Variant::evaluate(op->op,a,b,r_ret,valid);
+ if (!valid) {
+ r_error_str="Invalid operands to operator "+Variant::get_operator_name(op->op)+": "+Variant::get_type_name(a.get_type())+" and "+Variant::get_type_name(b.get_type())+".";
+ return true;
+ }
+
+ } break;
+ case VisualScriptExpression::ENode::TYPE_INDEX: {
+
+ const VisualScriptExpression::IndexNode *index = static_cast<const VisualScriptExpression::IndexNode*>(p_node);
+
+ Variant base;
+ bool ret = _execute(p_inputs,index->base,base,r_error_str,ce);
+ if (ret)
+ return true;
+
+ Variant idx;
+
+ ret = _execute(p_inputs,index->index,idx,r_error_str,ce);
+ if (ret)
+ return true;
+
+ bool valid;
+ r_ret=base.get(idx,&valid);
+ if (!valid) {
+ r_error_str="Invalid index of type "+Variant::get_type_name(idx.get_type())+" for base of type "+Variant::get_type_name(base.get_type())+".";
+ return true;
+ }
+
+
+
+ } break;
+ case VisualScriptExpression::ENode::TYPE_NAMED_INDEX: {
+
+ const VisualScriptExpression::NamedIndexNode *index = static_cast<const VisualScriptExpression::NamedIndexNode*>(p_node);
+
+ Variant base;
+ bool ret = _execute(p_inputs,index->base,base,r_error_str,ce);
+ if (ret)
+ return true;
+
+ bool valid;
+ r_ret=base.get_named(index->name,&valid);
+ if (!valid) {
+ r_error_str="Invalid index '"+String(index->name)+"' for base of type "+Variant::get_type_name(base.get_type())+".";
+ return true;
+ }
+
+ } break;
+ case VisualScriptExpression::ENode::TYPE_ARRAY: {
+ const VisualScriptExpression::ArrayNode *array = static_cast<const VisualScriptExpression::ArrayNode*>(p_node);
+
+ Array arr;
+ arr.resize(array->array.size());
+ for (int i=0;i<array->array.size();i++) {
+
+ Variant value;
+ bool ret = _execute(p_inputs,array->array[i],value,r_error_str,ce);
+ if (ret)
+ return true;
+ arr[i]=value;
+ }
+
+ r_ret=arr;
+
+ } break;
+ case VisualScriptExpression::ENode::TYPE_DICTIONARY: {
+ const VisualScriptExpression::DictionaryNode *dictionary = static_cast<const VisualScriptExpression::DictionaryNode*>(p_node);
+
+ Dictionary d;
+ for (int i=0;i<dictionary->dict.size();i+=2) {
+
+ Variant key;
+ bool ret = _execute(p_inputs,dictionary->dict[i+0],key,r_error_str,ce);
+ if (ret)
+ return true;
+
+ Variant value;
+ ret = _execute(p_inputs,dictionary->dict[i+1],value,r_error_str,ce);
+ if (ret)
+ return true;
+
+ d[key]=value;
+ }
+
+ r_ret=d;
+ } break;
+ case VisualScriptExpression::ENode::TYPE_CONSTRUCTOR: {
+
+ const VisualScriptExpression::ConstructorNode *constructor = static_cast<const VisualScriptExpression::ConstructorNode*>(p_node);
+
+ Vector<Variant> arr;
+ Vector<const Variant*> argp;
+ arr.resize(constructor->arguments.size());
+ argp.resize(constructor->arguments.size());
+
+ for (int i=0;i<constructor->arguments.size();i++) {
+
+ Variant value;
+ bool ret = _execute(p_inputs,constructor->arguments[i],value,r_error_str,ce);
+ if (ret)
+ return true;
+ arr[i]=value;
+ argp[i]=&arr[i];
+ }
+
+
+ r_ret=Variant::construct(constructor->data_type,argp.ptr(),argp.size(),ce);
+
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ r_error_str="Invalid arguments to construct '"+Variant::get_type_name(constructor->data_type)+"'.";
+ return true;
+ }
+
+
+ } break;
+ case VisualScriptExpression::ENode::TYPE_BUILTIN_FUNC: {
+
+ const VisualScriptExpression::BuiltinFuncNode *bifunc = static_cast<const VisualScriptExpression::BuiltinFuncNode*>(p_node);
+
+ Vector<Variant> arr;
+ Vector<const Variant*> argp;
+ arr.resize(bifunc->arguments.size());
+ argp.resize(bifunc->arguments.size());
+
+ for (int i=0;i<bifunc->arguments.size();i++) {
+
+ Variant value;
+ bool ret = _execute(p_inputs,bifunc->arguments[i],value,r_error_str,ce);
+ if (ret)
+ return true;
+ arr[i]=value;
+ argp[i]=&arr[i];
+ }
+
+
+ VisualScriptBuiltinFunc::exec_func(bifunc->func,argp.ptr(),&r_ret,ce,r_error_str);
+
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ r_error_str="Builtin Call Failed. "+r_error_str;
+ return true;
+ }
+
+ } break;
+ case VisualScriptExpression::ENode::TYPE_CALL: {
+
+ const VisualScriptExpression::CallNode *call = static_cast<const VisualScriptExpression::CallNode*>(p_node);
+
+
+ Variant base;
+ bool ret = _execute(p_inputs,call->base,base,r_error_str,ce);
+ if (ret)
+ return true;
+
+ Vector<Variant> arr;
+ Vector<const Variant*> argp;
+ arr.resize(call->arguments.size());
+ argp.resize(call->arguments.size());
+
+ for (int i=0;i<call->arguments.size();i++) {
+
+ Variant value;
+ bool ret = _execute(p_inputs,call->arguments[i],value,r_error_str,ce);
+ if (ret)
+ return true;
+ arr[i]=value;
+ argp[i]=&arr[i];
+ }
+
+
+ r_ret=base.call(call->method,argp.ptr(),argp.size(),ce);
+
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ r_error_str="On call to '"+String(call->method)+"':";
+ return true;
+ }
+
+ } break;
+ }
+ return false;
+ }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ if (!expression->root || expression->error_set) {
+ r_error_str=expression->error_str;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ return 0;
+ }
+
+
+ bool error = _execute(p_inputs,expression->root,*p_outputs[0],r_error_str,r_error);
+ if (error && r_error.error==Variant::CallError::CALL_OK) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ }
+
+#ifdef DEBUG_ENABLED
+ if (!error && expression->output_type!=Variant::NIL && !Variant::can_convert_strict(p_outputs[0]->get_type(),expression->output_type)) {
+
+ r_error_str+="Can't convert expression result from "+Variant::get_type_name(p_outputs[0]->get_type())+" to "+Variant::get_type_name(expression->output_type)+".";
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+
+ }
+#endif
+
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptExpression::instance(VisualScriptInstance* p_instance){
+
+ _compile_expression();
+ VisualScriptNodeInstanceExpression *instance = memnew( VisualScriptNodeInstanceExpression );
+ instance->instance=p_instance;
+ instance->expression=this;
+ return instance;
+}
+
+
+VisualScriptExpression::VisualScriptExpression()
+{
+ output_type=Variant::NIL;
+ expression_dirty=true;
+ error_set=true;
+ root=NULL;
+ nodes=NULL;
+ sequenced=false;
+}
+
+VisualScriptExpression::~VisualScriptExpression() {
+
+ if (nodes) {
+ memdelete(nodes);
+ }
+}
+
+
+void register_visual_script_expression_node() {
+
+ VisualScriptLanguage::singleton->add_register_func("operators/expression",create_node_generic<VisualScriptExpression>);
+
+}
diff --git a/modules/visual_script/visual_script_expression.h b/modules/visual_script/visual_script_expression.h
new file mode 100644
index 0000000000..4edae133c7
--- /dev/null
+++ b/modules/visual_script/visual_script_expression.h
@@ -0,0 +1,280 @@
+#ifndef VISUALSCRIPTEXPRESSION_H
+#define VISUALSCRIPTEXPRESSION_H
+
+#include "visual_script.h"
+#include "visual_script_builtin_funcs.h"
+
+class VisualScriptExpression : public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptExpression,VisualScriptNode)
+friend class VisualScriptNodeInstanceExpression;
+
+ struct Input {
+
+ Variant::Type type;
+ String name;
+
+ Input() { type=Variant::NIL; }
+ };
+
+ Vector<Input> inputs;
+ Variant::Type output_type;
+
+ String expression;
+
+ bool sequenced;
+ int str_ofs;
+ bool expression_dirty;
+
+ bool _compile_expression();
+
+ enum TokenType {
+ TK_CURLY_BRACKET_OPEN,
+ TK_CURLY_BRACKET_CLOSE,
+ TK_BRACKET_OPEN,
+ TK_BRACKET_CLOSE,
+ TK_PARENTHESIS_OPEN,
+ TK_PARENTHESIS_CLOSE,
+ TK_IDENTIFIER,
+ TK_BUILTIN_FUNC,
+ TK_SELF,
+ TK_CONSTANT,
+ TK_BASIC_TYPE,
+ TK_COLON,
+ TK_COMMA,
+ TK_PERIOD,
+ TK_OP_IN,
+ TK_OP_EQUAL,
+ TK_OP_NOT_EQUAL,
+ TK_OP_LESS,
+ TK_OP_LESS_EQUAL,
+ TK_OP_GREATER,
+ TK_OP_GREATER_EQUAL,
+ TK_OP_AND,
+ TK_OP_OR,
+ TK_OP_NOT,
+ TK_OP_ADD,
+ TK_OP_SUB,
+ TK_OP_MUL,
+ TK_OP_DIV,
+ TK_OP_MOD,
+ TK_OP_SHIFT_LEFT,
+ TK_OP_SHIFT_RIGHT,
+ TK_OP_BIT_AND,
+ TK_OP_BIT_OR,
+ TK_OP_BIT_XOR,
+ TK_OP_BIT_INVERT,
+ TK_EOF,
+ TK_ERROR,
+ TK_MAX
+ };
+
+ static const char* token_name[TK_MAX];
+ struct Token {
+
+ TokenType type;
+ Variant value;
+ };
+
+
+ void _set_error(const String& p_err) {
+ if (error_set)
+ return;
+ error_str=p_err;
+ error_set=true;
+ }
+
+ Error _get_token(Token& r_token);
+
+ String error_str;
+ bool error_set;
+
+
+
+ struct ENode {
+
+ enum Type {
+ TYPE_INPUT,
+ TYPE_CONSTANT,
+ TYPE_SELF,
+ TYPE_OPERATOR,
+ TYPE_INDEX,
+ TYPE_NAMED_INDEX,
+ TYPE_ARRAY,
+ TYPE_DICTIONARY,
+ TYPE_CONSTRUCTOR,
+ TYPE_BUILTIN_FUNC,
+ TYPE_CALL
+ };
+
+ ENode *next;
+
+ Type type;
+
+ ENode() { next=NULL; }
+ virtual ~ENode() { if (next) { memdelete(next); } }
+ };
+
+ struct Expression {
+
+ bool is_op;
+ union {
+ Variant::Operator op;
+ ENode *node;
+ };
+ };
+
+ ENode* _parse_expression();
+
+ struct InputNode : public ENode {
+
+ int index;
+ InputNode() {
+ type=TYPE_INPUT;
+ }
+ };
+
+
+ struct ConstantNode : public ENode {
+
+ Variant value;
+ ConstantNode() {
+ type=TYPE_CONSTANT;
+ }
+ };
+
+ struct OperatorNode : public ENode {
+
+ Variant::Operator op;
+
+ ENode* nodes[2];
+
+ OperatorNode() {
+ type=TYPE_OPERATOR;
+ }
+ };
+
+ struct SelfNode : public ENode {
+
+
+ SelfNode() {
+ type=TYPE_SELF;
+ }
+ };
+
+ struct IndexNode : public ENode {
+ ENode*base;
+ ENode*index;
+
+ IndexNode() {
+ type=TYPE_INDEX;
+ }
+ };
+
+ struct NamedIndexNode : public ENode {
+ ENode*base;
+ StringName name;
+
+ NamedIndexNode() {
+ type=TYPE_NAMED_INDEX;
+ }
+
+ };
+
+ struct ConstructorNode : public ENode {
+ Variant::Type data_type;
+ Vector<ENode*> arguments;
+
+ ConstructorNode() {
+ type=TYPE_CONSTRUCTOR;
+ }
+ };
+
+ struct CallNode : public ENode {
+ ENode*base;
+ StringName method;
+ Vector<ENode*> arguments;
+
+ CallNode() {
+ type=TYPE_CALL;
+ }
+
+ };
+
+ struct ArrayNode : public ENode {
+ Vector<ENode*> array;
+ ArrayNode() {
+ type=TYPE_ARRAY;
+ }
+
+ };
+
+ struct DictionaryNode : public ENode {
+ Vector<ENode*> dict;
+ DictionaryNode() {
+ type=TYPE_DICTIONARY;
+ }
+
+ };
+
+ struct BuiltinFuncNode : public ENode {
+ VisualScriptBuiltinFunc::BuiltinFunc func;
+ Vector<ENode*> arguments;
+ BuiltinFuncNode() {
+ type=TYPE_BUILTIN_FUNC;
+ }
+ };
+
+ template<class T>
+ T* alloc_node() {
+ T* node = memnew(T);
+ node->next=nodes;
+ nodes=node;
+ return node;
+ }
+
+ ENode *root;
+ ENode *nodes;
+
+
+
+
+
+protected:
+
+ bool _set(const StringName& p_name, const Variant& p_value);
+ bool _get(const StringName& p_name,Variant &r_ret) const;
+ void _get_property_list( List<PropertyInfo> *p_list) const;
+
+public:
+
+
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const { return "operators"; }
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptExpression();
+ ~VisualScriptExpression();
+};
+
+
+void register_visual_script_expression_node();
+
+
+#endif // VISUALSCRIPTEXPRESSION_H
diff --git a/modules/visual_script/visual_script_flow_control.cpp b/modules/visual_script/visual_script_flow_control.cpp
index cb0ff4086c..97338da187 100644
--- a/modules/visual_script/visual_script_flow_control.cpp
+++ b/modules/visual_script/visual_script_flow_control.cpp
@@ -2,6 +2,7 @@
#include "os/keyboard.h"
#include "globals.h"
+
//////////////////////////////////////////
////////////////RETURN////////////////////
//////////////////////////////////////////
@@ -85,7 +86,7 @@ void VisualScriptReturn::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_enable_return_value","enable"),&VisualScriptReturn::set_enable_return_value);
ObjectTypeDB::bind_method(_MD("is_return_value_enabled"),&VisualScriptReturn::is_return_value_enabled);
- String argt="Variant";
+ String argt="Any";
for(int i=1;i<Variant::VARIANT_MAX;i++) {
argt+=","+Variant::get_type_name(Variant::Type(i));
}
@@ -152,7 +153,7 @@ static Ref<VisualScriptNode> create_return_node(const String& p_name) {
int VisualScriptCondition::get_output_sequence_port_count() const {
- return 2;
+ return 3;
}
bool VisualScriptCondition::has_input_sequence_port() const{
@@ -173,8 +174,10 @@ String VisualScriptCondition::get_output_sequence_port_text(int p_port) const {
if (p_port==0)
return "true";
- else
+ else if (p_port==1)
return "false";
+ else
+ return "done";
}
PropertyInfo VisualScriptCondition::get_input_value_port_info(int p_idx) const{
@@ -217,10 +220,12 @@ public:
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
- if (p_inputs[0]->operator bool())
- return 0;
+ if (p_start_mode==START_MODE_CONTINUE_SEQUENCE)
+ return 2;
+ else if (p_inputs[0]->operator bool())
+ return 0 | STEP_FLAG_PUSH_STACK_BIT;
else
- return 1;
+ return 1 | STEP_FLAG_PUSH_STACK_BIT;
}
@@ -598,70 +603,64 @@ VisualScriptSequence::VisualScriptSequence() {
////////////////EVENT TYPE FILTER///////////
//////////////////////////////////////////
-static const char* event_type_names[InputEvent::TYPE_MAX]={
- "None",
- "Key",
- "MouseMotion",
- "MouseButton",
- "JoystickMotion",
- "JoystickButton",
- "ScreenTouch",
- "ScreenDrag",
- "Action"
-};
-
-int VisualScriptInputSelector::get_output_sequence_port_count() const {
+int VisualScriptSwitch::get_output_sequence_port_count() const {
- return InputEvent::TYPE_MAX;
+ return case_values.size()+1;
}
-bool VisualScriptInputSelector::has_input_sequence_port() const{
+bool VisualScriptSwitch::has_input_sequence_port() const{
return true;
}
-int VisualScriptInputSelector::get_input_value_port_count() const{
+int VisualScriptSwitch::get_input_value_port_count() const{
- return 1;
+ return case_values.size()+1;
}
-int VisualScriptInputSelector::get_output_value_port_count() const{
+int VisualScriptSwitch::get_output_value_port_count() const{
- return 1;
+ return 0;
}
-String VisualScriptInputSelector::get_output_sequence_port_text(int p_port) const {
+String VisualScriptSwitch::get_output_sequence_port_text(int p_port) const {
+
+ if (p_port==case_values.size())
+ return "done";
- return event_type_names[p_port];
+ return String();
}
-PropertyInfo VisualScriptInputSelector::get_input_value_port_info(int p_idx) const{
+PropertyInfo VisualScriptSwitch::get_input_value_port_info(int p_idx) const{
- return PropertyInfo(Variant::INPUT_EVENT,"event");
+ if (p_idx<case_values.size()) {
+ return PropertyInfo(case_values[p_idx].type," =");
+ } else
+ return PropertyInfo(Variant::NIL,"input");
}
-PropertyInfo VisualScriptInputSelector::get_output_value_port_info(int p_idx) const{
+PropertyInfo VisualScriptSwitch::get_output_value_port_info(int p_idx) const{
- return PropertyInfo(Variant::INPUT_EVENT,"");
+ return PropertyInfo();
}
-String VisualScriptInputSelector::get_caption() const {
+String VisualScriptSwitch::get_caption() const {
- return "InputSelector";
+ return "Switch";
}
-String VisualScriptInputSelector::get_text() const {
+String VisualScriptSwitch::get_text() const {
- return "";
+ return "'input' is:";
}
-class VisualScriptNodeInstanceInputSelector : public VisualScriptNodeInstance {
+class VisualScriptNodeInstanceSwitch : public VisualScriptNodeInstance {
public:
VisualScriptInstance* instance;
- InputEvent::Type type;
+ int case_count;
//virtual int get_working_memory_size() const { return 0; }
//virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
@@ -669,37 +668,95 @@ public:
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
- if (p_inputs[0]->get_type()!=Variant::INPUT_EVENT) {
- r_error_str="Input value not of type event";
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- return 0;
+ if (p_start_mode==START_MODE_CONTINUE_SEQUENCE) {
+ return case_count; //exit
}
- InputEvent event = *p_inputs[0];
+ for(int i=0;i<case_count;i++) {
- *p_outputs[0] = event;
+ if (*p_inputs[i]==*p_inputs[case_count]) {
+ return i|STEP_FLAG_PUSH_STACK_BIT;
+ }
+ }
- return event.type;
+ return case_count;
}
};
-VisualScriptNodeInstance* VisualScriptInputSelector::instance(VisualScriptInstance* p_instance) {
+VisualScriptNodeInstance* VisualScriptSwitch::instance(VisualScriptInstance* p_instance) {
- VisualScriptNodeInstanceInputSelector * instance = memnew(VisualScriptNodeInstanceInputSelector );
+ VisualScriptNodeInstanceSwitch * instance = memnew(VisualScriptNodeInstanceSwitch );
instance->instance=p_instance;
+ instance->case_count=case_values.size();
return instance;
}
+bool VisualScriptSwitch::_set(const StringName& p_name, const Variant& p_value) {
+ if (String(p_name)=="case_count") {
+ case_values.resize(p_value);
+ _change_notify();
+ ports_changed_notify();
+ return true;
+ }
-void VisualScriptInputSelector::_bind_methods() {
+ if (String(p_name).begins_with("case/")) {
+ int idx = String(p_name).get_slice("/",1).to_int();
+ ERR_FAIL_INDEX_V(idx,case_values.size(),false);
+ case_values[idx].type=Variant::Type(int(p_value));
+ _change_notify();
+ ports_changed_notify();
+
+ return true;
+ }
+
+ return false;
}
-VisualScriptInputSelector::VisualScriptInputSelector() {
+bool VisualScriptSwitch::_get(const StringName& p_name,Variant &r_ret) const {
+
+ if (String(p_name)=="case_count") {
+ r_ret=case_values.size();
+ return true;
+ }
+
+ if (String(p_name).begins_with("case/")) {
+
+ int idx = String(p_name).get_slice("/",1).to_int();
+ ERR_FAIL_INDEX_V(idx,case_values.size(),false);
+
+ r_ret=case_values[idx].type;
+ return true;
+ }
+
+ return false;
+
+}
+void VisualScriptSwitch::_get_property_list( List<PropertyInfo> *p_list) const {
+
+ p_list->push_back(PropertyInfo(Variant::INT,"case_count",PROPERTY_HINT_RANGE,"0,128"));
+
+ String argt="Any";
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+ argt+=","+Variant::get_type_name(Variant::Type(i));
+ }
+
+ for(int i=0;i<case_values.size();i++) {
+ p_list->push_back(PropertyInfo(Variant::INT,"case/"+itos(i),PROPERTY_HINT_ENUM,argt));
+ }
+}
+
+
+void VisualScriptSwitch::_bind_methods() {
+
+
+}
+
+VisualScriptSwitch::VisualScriptSwitch() {
}
@@ -1354,6 +1411,19 @@ bool VisualScriptInputFilter::_get(const StringName& p_name,Variant &r_ret) cons
}
return false;
}
+
+static const char* event_type_names[InputEvent::TYPE_MAX]={
+ "None",
+ "Key",
+ "MouseMotion",
+ "MouseButton",
+ "JoystickMotion",
+ "JoystickButton",
+ "ScreenTouch",
+ "ScreenDrag",
+ "Action"
+};
+
void VisualScriptInputFilter::_get_property_list( List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::INT,"filter_count",PROPERTY_HINT_RANGE,"0,64"));
@@ -1660,6 +1730,197 @@ VisualScriptInputFilter::VisualScriptInputFilter() {
}
+//////////////////////////////////////////
+////////////////TYPE CAST///////////
+//////////////////////////////////////////
+
+
+int VisualScriptTypeCast::get_output_sequence_port_count() const {
+
+ return 2;
+}
+
+bool VisualScriptTypeCast::has_input_sequence_port() const{
+
+ return true;
+}
+
+int VisualScriptTypeCast::get_input_value_port_count() const{
+
+
+ return 1;
+}
+int VisualScriptTypeCast::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptTypeCast::get_output_sequence_port_text(int p_port) const {
+
+ return p_port==0 ? "yes" : "no";
+}
+
+PropertyInfo VisualScriptTypeCast::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo(Variant::OBJECT,"instance");
+}
+
+PropertyInfo VisualScriptTypeCast::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(Variant::OBJECT,"");
+}
+
+
+String VisualScriptTypeCast::get_caption() const {
+
+ return "TypeCast";
+}
+
+String VisualScriptTypeCast::get_text() const {
+
+ if (script!=String())
+ return "Is "+script.get_file()+"?";
+ else
+ return "Is "+base_type+"?";
+}
+
+void VisualScriptTypeCast::set_base_type(const StringName& p_type) {
+
+ if (base_type==p_type)
+ return;
+
+ base_type=p_type;
+ _change_notify();
+ ports_changed_notify();
+}
+
+StringName VisualScriptTypeCast::get_base_type() const{
+
+ return base_type;
+}
+
+void VisualScriptTypeCast::set_base_script(const String& p_path){
+
+ if (script==p_path)
+ return;
+
+ script=p_path;
+ _change_notify();
+ ports_changed_notify();
+
+}
+String VisualScriptTypeCast::get_base_script() const{
+
+ return script;
+}
+
+
+class VisualScriptNodeInstanceTypeCast : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+ StringName base_type;
+ String script;
+
+ //virtual int get_working_memory_size() const { return 0; }
+ //virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
+ //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ Object *obj = *p_inputs[0];
+
+ *p_outputs[0]=Variant();
+
+ if (!obj) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Instance is null";
+ return 0;
+ }
+
+ if (script!=String()) {
+
+ Ref<Script> obj_script = obj->get_script();
+ if (!obj_script.is_valid()) {
+ return 1; //well, definitely not the script because object we got has no script.
+ }
+
+ if (!ResourceCache::has(script)) {
+ //if the script is not in use by anyone, we can safely assume whathever we got is not casting to it.
+ return 1;
+ }
+ Ref<Script> cast_script = Ref<Resource>(ResourceCache::get(script));
+ if (!cast_script.is_valid()) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Script path is not a script: "+script;
+ return 1;
+ }
+
+ while(obj_script.is_valid()) {
+
+ if (cast_script==obj_script) {
+ *p_outputs[0]=*p_inputs[0]; //copy
+ return 0; // it is the script, yey
+ }
+
+ obj_script=obj_script->get_base_script();
+ }
+
+ return 1; //not found sorry
+ }
+
+ if (ObjectTypeDB::is_type(obj->get_type_name(),base_type)) {
+ *p_outputs[0]=*p_inputs[0]; //copy
+ return 0;
+ } else
+ return 1;
+
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptTypeCast::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceTypeCast * instance = memnew(VisualScriptNodeInstanceTypeCast );
+ instance->instance=p_instance;
+ instance->base_type=base_type;
+ instance->script=script;
+ return instance;
+}
+
+
+
+void VisualScriptTypeCast::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_base_type","type"),&VisualScriptTypeCast::set_base_type);
+ ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptTypeCast::get_base_type);
+
+ ObjectTypeDB::bind_method(_MD("set_base_script","path"),&VisualScriptTypeCast::set_base_script);
+ ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptTypeCast::get_base_script);
+
+
+ List<String> script_extensions;
+ for(int i=0;i>ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions);
+ }
+
+ String script_ext_hint;
+ for (List<String>::Element *E=script_extensions.front();E;E=E->next()) {
+ if (script_ext_hint!=String())
+ script_ext_hint+=",";
+ script_ext_hint+="*."+E->get();
+ }
+
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script"));
+
+}
+
+VisualScriptTypeCast::VisualScriptTypeCast() {
+
+ base_type="Object";
+}
void register_visual_script_flow_control_nodes() {
@@ -1670,8 +1931,9 @@ void register_visual_script_flow_control_nodes() {
VisualScriptLanguage::singleton->add_register_func("flow_control/while",create_node_generic<VisualScriptWhile>);
VisualScriptLanguage::singleton->add_register_func("flow_control/iterator",create_node_generic<VisualScriptIterator>);
VisualScriptLanguage::singleton->add_register_func("flow_control/sequence",create_node_generic<VisualScriptSequence>);
- VisualScriptLanguage::singleton->add_register_func("flow_control/input_select",create_node_generic<VisualScriptInputSelector>);
+ VisualScriptLanguage::singleton->add_register_func("flow_control/switch",create_node_generic<VisualScriptSwitch>);
VisualScriptLanguage::singleton->add_register_func("flow_control/input_filter",create_node_generic<VisualScriptInputFilter>);
+ VisualScriptLanguage::singleton->add_register_func("flow_control/type_cast",create_node_generic<VisualScriptTypeCast>);
diff --git a/modules/visual_script/visual_script_flow_control.h b/modules/visual_script/visual_script_flow_control.h
index ed0e328629..e0da84a534 100644
--- a/modules/visual_script/visual_script_flow_control.h
+++ b/modules/visual_script/visual_script_flow_control.h
@@ -197,14 +197,24 @@ public:
-class VisualScriptInputSelector : public VisualScriptNode {
+class VisualScriptSwitch : public VisualScriptNode {
- OBJ_TYPE(VisualScriptInputSelector,VisualScriptNode)
+ OBJ_TYPE(VisualScriptSwitch,VisualScriptNode)
+ struct Case {
+ Variant::Type type;
+ Case() { type=Variant::NIL; }
+ };
+ Vector<Case> case_values;
+friend class VisualScriptNodeInstanceSwitch;
protected:
+ bool _set(const StringName& p_name, const Variant& p_value);
+ bool _get(const StringName& p_name,Variant &r_ret) const;
+ void _get_property_list( List<PropertyInfo> *p_list) const;
+
static void _bind_methods();
public:
@@ -213,6 +223,7 @@ public:
virtual String get_output_sequence_port_text(int p_port) const;
+ virtual bool has_mixed_input_and_sequence_ports() const { return true; }
virtual int get_input_value_port_count() const;
@@ -229,7 +240,7 @@ public:
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
- VisualScriptInputSelector();
+ VisualScriptSwitch();
};
@@ -273,6 +284,56 @@ public:
VisualScriptInputFilter();
};
+
+
+
+
+class VisualScriptTypeCast : public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptTypeCast,VisualScriptNode)
+
+
+ StringName base_type;
+ String script;
+
+protected:
+
+ static void _bind_methods();
+public:
+
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const { return "flow_control"; }
+
+ void set_base_type(const StringName& p_type);
+ StringName get_base_type() const;
+
+ void set_base_script(const String& p_path);
+ String get_base_script() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+
+ VisualScriptTypeCast();
+};
+
+
+
+
void register_visual_script_flow_control_nodes();
diff --git a/modules/visual_script/visual_script_func_nodes.cpp b/modules/visual_script/visual_script_func_nodes.cpp
index 4006dab4a5..5a21cb40e9 100644
--- a/modules/visual_script/visual_script_func_nodes.cpp
+++ b/modules/visual_script/visual_script_func_nodes.cpp
@@ -3,6 +3,8 @@
#include "os/os.h"
#include "scene/main/node.h"
#include "visual_script_nodes.h"
+#include "io/resource_loader.h"
+#include "globals.h"
//////////////////////////////////////////
////////////////CALL//////////////////////
@@ -10,12 +12,18 @@
int VisualScriptFunctionCall::get_output_sequence_port_count() const {
- return 1;
+ if (method_cache.flags&METHOD_FLAG_CONST || call_mode==CALL_MODE_BASIC_TYPE)
+ return 0;
+ else
+ return 1;
}
bool VisualScriptFunctionCall::has_input_sequence_port() const{
- return true;
+ if (method_cache.flags&METHOD_FLAG_CONST || call_mode==CALL_MODE_BASIC_TYPE)
+ return false;
+ else
+ return true;
}
#ifdef TOOLS_ENABLED
@@ -91,20 +99,23 @@ StringName VisualScriptFunctionCall::_get_base_type() const {
return base_type;
}
+
int VisualScriptFunctionCall::get_input_value_port_count() const{
if (call_mode==CALL_MODE_BASIC_TYPE) {
Vector<StringName> names = Variant::get_method_argument_names(basic_type,function);
- return names.size()+1;
+ return names.size() + (rpc_call_mode>=RPC_RELIABLE_TO_ID?1:0) + 1;
} else {
+
MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function);
- if (!mb)
- return 0;
+ if (mb) {
+ return mb->get_argument_count() + (call_mode==CALL_MODE_INSTANCE?1:0) + (rpc_call_mode>=RPC_RELIABLE_TO_ID?1:0) - use_default_args;
+ }
- return mb->get_argument_count() + (call_mode==CALL_MODE_INSTANCE?1:0) - use_default_args;
+ return method_cache.arguments.size() + (call_mode==CALL_MODE_INSTANCE?1:0) + (rpc_call_mode>=RPC_RELIABLE_TO_ID?1:0) - use_default_args;
}
}
@@ -117,11 +128,18 @@ int VisualScriptFunctionCall::get_output_value_port_count() const{
return returns?1:0;
} else {
+ int ret;
MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function);
- if (!mb)
- return 0;
+ if (mb) {
+ ret = mb->has_return() ? 1 : 0;
+ } else
+ ret = 1; //it is assumed that script always returns something
+
+ if (call_mode==CALL_MODE_INSTANCE) {
+ ret++;
+ }
- return mb->has_return() ? 1 : 0;
+ return ret;
}
}
@@ -143,6 +161,16 @@ PropertyInfo VisualScriptFunctionCall::get_input_value_port_info(int p_idx) cons
}
}
+ if (rpc_call_mode>=RPC_RELIABLE_TO_ID) {
+
+ if (p_idx==0) {
+ return PropertyInfo(Variant::INT,"peer_id");
+ } else {
+ p_idx--;
+ }
+
+ }
+
#ifdef DEBUG_METHODS_ENABLED
if (call_mode==CALL_MODE_BASIC_TYPE) {
@@ -155,10 +183,15 @@ PropertyInfo VisualScriptFunctionCall::get_input_value_port_info(int p_idx) cons
} else {
MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function);
- if (!mb)
- return PropertyInfo();
+ if (mb) {
+ return mb->get_argument_info(p_idx);
+ }
+
+ if (p_idx>=0 && p_idx < method_cache.arguments.size()) {
+ return method_cache.arguments[p_idx];
+ }
- return mb->get_argument_info(p_idx);
+ return PropertyInfo();
}
#else
return PropertyInfo();
@@ -177,13 +210,34 @@ PropertyInfo VisualScriptFunctionCall::get_output_value_port_info(int p_idx) con
return PropertyInfo(Variant::get_method_return_type(basic_type,function),"");
} else {
- MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function);
- if (!mb)
- return PropertyInfo();
+ if (call_mode==CALL_MODE_INSTANCE) {
+ if (p_idx==0) {
+ return PropertyInfo(Variant::OBJECT,"pass");
+ } else {
+ p_idx--;
+ }
+ }
+
+ PropertyInfo ret;
+
+ /*MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function);
+ if (mb) {
+
+ ret = mb->get_argument_info(-1);
+ } else {*/
+
+ ret = method_cache.return_val;
+
+ //}
+
+ if (call_mode==CALL_MODE_INSTANCE) {
+ ret.name="return";
+ } else {
+ ret.name="";
+ }
+ return ret;
+
- PropertyInfo pi = mb->get_argument_info(-1);
- pi.name="";
- return pi;
}
#else
return PropertyInfo();
@@ -193,59 +247,38 @@ PropertyInfo VisualScriptFunctionCall::get_output_value_port_info(int p_idx) con
String VisualScriptFunctionCall::get_caption() const {
- static const char*cname[4]= {
+ static const char*cname[5]= {
"CallSelf",
"CallNode",
"CallInstance",
- "CallBasic"
+ "CallBasic",
+ "CallSingleton"
};
- return cname[call_mode];
+ String caption = cname[call_mode];
+
+ if (rpc_call_mode) {
+ caption+=" (RPC)";
+ }
+
+ return caption;
}
String VisualScriptFunctionCall::get_text() const {
if (call_mode==CALL_MODE_SELF)
return " "+String(function)+"()";
+ if (call_mode==CALL_MODE_SINGLETON)
+ return String(singleton)+":"+String(function)+"()";
else if (call_mode==CALL_MODE_BASIC_TYPE)
return Variant::get_type_name(basic_type)+"."+String(function)+"()";
+ else if (call_mode==CALL_MODE_NODE_PATH)
+ return " ["+String(base_path.simplified())+"]."+String(function)+"()";
else
return " "+base_type+"."+String(function)+"()";
}
-void VisualScriptFunctionCall::_update_defargs() {
-
- //save base type if accessible
-
- if (call_mode==CALL_MODE_NODE_PATH) {
-
- Node* node=_get_base_node();
- if (node) {
- base_type=node->get_type();
- }
- } else if (call_mode==CALL_MODE_SELF) {
-
- if (get_visual_script().is_valid()) {
- base_type=get_visual_script()->get_instance_base_type();
- }
- }
-
-
- if (call_mode==CALL_MODE_BASIC_TYPE) {
- use_default_args = Variant::get_method_default_arguments(basic_type,function).size();
- } else {
- if (!get_visual_script().is_valid())
- return; //do not change if not valid yet
-
- MethodBind *mb = ObjectTypeDB::get_method(_get_base_type(),function);
- if (!mb)
- return;
-
- use_default_args=mb->get_default_argument_count();
- }
-
-}
void VisualScriptFunctionCall::set_basic_type(Variant::Type p_type) {
@@ -253,7 +286,7 @@ void VisualScriptFunctionCall::set_basic_type(Variant::Type p_type) {
return;
basic_type=p_type;
- _update_defargs();
+
_change_notify();
ports_changed_notify();
}
@@ -269,7 +302,6 @@ void VisualScriptFunctionCall::set_base_type(const StringName& p_type) {
return;
base_type=p_type;
- _update_defargs();
_change_notify();
ports_changed_notify();
}
@@ -279,13 +311,144 @@ StringName VisualScriptFunctionCall::get_base_type() const{
return base_type;
}
+void VisualScriptFunctionCall::set_base_script(const String& p_path) {
+
+ if (base_script==p_path)
+ return;
+
+ base_script=p_path;
+ _change_notify();
+ ports_changed_notify();
+}
+
+String VisualScriptFunctionCall::get_base_script() const {
+
+ return base_script;
+}
+
+void VisualScriptFunctionCall::set_singleton(const StringName& p_path) {
+
+ if (singleton==p_path)
+ return;
+
+ singleton=p_path;
+ Object *obj = Globals::get_singleton()->get_singleton_object(singleton);
+ if (obj) {
+ base_type=obj->get_type();
+ }
+
+ _change_notify();
+ ports_changed_notify();
+}
+
+StringName VisualScriptFunctionCall::get_singleton() const {
+
+ return singleton;
+}
+
+
+
+void VisualScriptFunctionCall::_update_method_cache() {
+ StringName type;
+ Ref<Script> script;
+
+ if (call_mode==CALL_MODE_NODE_PATH) {
+
+ Node* node=_get_base_node();
+ if (node) {
+ type=node->get_type();
+ base_type=type; //cache, too
+ script = node->get_script();
+ }
+ } else if (call_mode==CALL_MODE_SELF) {
+
+ if (get_visual_script().is_valid()) {
+ type=get_visual_script()->get_instance_base_type();
+ base_type=type; //cache, too
+ script=get_visual_script();
+ }
+
+ } else if (call_mode==CALL_MODE_SINGLETON) {
+
+ Object *obj = Globals::get_singleton()->get_singleton_object(singleton);
+ if (obj) {
+ type=obj->get_type();
+ script=obj->get_script();
+ }
+
+ } else if (call_mode==CALL_MODE_INSTANCE) {
+
+ type=base_type;
+ if (base_script!=String()) {
+
+ if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) {
+
+ ScriptServer::edit_request_func(base_script); //make sure it's loaded
+ }
+
+ if (ResourceCache::has(base_script)) {
+
+ script = Ref<Resource>( ResourceCache::get(base_script) );
+ } else {
+ return;
+ }
+ }
+ }
+
+
+// print_line("BASE: "+String(type)+" FUNC: "+String(function));
+ MethodBind *mb = ObjectTypeDB::get_method(type,function);
+ if (mb) {
+ use_default_args=mb->get_default_argument_count();
+ method_cache = MethodInfo();
+ for(int i=0;i<mb->get_argument_count();i++) {
+#ifdef DEBUG_METHODS_ENABLED
+ method_cache.arguments.push_back(mb->get_argument_info(i));
+#else
+ method_cache.arguments.push_back(PropertyInfo());
+#endif
+ }
+
+ if (mb->is_const()) {
+ method_cache.flags|=METHOD_FLAG_CONST;
+ }
+
+#ifdef DEBUG_METHODS_ENABLED
+
+ method_cache.return_val = mb->get_argument_info(-1);
+#endif
+
+ if (mb->is_vararg()) {
+ //for vararg just give it 10 arguments (should be enough for most use cases)
+ for(int i=0;i<10;i++) {
+ method_cache.arguments.push_back(PropertyInfo(Variant::NIL,"arg"+itos(i)));
+ use_default_args++;
+ }
+ }
+ } else if (script.is_valid() && script->has_method(function)) {
+
+ method_cache = script->get_method_info(function);
+ use_default_args=method_cache.default_arguments.size();
+ }
+}
+
void VisualScriptFunctionCall::set_function(const StringName& p_type){
if (function==p_type)
return;
function=p_type;
- _update_defargs();
+
+ if (call_mode==CALL_MODE_BASIC_TYPE) {
+ use_default_args = Variant::get_method_default_arguments(basic_type,function).size();
+ } else {
+ //update all caches
+
+ _update_method_cache();
+
+ }
+
+
_change_notify();
ports_changed_notify();
}
@@ -301,7 +464,6 @@ void VisualScriptFunctionCall::set_base_path(const NodePath& p_type) {
return;
base_path=p_type;
- _update_defargs();
_change_notify();
ports_changed_notify();
}
@@ -318,7 +480,6 @@ void VisualScriptFunctionCall::set_call_mode(CallMode p_mode) {
return;
call_mode=p_mode;
- _update_defargs();
_change_notify();
ports_changed_notify();
@@ -339,10 +500,49 @@ void VisualScriptFunctionCall::set_use_default_args(int p_amount) {
}
+void VisualScriptFunctionCall::set_rpc_call_mode(VisualScriptFunctionCall::RPCCallMode p_mode) {
+
+ if (rpc_call_mode==p_mode)
+ return;
+ rpc_call_mode=p_mode;
+ ports_changed_notify();
+ _change_notify();
+}
+
+VisualScriptFunctionCall::RPCCallMode VisualScriptFunctionCall::get_rpc_call_mode() const{
+
+ return rpc_call_mode;
+}
+
+
int VisualScriptFunctionCall::get_use_default_args() const{
return use_default_args;
}
+
+
+void VisualScriptFunctionCall::set_validate(bool p_amount) {
+
+ validate=p_amount;
+}
+
+bool VisualScriptFunctionCall::get_validate() const {
+
+ return validate;
+}
+
+
+void VisualScriptFunctionCall::_set_argument_cache(const Dictionary& p_cache) {
+ //so everything works in case all else fails
+ method_cache=MethodInfo::from_dict(p_cache);
+
+}
+
+Dictionary VisualScriptFunctionCall::_get_argument_cache() const {
+
+ return method_cache;
+}
+
void VisualScriptFunctionCall::_validate_property(PropertyInfo& property) const {
if (property.name=="function/base_type") {
@@ -351,12 +551,36 @@ void VisualScriptFunctionCall::_validate_property(PropertyInfo& property) const
}
}
+ if (property.name=="function/base_script") {
+ if (call_mode!=CALL_MODE_INSTANCE) {
+ property.usage=0;
+ }
+ }
+
if (property.name=="function/basic_type") {
if (call_mode!=CALL_MODE_BASIC_TYPE) {
property.usage=0;
}
}
+ if (property.name=="function/singleton") {
+ if (call_mode!=CALL_MODE_SINGLETON) {
+ property.usage=0;
+ } else {
+ List<Globals::Singleton> names;
+ Globals::get_singleton()->get_singletons(&names);
+ property.hint=PROPERTY_HINT_ENUM;
+ String sl;
+ for (List<Globals::Singleton>::Element *E=names.front();E;E=E->next()) {
+ if (sl!=String())
+ sl+=",";
+ sl+=E->get().name;
+ }
+ property.hint_string=sl;
+
+ }
+ }
+
if (property.name=="function/node_path") {
if (call_mode!=CALL_MODE_NODE_PATH) {
property.usage=0;
@@ -372,48 +596,59 @@ void VisualScriptFunctionCall::_validate_property(PropertyInfo& property) const
}
if (property.name=="function/function") {
- property.hint=PROPERTY_HINT_ENUM;
-
-
- List<MethodInfo> methods;
if (call_mode==CALL_MODE_BASIC_TYPE) {
- if (basic_type==Variant::NIL) {
- property.usage=0;
- return; //nothing for nil
- }
- Variant::CallError ce;
- Variant v = Variant::construct(basic_type,NULL,0,ce);
- v.get_method_list(&methods);
+ property.hint=PROPERTY_HINT_METHOD_OF_VARIANT_TYPE;
+ property.hint_string=Variant::get_type_name(basic_type);
+ } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) {
+ property.hint=PROPERTY_HINT_METHOD_OF_SCRIPT;
+ property.hint_string=itos(get_visual_script()->get_instance_ID());
+ } else if (call_mode==CALL_MODE_SINGLETON) {
- } else {
+ Object *obj = Globals::get_singleton()->get_singleton_object(singleton);
+ if (obj) {
+ property.hint=PROPERTY_HINT_METHOD_OF_INSTANCE;
+ property.hint_string=itos(obj->get_instance_ID());
+ } else {
- StringName base = _get_base_type();
- ObjectTypeDB::get_method_list(base,&methods);
+ property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE;
+ property.hint_string=base_type;//should be cached
+ }
+ } else if (call_mode==CALL_MODE_INSTANCE) {
+ property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE;
+ property.hint_string=base_type;
+ if (base_script!=String()) {
+ if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) {
- }
+ ScriptServer::edit_request_func(base_script); //make sure it's loaded
+ }
- List<String> mstring;
- for (List<MethodInfo>::Element *E=methods.front();E;E=E->next()) {
- if (E->get().name.begins_with("_"))
- continue;
- mstring.push_back(E->get().name.get_slice(":",0));
- }
+ if (ResourceCache::has(base_script)) {
- mstring.sort();
+ Ref<Script> script = Ref<Resource>( ResourceCache::get(base_script) );
+ if (script.is_valid()) {
- String ml;
- for (List<String>::Element *E=mstring.front();E;E=E->next()) {
+ property.hint=PROPERTY_HINT_METHOD_OF_SCRIPT;
+ property.hint_string=itos(script->get_instance_ID());
+ }
+ }
+ }
+
+ } else if (call_mode==CALL_MODE_NODE_PATH) {
+ Node *node = _get_base_node();
+ if (node) {
+ property.hint=PROPERTY_HINT_METHOD_OF_INSTANCE;
+ property.hint_string=itos(node->get_instance_ID());
+ } else {
+ property.hint=PROPERTY_HINT_METHOD_OF_BASE_TYPE;
+ property.hint_string=get_base_type();
+ }
- if (ml!=String())
- ml+=",";
- ml+=E->get();
}
- property.hint_string=ml;
}
if (property.name=="function/use_default_args") {
@@ -440,6 +675,13 @@ void VisualScriptFunctionCall::_validate_property(PropertyInfo& property) const
property.hint_string="0,"+itos(mc)+",1";
}
}
+
+ if (property.name=="rpc/call_mode") {
+ if (call_mode==CALL_MODE_BASIC_TYPE) {
+ property.usage=0;
+ }
+ }
+
}
@@ -448,9 +690,15 @@ void VisualScriptFunctionCall::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_base_type","base_type"),&VisualScriptFunctionCall::set_base_type);
ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptFunctionCall::get_base_type);
+ ObjectTypeDB::bind_method(_MD("set_base_script","base_script"),&VisualScriptFunctionCall::set_base_script);
+ ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptFunctionCall::get_base_script);
+
ObjectTypeDB::bind_method(_MD("set_basic_type","basic_type"),&VisualScriptFunctionCall::set_basic_type);
ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptFunctionCall::get_basic_type);
+ ObjectTypeDB::bind_method(_MD("set_singleton","singleton"),&VisualScriptFunctionCall::set_singleton);
+ ObjectTypeDB::bind_method(_MD("get_singleton"),&VisualScriptFunctionCall::get_singleton);
+
ObjectTypeDB::bind_method(_MD("set_function","function"),&VisualScriptFunctionCall::set_function);
ObjectTypeDB::bind_method(_MD("get_function"),&VisualScriptFunctionCall::get_function);
@@ -463,6 +711,14 @@ void VisualScriptFunctionCall::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_use_default_args","amount"),&VisualScriptFunctionCall::set_use_default_args);
ObjectTypeDB::bind_method(_MD("get_use_default_args"),&VisualScriptFunctionCall::get_use_default_args);
+ ObjectTypeDB::bind_method(_MD("_set_argument_cache","argument_cache"),&VisualScriptFunctionCall::_set_argument_cache);
+ ObjectTypeDB::bind_method(_MD("_get_argument_cache"),&VisualScriptFunctionCall::_get_argument_cache);
+
+ ObjectTypeDB::bind_method(_MD("set_rpc_call_mode","mode"),&VisualScriptFunctionCall::set_rpc_call_mode);
+ ObjectTypeDB::bind_method(_MD("get_rpc_call_mode"),&VisualScriptFunctionCall::get_rpc_call_mode);
+
+ ObjectTypeDB::bind_method(_MD("set_validate","enable"),&VisualScriptFunctionCall::set_validate);
+ ObjectTypeDB::bind_method(_MD("get_validate"),&VisualScriptFunctionCall::get_validate);
String bt;
for(int i=0;i<Variant::VARIANT_MAX;i++) {
@@ -472,12 +728,32 @@ void VisualScriptFunctionCall::_bind_methods() {
bt+=Variant::get_type_name(Variant::Type(i));
}
- ADD_PROPERTY(PropertyInfo(Variant::INT,"function/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type",PROPERTY_USAGE_NOEDITOR),_SCS("set_call_mode"),_SCS("get_call_mode"));
+
+ List<String> script_extensions;
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions);
+ }
+
+ String script_ext_hint;
+ for (List<String>::Element *E=script_extensions.front();E;E=E->next()) {
+ if (script_ext_hint!=String())
+ script_ext_hint+=",";
+ script_ext_hint+="*."+E->get();
+ }
+
+
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"function/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type,Singleton"),_SCS("set_call_mode"),_SCS("get_call_mode"));
ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/singleton"),_SCS("set_singleton"),_SCS("get_singleton"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"function/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type"));
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"function/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path"));
- ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/function"),_SCS("set_function"),_SCS("get_function"));
+ ADD_PROPERTY(PropertyInfo(Variant::DICTIONARY,"function/argument_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_argument_cache"),_SCS("_get_argument_cache"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/function"),_SCS("set_function"),_SCS("get_function")); //when set, if loaded properly, will override argument count.
ADD_PROPERTY(PropertyInfo(Variant::INT,"function/use_default_args"),_SCS("set_use_default_args"),_SCS("get_use_default_args"));
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL,"function/validate"),_SCS("set_validate"),_SCS("get_validate"));
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"rpc/call_mode",PROPERTY_HINT_ENUM,"Disabled,Reliable,Unreliable,ReliableToID,UnreliableToID"),_SCS("set_rpc_call_mode"),_SCS("get_rpc_call_mode")); //when set, if loaded properly, will override argument count.
BIND_CONSTANT( CALL_MODE_SELF );
BIND_CONSTANT( CALL_MODE_NODE_PATH);
@@ -492,8 +768,11 @@ public:
VisualScriptFunctionCall::CallMode call_mode;
NodePath node_path;
int input_args;
+ bool validate;
bool returns;
+ VisualScriptFunctionCall::RPCCallMode rpc_mode;
StringName function;
+ StringName singleton;
VisualScriptFunctionCall *node;
VisualScriptInstance *instance;
@@ -504,6 +783,35 @@ public:
//virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
//virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
+
+ _FORCE_INLINE_ bool call_rpc(Object* p_base,const Variant** p_args,int p_argcount) {
+
+ if (!p_base)
+ return false;
+
+ Node * node = p_base->cast_to<Node>();
+ if (!node)
+ return false;
+
+ int to_id=0;
+ bool reliable=true;
+
+ if (rpc_mode>=VisualScriptFunctionCall::RPC_RELIABLE_TO_ID) {
+ to_id = *p_args[0];
+ p_args+=1;
+ p_argcount-=1;
+ if (rpc_mode==VisualScriptFunctionCall::RPC_UNRELIABLE_TO_ID) {
+ reliable=false;
+ }
+ } else if (rpc_mode==VisualScriptFunctionCall::RPC_UNRELIABLE) {
+ reliable=false;
+ }
+
+ node->rpcp(to_id,!reliable,function,p_args,p_argcount);
+
+ return true;
+ }
+
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
@@ -513,7 +821,9 @@ public:
Object *object=instance->get_owner_ptr();
- if (returns) {
+ if (rpc_mode) {
+ call_rpc(object,p_inputs,input_args);
+ } else if (returns) {
*p_outputs[0] = object->call(function,p_inputs,input_args,r_error);
} else {
object->call(function,p_inputs,input_args,r_error);
@@ -535,7 +845,9 @@ public:
return 0;
}
- if (returns) {
+ if (rpc_mode) {
+ call_rpc(node,p_inputs,input_args);
+ } else if (returns) {
*p_outputs[0] = another->call(function,p_inputs,input_args,r_error);
} else {
another->call(function,p_inputs,input_args,r_error);
@@ -547,15 +859,53 @@ public:
Variant v = *p_inputs[0];
- if (returns) {
- *p_outputs[0] = v.call(function,p_inputs+1,input_args,r_error);
+ if (rpc_mode) {
+ Object *obj = v;
+ if (obj) {
+ call_rpc(obj,p_inputs+1,input_args-1);
+ }
+ } else if (returns) {
+ if (call_mode==VisualScriptFunctionCall::CALL_MODE_INSTANCE) {
+ *p_outputs[1] = v.call(function,p_inputs+1,input_args,r_error);
+ } else {
+ *p_outputs[0] = v.call(function,p_inputs+1,input_args,r_error);
+ }
} else {
v.call(function,p_inputs+1,input_args,r_error);
}
+ if (call_mode==VisualScriptFunctionCall::CALL_MODE_INSTANCE) {
+ *p_outputs[0]=*p_inputs[0];
+ }
+
+ } break;
+ case VisualScriptFunctionCall::CALL_MODE_SINGLETON: {
+
+ Object *object=Globals::get_singleton()->get_singleton_object(singleton);
+ if (!object) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Invalid singleton name: '"+String(singleton)+"'";
+ return 0;
+ }
+
+ if (rpc_mode) {
+ call_rpc(object,p_inputs,input_args);
+ } else if (returns) {
+ *p_outputs[0] = object->call(function,p_inputs,input_args,r_error);
+ } else {
+ object->call(function,p_inputs,input_args,r_error);
+ }
} break;
}
+
+ if (!validate) {
+
+ //ignore call errors if validation is disabled
+ r_error.error=Variant::CallError::CALL_OK;
+ r_error_str=String();
+ }
+
return 0;
}
@@ -568,19 +918,37 @@ VisualScriptNodeInstance* VisualScriptFunctionCall::instance(VisualScriptInstanc
VisualScriptNodeInstanceFunctionCall * instance = memnew(VisualScriptNodeInstanceFunctionCall );
instance->node=this;
instance->instance=p_instance;
+ instance->singleton=singleton;
instance->function=function;
instance->call_mode=call_mode;
instance->returns=get_output_value_port_count();
instance->node_path=base_path;
instance->input_args = get_input_value_port_count() - ( (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE) ? 1: 0 );
+ instance->rpc_mode=rpc_call_mode;
+ instance->validate=validate;
return instance;
}
+
+
+VisualScriptFunctionCall::TypeGuess VisualScriptFunctionCall::guess_output_type(TypeGuess* p_inputs, int p_output) const {
+
+ if (p_output==0 && call_mode==CALL_MODE_INSTANCE) {
+ return p_inputs[0];
+ }
+
+ return VisualScriptNode::guess_output_type(p_inputs,p_output);
+
+}
+
VisualScriptFunctionCall::VisualScriptFunctionCall() {
- call_mode=CALL_MODE_INSTANCE;
+ validate=true;
+ call_mode=CALL_MODE_SELF;
basic_type=Variant::NIL;
use_default_args=0;
base_type="Object";
+ rpc_call_mode=RPC_DISABLED;
+
}
@@ -613,12 +981,12 @@ static const char* event_type_names[InputEvent::TYPE_MAX]={
int VisualScriptPropertySet::get_output_sequence_port_count() const {
- return 1;
+ return call_mode!=CALL_MODE_BASIC_TYPE ? 1 : 0;
}
bool VisualScriptPropertySet::has_input_sequence_port() const{
- return true;
+ return call_mode!=CALL_MODE_BASIC_TYPE ? true : false;
}
Node *VisualScriptPropertySet::_get_base_node() const {
@@ -675,16 +1043,13 @@ StringName VisualScriptPropertySet::_get_base_type() const {
int VisualScriptPropertySet::get_input_value_port_count() const{
- int pc = (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE)?1:0;
-
- if (!use_builtin_value)
- pc++;
+ int pc = (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE)?2:1;
return pc;
}
int VisualScriptPropertySet::get_output_value_port_count() const{
- return call_mode==CALL_MODE_BASIC_TYPE? 1 : 0;
+ return (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE) ? 1 : 0;
}
String VisualScriptPropertySet::get_output_sequence_port_text(int p_port) const {
@@ -705,60 +1070,16 @@ PropertyInfo VisualScriptPropertySet::get_input_value_port_info(int p_idx) const
}
}
-#ifdef DEBUG_METHODS_ENABLED
-
- //not very efficient but..
-
-
- List<PropertyInfo> pinfo;
-
- if (call_mode==CALL_MODE_BASIC_TYPE) {
-
-
- Variant v;
- if (basic_type==Variant::INPUT_EVENT) {
- InputEvent ev;
- ev.type=event_type;
- v=ev;
- } else {
- Variant::CallError ce;
- v = Variant::construct(basic_type,NULL,0,ce);
- }
- v.get_property_list(&pinfo);
-
- } else if (call_mode==CALL_MODE_NODE_PATH) {
-
- Node *n = _get_base_node();
- if (n) {
- n->get_property_list(&pinfo);
- } else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
- }
- } else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
- }
-
-
- for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
-
- if (E->get().name==property) {
-
- PropertyInfo info=E->get();
- info.name="value";
- return info;
- }
- }
-
-
-#endif
-
- return PropertyInfo(Variant::NIL,"value");
-
+ PropertyInfo pinfo=type_cache;
+ pinfo.name="value";
+ return pinfo;
}
PropertyInfo VisualScriptPropertySet::get_output_value_port_info(int p_idx) const{
if (call_mode==CALL_MODE_BASIC_TYPE) {
return PropertyInfo(basic_type,"out");
+ } else if (call_mode==CALL_MODE_INSTANCE) {
+ return PropertyInfo(Variant::OBJECT,"pass");
} else {
return PropertyInfo();
}
@@ -784,18 +1105,12 @@ String VisualScriptPropertySet::get_text() const {
if (call_mode==CALL_MODE_BASIC_TYPE)
prop=Variant::get_type_name(basic_type)+"."+property;
- else
+ else if (call_mode==CALL_MODE_NODE_PATH)
+ prop=String(base_path)+":"+property;
+ else if (call_mode==CALL_MODE_SELF)
prop=property;
-
- if (use_builtin_value) {
- String bit = builtin_value.get_construct_string();
- if (bit.length()>40) {
- bit=bit.substr(0,40);
- bit+="...";
- }
-
- prop+="\n "+bit;
- }
+ else if (call_mode==CALL_MODE_INSTANCE)
+ prop=String(base_type)+":"+property;
return prop;
@@ -839,6 +1154,9 @@ void VisualScriptPropertySet::set_event_type(InputEvent::Type p_type) {
if (event_type==p_type)
return;
event_type=p_type;
+ if (call_mode==CALL_MODE_BASIC_TYPE) {
+ _update_cache();
+ }
_change_notify();
_update_base_type();
ports_changed_notify();
@@ -865,12 +1183,133 @@ StringName VisualScriptPropertySet::get_base_type() const{
return base_type;
}
+
+void VisualScriptPropertySet::set_base_script(const String& p_path) {
+
+ if (base_script==p_path)
+ return;
+
+ base_script=p_path;
+ _change_notify();
+ ports_changed_notify();
+}
+
+String VisualScriptPropertySet::get_base_script() const {
+
+ return base_script;
+}
+
+
+void VisualScriptPropertySet::_update_cache() {
+
+
+ if (!OS::get_singleton()->get_main_loop())
+ return;
+ if (!OS::get_singleton()->get_main_loop()->cast_to<SceneTree>())
+ return;
+
+ if (!OS::get_singleton()->get_main_loop()->cast_to<SceneTree>()->is_editor_hint()) //only update cache if editor exists, it's pointless otherwise
+ return;
+
+ if (call_mode==CALL_MODE_BASIC_TYPE) {
+
+ //not super efficient..
+
+ Variant v;
+ if (basic_type==Variant::INPUT_EVENT) {
+ InputEvent ev;
+ ev.type=event_type;
+ v=ev;
+ } else {
+ Variant::CallError ce;
+ v = Variant::construct(basic_type,NULL,0,ce);
+ }
+
+ List<PropertyInfo> pinfo;
+ v.get_property_list(&pinfo);
+
+ for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+
+ if (E->get().name==property) {
+
+ type_cache=E->get();
+ }
+ }
+
+ } else {
+
+
+ StringName type;
+ Ref<Script> script;
+ Node *node=NULL;
+
+ if (call_mode==CALL_MODE_NODE_PATH) {
+
+ node=_get_base_node();
+ if (node) {
+ type=node->get_type();
+ base_type=type; //cache, too
+ script = node->get_script();
+ }
+ } else if (call_mode==CALL_MODE_SELF) {
+
+ if (get_visual_script().is_valid()) {
+ type=get_visual_script()->get_instance_base_type();
+ base_type=type; //cache, too
+ script=get_visual_script();
+ }
+ } else if (call_mode==CALL_MODE_INSTANCE) {
+
+ type=base_type;
+ if (base_script!=String()) {
+
+ if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) {
+
+ ScriptServer::edit_request_func(base_script); //make sure it's loaded
+ }
+
+ if (ResourceCache::has(base_script)) {
+
+ script = Ref<Resource>( ResourceCache::get(base_script) );
+ } else {
+ return;
+ }
+ }
+ }
+
+ List<PropertyInfo> pinfo;
+
+
+ if (node) {
+
+ node->get_property_list(&pinfo);
+ } else {
+ ObjectTypeDB::get_property_list(type,&pinfo);
+ }
+
+ if (script.is_valid()) {
+
+ script->get_script_property_list(&pinfo);
+ }
+
+ for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+
+ if (E->get().name==property) {
+ type_cache=E->get();
+ return;
+ }
+ }
+
+ }
+}
+
void VisualScriptPropertySet::set_property(const StringName& p_type){
if (property==p_type)
return;
property=p_type;
+ _update_cache();
_change_notify();
ports_changed_notify();
}
@@ -914,34 +1353,17 @@ VisualScriptPropertySet::CallMode VisualScriptPropertySet::get_call_mode() const
}
-void VisualScriptPropertySet::set_use_builtin_value(bool p_use) {
-
- if (use_builtin_value==p_use)
- return;
-
- use_builtin_value=p_use;
- _change_notify();
- ports_changed_notify();
-
-}
-bool VisualScriptPropertySet::is_using_builtin_value() const{
- return use_builtin_value;
+void VisualScriptPropertySet::_set_type_cache(const Dictionary &p_type) {
+ type_cache=PropertyInfo::from_dict(p_type);
}
-void VisualScriptPropertySet::set_builtin_value(const Variant& p_value){
-
- if (builtin_value==p_value)
- return;
-
- builtin_value=p_value;
+Dictionary VisualScriptPropertySet::_get_type_cache() const {
+ return type_cache;
}
-Variant VisualScriptPropertySet::get_builtin_value() const{
- return builtin_value;
-}
void VisualScriptPropertySet::_validate_property(PropertyInfo& property) const {
if (property.name=="property/base_type") {
@@ -950,6 +1372,11 @@ void VisualScriptPropertySet::_validate_property(PropertyInfo& property) const {
}
}
+ if (property.name=="property/base_script") {
+ if (call_mode!=CALL_MODE_INSTANCE) {
+ property.usage=0;
+ }
+ }
if (property.name=="property/basic_type") {
if (call_mode!=CALL_MODE_BASIC_TYPE) {
@@ -978,99 +1405,50 @@ void VisualScriptPropertySet::_validate_property(PropertyInfo& property) const {
}
if (property.name=="property/property") {
- property.hint=PROPERTY_HINT_ENUM;
-
-
- List<PropertyInfo> pinfo;
-
if (call_mode==CALL_MODE_BASIC_TYPE) {
- Variant::CallError ce;
- Variant v;
- if (basic_type==Variant::INPUT_EVENT) {
- InputEvent ev;
- ev.type=event_type;
- v=ev;
- } else {
- v = Variant::construct(basic_type,NULL,0,ce);
- }
- v.get_property_list(&pinfo);
- } else if (call_mode==CALL_MODE_NODE_PATH) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE;
+ property.hint_string=Variant::get_type_name(basic_type);
- Node *n = _get_base_node();
- if (n) {
- n->get_property_list(&pinfo);
- } else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
- }
- } else {
+ } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT;
+ property.hint_string=itos(get_visual_script()->get_instance_ID());
+ } else if (call_mode==CALL_MODE_INSTANCE) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE;
+ property.hint_string=base_type;
+ if (base_script!=String()) {
+ if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
-
- }
+ ScriptServer::edit_request_func(base_script); //make sure it's loaded
+ }
- List<String> mstring;
+ if (ResourceCache::has(base_script)) {
- for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+ Ref<Script> script = Ref<Resource>( ResourceCache::get(base_script) );
+ if (script.is_valid()) {
- if (E->get().usage&PROPERTY_USAGE_EDITOR) {
- mstring.push_back(E->get().name);
+ property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT;
+ property.hint_string=itos(script->get_instance_ID());
+ }
+ }
}
- }
-
- String ml;
- for (List<String>::Element *E=mstring.front();E;E=E->next()) {
-
- if (ml!=String())
- ml+=",";
- ml+=E->get();
- }
-
- if (ml==String()) {
- property.usage=PROPERTY_USAGE_NOEDITOR; //do not show for editing if empty
- } else {
- property.hint_string=ml;
- }
- }
-
- if (property.name=="value/builtin") {
-
- if (!use_builtin_value) {
- property.usage=0;
- } else {
- List<PropertyInfo> pinfo;
-
- if (call_mode==CALL_MODE_BASIC_TYPE) {
- Variant::CallError ce;
- Variant v = Variant::construct(basic_type,NULL,0,ce);
- v.get_property_list(&pinfo);
- } else if (call_mode==CALL_MODE_NODE_PATH) {
-
- Node *n = _get_base_node();
- if (n) {
- n->get_property_list(&pinfo);
- } else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
- }
+ } else if (call_mode==CALL_MODE_NODE_PATH) {
+ Node *node = _get_base_node();
+ if (node) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_INSTANCE;
+ property.hint_string=itos(node->get_instance_ID());
} else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
+ property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE;
+ property.hint_string=get_base_type();
}
- for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
-
- if (E->get().name==this->property) {
-
- property.hint=E->get().hint;
- property.type=E->get().type;
- property.hint_string=E->get().hint_string;
- }
- }
}
}
+
}
void VisualScriptPropertySet::_bind_methods() {
@@ -1078,10 +1456,15 @@ void VisualScriptPropertySet::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_base_type","base_type"),&VisualScriptPropertySet::set_base_type);
ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptPropertySet::get_base_type);
+ ObjectTypeDB::bind_method(_MD("set_base_script","base_script"),&VisualScriptPropertySet::set_base_script);
+ ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptPropertySet::get_base_script);
ObjectTypeDB::bind_method(_MD("set_basic_type","basic_type"),&VisualScriptPropertySet::set_basic_type);
ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptPropertySet::get_basic_type);
+ ObjectTypeDB::bind_method(_MD("_set_type_cache","type_cache"),&VisualScriptPropertySet::_set_type_cache);
+ ObjectTypeDB::bind_method(_MD("_get_type_cache"),&VisualScriptPropertySet::_get_type_cache);
+
ObjectTypeDB::bind_method(_MD("set_event_type","event_type"),&VisualScriptPropertySet::set_event_type);
ObjectTypeDB::bind_method(_MD("get_event_type"),&VisualScriptPropertySet::get_event_type);
@@ -1094,11 +1477,7 @@ void VisualScriptPropertySet::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_base_path","base_path"),&VisualScriptPropertySet::set_base_path);
ObjectTypeDB::bind_method(_MD("get_base_path"),&VisualScriptPropertySet::get_base_path);
- ObjectTypeDB::bind_method(_MD("set_builtin_value","value"),&VisualScriptPropertySet::set_builtin_value);
- ObjectTypeDB::bind_method(_MD("get_builtin_value"),&VisualScriptPropertySet::get_builtin_value);
- ObjectTypeDB::bind_method(_MD("set_use_builtin_value","enable"),&VisualScriptPropertySet::set_use_builtin_value);
- ObjectTypeDB::bind_method(_MD("is_using_builtin_value"),&VisualScriptPropertySet::is_using_builtin_value);
String bt;
for(int i=0;i<Variant::VARIANT_MAX;i++) {
@@ -1116,15 +1495,26 @@ void VisualScriptPropertySet::_bind_methods() {
et+=event_type_names[i];
}
+ List<String> script_extensions;
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions);
+ }
- ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type",PROPERTY_USAGE_NOEDITOR),_SCS("set_call_mode"),_SCS("get_call_mode"));
+ String script_ext_hint;
+ for (List<String>::Element *E=script_extensions.front();E;E=E->next()) {
+ if (script_ext_hint!=String())
+ script_ext_hint+=",";
+ script_ext_hint+="*."+E->get();
+ }
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type"),_SCS("set_call_mode"),_SCS("get_call_mode"));
ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script"));
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"property/type_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_type_cache"),_SCS("_get_type_cache"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"property/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"property/event_type",PROPERTY_HINT_ENUM,et),_SCS("set_event_type"),_SCS("get_event_type"));
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"property/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path"));
ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/property"),_SCS("set_property"),_SCS("get_property"));
- ADD_PROPERTY(PropertyInfo(Variant::BOOL,"value/use_builtin"),_SCS("set_use_builtin_value"),_SCS("is_using_builtin_value"));
- ADD_PROPERTY(PropertyInfo(Variant::NIL,"value/builtin"),_SCS("set_builtin_value"),_SCS("get_builtin_value"));
BIND_CONSTANT( CALL_MODE_SELF );
BIND_CONSTANT( CALL_MODE_NODE_PATH);
@@ -1139,8 +1529,6 @@ public:
VisualScriptPropertySet::CallMode call_mode;
NodePath node_path;
StringName property;
- bool use_builtin;
- Variant builtin_val;
VisualScriptPropertySet *node;
VisualScriptInstance *instance;
@@ -1162,15 +1550,11 @@ public:
bool valid;
- if (use_builtin) {
- object->set(property,builtin_val,&valid);
- } else {
- object->set(property,*p_inputs[0],&valid);
- }
+ object->set(property,*p_inputs[0],&valid);
if (!valid) {
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error_str="Invalid index property name.";
+ r_error_str="Invalid set value '"+String(*p_inputs[0])+"' on property '"+String(property)+"' of type "+object->get_type();
}
} break;
case VisualScriptPropertySet::CALL_MODE_NODE_PATH: {
@@ -1191,15 +1575,11 @@ public:
bool valid;
- if (use_builtin) {
- another->set(property,builtin_val,&valid);
- } else {
- another->set(property,*p_inputs[0],&valid);
- }
+ another->set(property,*p_inputs[0],&valid);
if (!valid) {
r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error_str="Invalid index property name.";
+ r_error_str="Invalid set value '"+String(*p_inputs[0])+"' on property '"+String(property)+"' of type "+another->get_type();
}
} break;
@@ -1210,20 +1590,14 @@ public:
bool valid;
- if (use_builtin) {
- v.set(property,builtin_val,&valid);
- } else {
- v.set(property,p_inputs[1],&valid);
- }
+ v.set(property,*p_inputs[1],&valid);
if (!valid) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error_str="Invalid index property name.";
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Invalid set value '"+String(*p_inputs[1])+"' ("+Variant::get_type_name(p_inputs[1]->get_type())+") on property '"+String(property)+"' of type "+Variant::get_type_name(v.get_type());
}
- if (call_mode==VisualScriptPropertySet::CALL_MODE_BASIC_TYPE) {
- *p_outputs[0]=v;
- }
+ *p_outputs[0]=v;
} break;
@@ -1243,14 +1617,23 @@ VisualScriptNodeInstance* VisualScriptPropertySet::instance(VisualScriptInstance
instance->property=property;
instance->call_mode=call_mode;
instance->node_path=base_path;
- instance->use_builtin=use_builtin_value;
- instance->builtin_val=builtin_value;
return instance;
}
+
+
+VisualScriptPropertySet::TypeGuess VisualScriptPropertySet::guess_output_type(TypeGuess* p_inputs, int p_output) const {
+
+ if (p_output==0 && call_mode==CALL_MODE_INSTANCE) {
+ return p_inputs[0];
+ }
+
+ return VisualScriptNode::guess_output_type(p_inputs,p_output);
+
+}
VisualScriptPropertySet::VisualScriptPropertySet() {
- call_mode=CALL_MODE_INSTANCE;
+ call_mode=CALL_MODE_SELF;
base_type="Object";
basic_type=Variant::NIL;
event_type=InputEvent::NONE;
@@ -1273,12 +1656,12 @@ static Ref<VisualScriptNode> create_property_set_node(const String& p_name) {
int VisualScriptPropertyGet::get_output_sequence_port_count() const {
- return (call_mode==CALL_MODE_SELF || call_mode==CALL_MODE_NODE_PATH)?0:1;
+ return 0;// (call_mode==CALL_MODE_SELF || call_mode==CALL_MODE_NODE_PATH)?0:1;
}
bool VisualScriptPropertyGet::has_input_sequence_port() const{
- return (call_mode==CALL_MODE_SELF || call_mode==CALL_MODE_NODE_PATH)?false:true;
+ return false;//(call_mode==CALL_MODE_SELF || call_mode==CALL_MODE_NODE_PATH)?false:true;
}
void VisualScriptPropertyGet::_update_base_type() {
//cache it because this information may not be available on load
@@ -1348,6 +1731,7 @@ StringName VisualScriptPropertyGet::_get_base_type() const {
return base_type;
}
+
int VisualScriptPropertyGet::get_input_value_port_count() const{
return (call_mode==CALL_MODE_BASIC_TYPE || call_mode==CALL_MODE_INSTANCE)?1:0;
@@ -1381,17 +1765,75 @@ PropertyInfo VisualScriptPropertyGet::get_input_value_port_info(int p_idx) const
PropertyInfo VisualScriptPropertyGet::get_output_value_port_info(int p_idx) const{
+ return PropertyInfo(type_cache,"value");
+}
-#ifdef DEBUG_METHODS_ENABLED
+String VisualScriptPropertyGet::get_caption() const {
- //not very efficient but..
+ static const char*cname[4]= {
+ "SelfGet",
+ "NodeGet",
+ "InstanceGet",
+ "BasicGet"
+ };
+ return cname[call_mode];
+}
+
+String VisualScriptPropertyGet::get_text() const {
+
+ String prop;
+
+ if (call_mode==CALL_MODE_BASIC_TYPE)
+ prop=Variant::get_type_name(basic_type)+"."+property;
+ else if (call_mode==CALL_MODE_NODE_PATH)
+ prop=String(base_path)+":"+property;
+ else if (call_mode==CALL_MODE_SELF)
+ prop=property;
+ else if (call_mode==CALL_MODE_INSTANCE)
+ prop=String(base_type)+":"+property;
+
+ return prop;
+}
+
+void VisualScriptPropertyGet::set_base_type(const StringName& p_type) {
+
+ if (base_type==p_type)
+ return;
+
+ base_type=p_type;
+ _change_notify();
+ ports_changed_notify();
+}
+
+StringName VisualScriptPropertyGet::get_base_type() const{
+
+ return base_type;
+}
+
+void VisualScriptPropertyGet::set_base_script(const String& p_path) {
+
+ if (base_script==p_path)
+ return;
+
+ base_script=p_path;
+ _change_notify();
+ ports_changed_notify();
+}
+
+String VisualScriptPropertyGet::get_base_script() const {
+
+ return base_script;
+}
+
+
+void VisualScriptPropertyGet::_update_cache() {
- List<PropertyInfo> pinfo;
if (call_mode==CALL_MODE_BASIC_TYPE) {
+ //not super efficient..
Variant v;
if (basic_type==Variant::INPUT_EVENT) {
@@ -1402,71 +1844,91 @@ PropertyInfo VisualScriptPropertyGet::get_output_value_port_info(int p_idx) cons
Variant::CallError ce;
v = Variant::construct(basic_type,NULL,0,ce);
}
+
+ List<PropertyInfo> pinfo;
v.get_property_list(&pinfo);
- } else if (call_mode==CALL_MODE_NODE_PATH) {
- Node *n = _get_base_node();
- if (n) {
- n->get_property_list(&pinfo);
- } else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
+ for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+
+ if (E->get().name==property) {
+
+ type_cache=E->get().type;
+ return;
+ }
}
+
} else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
- }
- for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
- if (E->get().name==property) {
+ StringName type;
+ Ref<Script> script;
+ Node *node=NULL;
- PropertyInfo info=E->get();
- info.name="";
- return info;
- }
- }
+ if (call_mode==CALL_MODE_NODE_PATH) {
+ node=_get_base_node();
+ if (node) {
+ type=node->get_type();
+ base_type=type; //cache, too
+ script = node->get_script();
+ }
+ } else if (call_mode==CALL_MODE_SELF) {
-#endif
+ if (get_visual_script().is_valid()) {
+ type=get_visual_script()->get_instance_base_type();
+ base_type=type; //cache, too
+ script=get_visual_script();
+ }
+ } else if (call_mode==CALL_MODE_INSTANCE) {
- return PropertyInfo(Variant::NIL,"");
-}
+ type=base_type;
+ if (base_script!=String()) {
+ if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) {
-String VisualScriptPropertyGet::get_caption() const {
+ ScriptServer::edit_request_func(base_script); //make sure it's loaded
+ }
- static const char*cname[4]= {
- "SelfGet",
- "NodeGet",
- "InstanceGet",
- "BasicGet"
- };
+ if (ResourceCache::has(base_script)) {
- return cname[call_mode];
-}
+ script = Ref<Resource>( ResourceCache::get(base_script) );
+ } else {
+ return;
+ }
+ }
+ }
-String VisualScriptPropertyGet::get_text() const {
+ bool valid=false;
- if (call_mode==CALL_MODE_BASIC_TYPE)
- return Variant::get_type_name(basic_type)+"."+property;
- else
- return property;
+ Variant::Type type_ret;
-}
+ type_ret=ObjectTypeDB::get_property_type(base_type,property,&valid);
-void VisualScriptPropertyGet::set_base_type(const StringName& p_type) {
+ if (valid) {
+ type_cache=type_ret;
+ return; //all dandy
+ }
- if (base_type==p_type)
- return;
+ if (node) {
- base_type=p_type;
- _change_notify();
- ports_changed_notify();
-}
+ Variant prop = node->get(property,&valid);
+ if (valid) {
+ type_cache=prop.get_type();
+ return; //all dandy again
+ }
+ }
-StringName VisualScriptPropertyGet::get_base_type() const{
+ if (script.is_valid()) {
- return base_type;
+ type_ret=script->get_static_property_type(property,&valid);
+
+ if (valid) {
+ type_cache=type_ret;
+ return; //all dandy
+ }
+ }
+ }
}
void VisualScriptPropertyGet::set_property(const StringName& p_type){
@@ -1475,6 +1937,9 @@ void VisualScriptPropertyGet::set_property(const StringName& p_type){
return;
property=p_type;
+
+
+ _update_cache();
_change_notify();
ports_changed_notify();
}
@@ -1541,6 +2006,9 @@ void VisualScriptPropertyGet::set_event_type(InputEvent::Type p_type) {
if (event_type==p_type)
return;
event_type=p_type;
+ if(call_mode==CALL_MODE_BASIC_TYPE) {
+ _update_cache();
+ }
_change_notify();
_update_base_type();
ports_changed_notify();
@@ -1551,6 +2019,17 @@ InputEvent::Type VisualScriptPropertyGet::get_event_type() const{
return event_type;
}
+
+void VisualScriptPropertyGet::_set_type_cache(Variant::Type p_type) {
+ type_cache=p_type;
+}
+
+Variant::Type VisualScriptPropertyGet::_get_type_cache() const {
+
+ return type_cache;
+}
+
+
void VisualScriptPropertyGet::_validate_property(PropertyInfo& property) const {
if (property.name=="property/base_type") {
@@ -1559,6 +2038,11 @@ void VisualScriptPropertyGet::_validate_property(PropertyInfo& property) const {
}
}
+ if (property.name=="property/base_script") {
+ if (call_mode!=CALL_MODE_INSTANCE) {
+ property.usage=0;
+ }
+ }
if (property.name=="property/basic_type") {
if (call_mode!=CALL_MODE_BASIC_TYPE) {
@@ -1586,55 +2070,45 @@ void VisualScriptPropertyGet::_validate_property(PropertyInfo& property) const {
}
if (property.name=="property/property") {
- property.hint=PROPERTY_HINT_ENUM;
-
-
- List<PropertyInfo> pinfo;
if (call_mode==CALL_MODE_BASIC_TYPE) {
- Variant::CallError ce;
- Variant v;
- if (basic_type==Variant::INPUT_EVENT) {
- InputEvent ev;
- ev.type=event_type;
- v=ev;
- } else {
- v = Variant::construct(basic_type,NULL,0,ce);
- }
- v.get_property_list(&pinfo);
- } else if (call_mode==CALL_MODE_NODE_PATH) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE;
+ property.hint_string=Variant::get_type_name(basic_type);
- Node *n = _get_base_node();
- if (n) {
- n->get_property_list(&pinfo);
- } else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
- }
- } else {
- ObjectTypeDB::get_property_list(_get_base_type(),&pinfo);
- }
+ } else if (call_mode==CALL_MODE_SELF && get_visual_script().is_valid()) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT;
+ property.hint_string=itos(get_visual_script()->get_instance_ID());
+ } else if (call_mode==CALL_MODE_INSTANCE) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE;
+ property.hint_string=base_type;
- List<String> mstring;
+ if (base_script!=String()) {
+ if (!ResourceCache::has(base_script) && ScriptServer::edit_request_func) {
- for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+ ScriptServer::edit_request_func(base_script); //make sure it's loaded
+ }
- if (E->get().usage&PROPERTY_USAGE_EDITOR)
- mstring.push_back(E->get().name);
- }
+ if (ResourceCache::has(base_script)) {
- String ml;
- for (List<String>::Element *E=mstring.front();E;E=E->next()) {
+ Ref<Script> script = Ref<Resource>( ResourceCache::get(base_script) );
+ if (script.is_valid()) {
- if (ml!=String())
- ml+=",";
- ml+=E->get();
- }
+ property.hint=PROPERTY_HINT_PROPERTY_OF_SCRIPT;
+ property.hint_string=itos(script->get_instance_ID());
+ }
+ }
+ }
+ } else if (call_mode==CALL_MODE_NODE_PATH) {
+ Node *node = _get_base_node();
+ if (node) {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_INSTANCE;
+ property.hint_string=itos(node->get_instance_ID());
+ } else {
+ property.hint=PROPERTY_HINT_PROPERTY_OF_BASE_TYPE;
+ property.hint_string=get_base_type();
+ }
- if (ml==String()) {
- property.usage=PROPERTY_USAGE_NOEDITOR; //do not show for editing if empty
- } else {
- property.hint_string=ml;
}
}
@@ -1646,10 +2120,15 @@ void VisualScriptPropertyGet::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_base_type","base_type"),&VisualScriptPropertyGet::set_base_type);
ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptPropertyGet::get_base_type);
+ ObjectTypeDB::bind_method(_MD("set_base_script","base_script"),&VisualScriptPropertyGet::set_base_script);
+ ObjectTypeDB::bind_method(_MD("get_base_script"),&VisualScriptPropertyGet::get_base_script);
ObjectTypeDB::bind_method(_MD("set_basic_type","basic_type"),&VisualScriptPropertyGet::set_basic_type);
ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptPropertyGet::get_basic_type);
+ ObjectTypeDB::bind_method(_MD("_set_type_cache","type_cache"),&VisualScriptPropertyGet::_set_type_cache);
+ ObjectTypeDB::bind_method(_MD("_get_type_cache"),&VisualScriptPropertyGet::_get_type_cache);
+
ObjectTypeDB::bind_method(_MD("set_event_type","event_type"),&VisualScriptPropertyGet::set_event_type);
ObjectTypeDB::bind_method(_MD("get_event_type"),&VisualScriptPropertyGet::get_event_type);
@@ -1679,9 +2158,22 @@ void VisualScriptPropertyGet::_bind_methods() {
et+=event_type_names[i];
}
+ List<String> script_extensions;
+ for(int i=0;i<ScriptServer::get_language_count();i++) {
+ ScriptServer::get_language(i)->get_recognized_extensions(&script_extensions);
+ }
+
+ String script_ext_hint;
+ for (List<String>::Element *E=script_extensions.front();E;E=E->next()) {
+ if (script_ext_hint!=String())
+ script_ext_hint+=",";
+ script_ext_hint+="."+E->get();
+ }
- ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance",PROPERTY_USAGE_NOEDITOR),_SCS("set_call_mode"),_SCS("get_call_mode"));
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"property/set_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance,Basic Type"),_SCS("set_call_mode"),_SCS("get_call_mode"));
ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"property/base_script",PROPERTY_HINT_FILE,script_ext_hint),_SCS("set_base_script"),_SCS("get_base_script"));
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"property/type_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_type_cache"),_SCS("_get_type_cache"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"property/basic_type",PROPERTY_HINT_ENUM,bt),_SCS("set_basic_type"),_SCS("get_basic_type"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"property/event_type",PROPERTY_HINT_ENUM,et),_SCS("set_event_type"),_SCS("get_event_type"));
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"property/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path"));
@@ -1704,12 +2196,10 @@ public:
VisualScriptInstance *instance;
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
- //virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return (call_mode==VisualScriptPropertyGet::CALL_MODE_SELF || call_mode==VisualScriptPropertyGet::CALL_MODE_NODE_PATH); }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
- //these two modes can be get directly, so they use unsequenced mode
switch(call_mode) {
case VisualScriptPropertyGet::CALL_MODE_SELF: {
@@ -1718,63 +2208,57 @@ public:
bool valid;
- *r_value = object->get(property,&valid);
+ *p_outputs[0] = object->get(property,&valid);
if (!valid) {
- //r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error=RTR("Invalid index property name.");
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str=RTR("Invalid index property name.");
+ return 0;
}
} break;
case VisualScriptPropertyGet::CALL_MODE_NODE_PATH: {
Node* node = instance->get_owner_ptr()->cast_to<Node>();
if (!node) {
- //r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error=RTR("Base object is not a Node!");
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str=RTR("Base object is not a Node!");
+ return 0;
}
Node* another = node->get_node(node_path);
if (!node) {
- //r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error=RTR("Path does not lead Node!");
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str=RTR("Path does not lead Node!");
+ return 0;
}
bool valid;
- *r_value = another->get(property,&valid);
+ *p_outputs[0] = another->get(property,&valid);
if (!valid) {
- //r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error=vformat(RTR("Invalid index property name '%s' in node %s."),String(property),another->get_name());
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str=vformat(RTR("Invalid index property name '%s' in node %s."),String(property),another->get_name());
+ return 0;
}
} break;
- default: {};
- }
- return true;
-
- }
+ default: {
- virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
-
-
- bool valid;
- Variant v = *p_inputs[0];
+ bool valid;
+ Variant v = *p_inputs[0];
- *p_outputs[0] = v.get(property,&valid);
+ *p_outputs[0] = v.get(property,&valid);
- if (!valid) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error_str=RTR("Invalid index property name.");
+ if (!valid) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str=RTR("Invalid index property name.");
+ }
+ };
}
-
return 0;
}
@@ -1797,10 +2281,11 @@ VisualScriptNodeInstance* VisualScriptPropertyGet::instance(VisualScriptInstance
VisualScriptPropertyGet::VisualScriptPropertyGet() {
- call_mode=CALL_MODE_INSTANCE;
+ call_mode=CALL_MODE_SELF;
base_type="Object";
basic_type=Variant::NIL;
event_type=InputEvent::NONE;
+ type_cache=Variant::NIL;
}
@@ -1815,463 +2300,6 @@ static Ref<VisualScriptNode> create_property_get_node(const String& p_name) {
//////////////////////////////////////////
-////////////////SCRIPT CALL//////////////////////
-//////////////////////////////////////////
-
-int VisualScriptScriptCall::get_output_sequence_port_count() const {
-
- return 1;
-}
-
-bool VisualScriptScriptCall::has_input_sequence_port() const{
-
- return true;
-}
-
-Node *VisualScriptScriptCall::_get_base_node() const {
-
-#ifdef TOOLS_ENABLED
- Ref<Script> script = get_visual_script();
- if (!script.is_valid())
- return NULL;
-
- MainLoop * main_loop = OS::get_singleton()->get_main_loop();
- if (!main_loop)
- return NULL;
-
- SceneTree *scene_tree = main_loop->cast_to<SceneTree>();
-
- if (!scene_tree)
- return NULL;
-
- Node *edited_scene = scene_tree->get_edited_scene_root();
-
- if (!edited_scene)
- return NULL;
-
- Node* script_node = _find_script_node(edited_scene,edited_scene,script);
-
- if (!script_node)
- return NULL;
-
- if (!script_node->has_node(base_path))
- return NULL;
-
- Node *path_to = script_node->get_node(base_path);
-
- return path_to;
-#else
-
- return NULL;
-#endif
-}
-
-
-int VisualScriptScriptCall::get_input_value_port_count() const{
-
-#if 1
- return argument_count;
-#else
- if (call_mode==CALL_MODE_SELF) {
-
- Ref<VisualScript> vs = get_visual_script();
- if (vs.is_valid()) {
-
- if (!vs->has_function(function))
- return 0;
-
- int id = vs->get_function_node_id(function);
- if (id<0)
- return 0;
-
- Ref<VisualScriptFunction> func = vs->get_node(function,id);
-
- return func->get_argument_count();
- }
- } else {
-
- Node*base = _get_base_node();
- if (!base)
- return 0;
- Ref<Script> script = base->get_script();
- if (!script.is_valid())
- return 0;
-
- List<MethodInfo> functions;
- script->get_method_list(&functions);
- for (List<MethodInfo>::Element *E=functions.front();E;E=E->next()) {
- if (E->get().name==function) {
- return E->get().arguments.size();
- }
- }
-
- }
-
-
- return 0;
-#endif
-
-}
-int VisualScriptScriptCall::get_output_value_port_count() const{
- return 1;
-}
-
-String VisualScriptScriptCall::get_output_sequence_port_text(int p_port) const {
-
- return String();
-}
-
-PropertyInfo VisualScriptScriptCall::get_input_value_port_info(int p_idx) const{
-
- if (call_mode==CALL_MODE_SELF) {
-
- Ref<VisualScript> vs = get_visual_script();
- if (vs.is_valid()) {
-
- if (!vs->has_function(function))
- return PropertyInfo();
-
- int id = vs->get_function_node_id(function);
- if (id<0)
- return PropertyInfo();
-
- Ref<VisualScriptFunction> func = vs->get_node(function,id);
-
- if (p_idx>=func->get_argument_count())
- return PropertyInfo();
- return PropertyInfo(func->get_argument_type(p_idx),func->get_argument_name(p_idx));
- }
- } else {
-
- Node*base = _get_base_node();
- if (!base)
- return PropertyInfo();
- Ref<Script> script = base->get_script();
- if (!script.is_valid())
- return PropertyInfo();
-
- List<MethodInfo> functions;
- script->get_method_list(&functions);
- for (List<MethodInfo>::Element *E=functions.front();E;E=E->next()) {
- if (E->get().name==function) {
- if (p_idx<0 || p_idx>=E->get().arguments.size())
- return PropertyInfo();
- return E->get().arguments[p_idx];
- }
- }
-
- }
-
- return PropertyInfo();
-
-}
-
-PropertyInfo VisualScriptScriptCall::get_output_value_port_info(int p_idx) const{
-
- return PropertyInfo();
-}
-
-
-String VisualScriptScriptCall::get_caption() const {
-
- return "ScriptCall";
-}
-
-String VisualScriptScriptCall::get_text() const {
-
- return " "+String(function)+"()";
-}
-
-void VisualScriptScriptCall::_update_argument_count() {
-
- //try to remember the amount of arguments in the function, because if loaded from scratch
- //this information will not be available
-
- if (call_mode==CALL_MODE_SELF) {
-
- Ref<VisualScript> vs = get_visual_script();
- if (vs.is_valid()) {
-
- if (!vs->has_function(function))
- return ;
-
- int id = vs->get_function_node_id(function);
- if (id<0)
- return;
-
- Ref<VisualScriptFunction> func = vs->get_node(function,id);
-
- argument_count=func->get_argument_count();
- }
- } else {
-
- Node*base = _get_base_node();
- if (!base)
- return;
-
- Ref<Script> script = base->get_script();
- if (!script.is_valid())
- return ;
-
- List<MethodInfo> functions;
- script->get_method_list(&functions);
- for (List<MethodInfo>::Element *E=functions.front();E;E=E->next()) {
- if (E->get().name==function) {
- argument_count=E->get().arguments.size();
- return;
- }
- }
-
- }
-}
-
-
-void VisualScriptScriptCall::set_function(const StringName& p_type){
-
- if (function==p_type)
- return;
-
- function=p_type;
- _update_argument_count();
- _change_notify();
- ports_changed_notify();
-}
-StringName VisualScriptScriptCall::get_function() const {
-
-
- return function;
-}
-
-void VisualScriptScriptCall::set_base_path(const NodePath& p_type) {
-
- if (base_path==p_type)
- return;
-
- base_path=p_type;
- _update_argument_count();
- _change_notify();
- ports_changed_notify();
-}
-
-NodePath VisualScriptScriptCall::get_base_path() const {
-
- return base_path;
-}
-
-
-void VisualScriptScriptCall::set_call_mode(CallMode p_mode) {
-
- if (call_mode==p_mode)
- return;
-
- call_mode=p_mode;
- _update_argument_count();
- _change_notify();
- ports_changed_notify();
-
-}
-
-void VisualScriptScriptCall::set_argument_count(int p_count) {
-
- argument_count=p_count;
- _change_notify();
- ports_changed_notify();
-
-}
-
-int VisualScriptScriptCall::get_argument_count() const {
-
- return argument_count;
-}
-
-VisualScriptScriptCall::CallMode VisualScriptScriptCall::get_call_mode() const {
-
- return call_mode;
-}
-
-void VisualScriptScriptCall::_validate_property(PropertyInfo& property) const {
-
-
-
- if (property.name=="function/node_path") {
- if (call_mode!=CALL_MODE_NODE_PATH) {
- property.usage=0;
- } else {
-
- Node *bnode = _get_base_node();
- if (bnode) {
- property.hint_string=bnode->get_path(); //convert to loong string
- } else {
-
- }
- }
- }
-
- if (property.name=="function/function") {
- property.hint=PROPERTY_HINT_ENUM;
-
-
- List<MethodInfo> methods;
-
- if (call_mode==CALL_MODE_SELF) {
-
- Ref<VisualScript> vs = get_visual_script();
- if (vs.is_valid()) {
-
- vs->get_method_list(&methods);
-
- }
- } else {
-
- Node*base = _get_base_node();
- if (!base)
- return;
- Ref<Script> script = base->get_script();
- if (!script.is_valid())
- return;
-
- script->get_method_list(&methods);
-
- }
-
- List<String> mstring;
- for (List<MethodInfo>::Element *E=methods.front();E;E=E->next()) {
- if (E->get().name.begins_with("_"))
- continue;
- mstring.push_back(E->get().name.get_slice(":",0));
- }
-
- mstring.sort();
-
- String ml;
- for (List<String>::Element *E=mstring.front();E;E=E->next()) {
-
- if (ml!=String())
- ml+=",";
- ml+=E->get();
- }
-
- property.hint_string=ml;
- }
-
-}
-
-
-void VisualScriptScriptCall::_bind_methods() {
-
- ObjectTypeDB::bind_method(_MD("set_function","function"),&VisualScriptScriptCall::set_function);
- ObjectTypeDB::bind_method(_MD("get_function"),&VisualScriptScriptCall::get_function);
-
- ObjectTypeDB::bind_method(_MD("set_call_mode","mode"),&VisualScriptScriptCall::set_call_mode);
- ObjectTypeDB::bind_method(_MD("get_call_mode"),&VisualScriptScriptCall::get_call_mode);
-
- ObjectTypeDB::bind_method(_MD("set_base_path","base_path"),&VisualScriptScriptCall::set_base_path);
- ObjectTypeDB::bind_method(_MD("get_base_path"),&VisualScriptScriptCall::get_base_path);
-
- ObjectTypeDB::bind_method(_MD("set_argument_count","argument_count"),&VisualScriptScriptCall::set_argument_count);
- ObjectTypeDB::bind_method(_MD("get_argument_count"),&VisualScriptScriptCall::get_argument_count);
-
- ADD_PROPERTY(PropertyInfo(Variant::INT,"function/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path"),_SCS("set_call_mode"),_SCS("get_call_mode"));
- ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"function/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path"));
- ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/function"),_SCS("set_function"),_SCS("get_function"));
- ADD_PROPERTY(PropertyInfo(Variant::STRING,"function/argument_count"),_SCS("set_argument_count"),_SCS("get_argument_count"));
-
- BIND_CONSTANT( CALL_MODE_SELF );
- BIND_CONSTANT( CALL_MODE_NODE_PATH);
-
-}
-
-class VisualScriptNodeInstanceScriptCall : public VisualScriptNodeInstance {
-public:
-
-
- VisualScriptScriptCall::CallMode call_mode;
- NodePath node_path;
- int input_args;
- bool returns;
- StringName function;
-
- VisualScriptScriptCall *node;
- VisualScriptInstance *instance;
-
-
-
- //virtual int get_working_memory_size() const { return 0; }
- //virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
- //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
-
- virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
-
-
- switch(call_mode) {
-
- case VisualScriptScriptCall::CALL_MODE_SELF: {
-
- Object *object=instance->get_owner_ptr();
-
- *p_outputs[0] = object->call(function,p_inputs,input_args,r_error);
-
- } break;
- case VisualScriptScriptCall::CALL_MODE_NODE_PATH: {
-
- Node* node = instance->get_owner_ptr()->cast_to<Node>();
- if (!node) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error_str="Base object is not a Node!";
- return 0;
- }
-
- Node* another = node->get_node(node_path);
- if (!node) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
- r_error_str="Path does not lead Node!";
- return 0;
- }
-
-
- *p_outputs[0] = another->call(function,p_inputs,input_args,r_error);
-
- } break;
-
- }
- return 0;
-
- }
-
-
-};
-
-VisualScriptNodeInstance* VisualScriptScriptCall::instance(VisualScriptInstance* p_instance) {
-
- VisualScriptNodeInstanceScriptCall * instance = memnew(VisualScriptNodeInstanceScriptCall );
- instance->node=this;
- instance->instance=p_instance;
- instance->function=function;
- instance->call_mode=call_mode;
- instance->node_path=base_path;
- instance->input_args = argument_count;
- return instance;
-}
-
-VisualScriptScriptCall::VisualScriptScriptCall() {
-
- call_mode=CALL_MODE_SELF;
- argument_count=0;
-
-
-}
-
-template<VisualScriptScriptCall::CallMode cmode>
-static Ref<VisualScriptNode> create_script_call_node(const String& p_name) {
-
- Ref<VisualScriptScriptCall> node;
- node.instance();
- node->set_call_mode(cmode);
- return node;
-}
-
-
-//////////////////////////////////////////
////////////////EMIT//////////////////////
//////////////////////////////////////////
@@ -2475,24 +2503,13 @@ static Ref<VisualScriptNode> create_basic_type_call_node(const String& p_name) {
void register_visual_script_func_nodes() {
- VisualScriptLanguage::singleton->add_register_func("functions/call_method/call_instance",create_function_call_node<VisualScriptFunctionCall::CALL_MODE_INSTANCE>);
- VisualScriptLanguage::singleton->add_register_func("functions/call_method/call_basic_type",create_function_call_node<VisualScriptFunctionCall::CALL_MODE_BASIC_TYPE>);
- VisualScriptLanguage::singleton->add_register_func("functions/call_method/call_self",create_function_call_node<VisualScriptFunctionCall::CALL_MODE_SELF>);
- VisualScriptLanguage::singleton->add_register_func("functions/call_method/call_node",create_function_call_node<VisualScriptFunctionCall::CALL_MODE_NODE_PATH>);
-
- VisualScriptLanguage::singleton->add_register_func("functions/property_set/instace_set",create_property_set_node<VisualScriptPropertySet::CALL_MODE_INSTANCE>);
- VisualScriptLanguage::singleton->add_register_func("functions/property_set/basic_type_set",create_property_set_node<VisualScriptPropertySet::CALL_MODE_BASIC_TYPE>);
- VisualScriptLanguage::singleton->add_register_func("functions/property_set/self_set",create_property_set_node<VisualScriptPropertySet::CALL_MODE_SELF>);
- VisualScriptLanguage::singleton->add_register_func("functions/property_set/node_set",create_property_set_node<VisualScriptPropertySet::CALL_MODE_NODE_PATH>);
-
- VisualScriptLanguage::singleton->add_register_func("functions/property_get/instance_get",create_property_get_node<VisualScriptPropertyGet::CALL_MODE_INSTANCE>);
- VisualScriptLanguage::singleton->add_register_func("functions/property_get/basic_type_get",create_property_get_node<VisualScriptPropertyGet::CALL_MODE_BASIC_TYPE>);
- VisualScriptLanguage::singleton->add_register_func("functions/property_get/self_get",create_property_get_node<VisualScriptPropertyGet::CALL_MODE_SELF>);
- VisualScriptLanguage::singleton->add_register_func("functions/property_get/node_get",create_property_get_node<VisualScriptPropertyGet::CALL_MODE_NODE_PATH>);
+ VisualScriptLanguage::singleton->add_register_func("functions/call",create_node_generic<VisualScriptFunctionCall>);
+ VisualScriptLanguage::singleton->add_register_func("functions/set",create_node_generic<VisualScriptPropertySet>);
+ VisualScriptLanguage::singleton->add_register_func("functions/get",create_node_generic<VisualScriptPropertyGet>);
- VisualScriptLanguage::singleton->add_register_func("functions/call_script/call_self",create_script_call_node<VisualScriptScriptCall::CALL_MODE_SELF>);
- VisualScriptLanguage::singleton->add_register_func("functions/call_script/call_node",create_script_call_node<VisualScriptScriptCall::CALL_MODE_NODE_PATH>);
- VisualScriptLanguage::singleton->add_register_func("functions/call_script/emit_signal",create_node_generic<VisualScriptEmitSignal>);
+ //VisualScriptLanguage::singleton->add_register_func("functions/call_script/call_self",create_script_call_node<VisualScriptScriptCall::CALL_MODE_SELF>);
+// VisualScriptLanguage::singleton->add_register_func("functions/call_script/call_node",create_script_call_node<VisualScriptScriptCall::CALL_MODE_NODE_PATH>);
+ VisualScriptLanguage::singleton->add_register_func("functions/emit_signal",create_node_generic<VisualScriptEmitSignal>);
for(int i=0;i<Variant::VARIANT_MAX;i++) {
diff --git a/modules/visual_script/visual_script_func_nodes.h b/modules/visual_script/visual_script_func_nodes.h
index 2ccc61242a..43ef276cf4 100644
--- a/modules/visual_script/visual_script_func_nodes.h
+++ b/modules/visual_script/visual_script_func_nodes.h
@@ -13,20 +13,40 @@ public:
CALL_MODE_NODE_PATH,
CALL_MODE_INSTANCE,
CALL_MODE_BASIC_TYPE,
+ CALL_MODE_SINGLETON,
};
+
+ enum RPCCallMode {
+ RPC_DISABLED,
+ RPC_RELIABLE,
+ RPC_UNRELIABLE,
+ RPC_RELIABLE_TO_ID,
+ RPC_UNRELIABLE_TO_ID
+ };
+
private:
CallMode call_mode;
StringName base_type;
+ String base_script;
Variant::Type basic_type;
NodePath base_path;
StringName function;
int use_default_args;
+ RPCCallMode rpc_call_mode;
+ StringName singleton;
+ bool validate;
+
Node *_get_base_node() const;
StringName _get_base_type() const;
- void _update_defargs();
+ MethodInfo method_cache;
+ void _update_method_cache();
+
+ void _set_argument_cache(const Dictionary& p_args);
+ Dictionary _get_argument_cache() const;
+
protected:
virtual void _validate_property(PropertyInfo& property) const;
@@ -58,24 +78,41 @@ public:
void set_base_type(const StringName& p_type);
StringName get_base_type() const;
+ void set_base_script(const String& p_path);
+ String get_base_script() const;
+
+ void set_singleton(const StringName& p_type);
+ StringName get_singleton() const;
+
void set_function(const StringName& p_type);
StringName get_function() const;
void set_base_path(const NodePath& p_type);
NodePath get_base_path() const;
+
void set_call_mode(CallMode p_mode);
CallMode get_call_mode() const;
void set_use_default_args(int p_amount);
int get_use_default_args() const;
+ void set_validate(bool p_amount);
+ bool get_validate() const;
+
+ void set_rpc_call_mode(RPCCallMode p_mode);
+ RPCCallMode get_rpc_call_mode() const;
+
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+ virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
+
+
VisualScriptFunctionCall();
};
VARIANT_ENUM_CAST(VisualScriptFunctionCall::CallMode );
+VARIANT_ENUM_CAST(VisualScriptFunctionCall::RPCCallMode );
class VisualScriptPropertySet : public VisualScriptNode {
@@ -92,13 +129,14 @@ public:
};
private:
+ PropertyInfo type_cache;
+
CallMode call_mode;
Variant::Type basic_type;
StringName base_type;
+ String base_script;
NodePath base_path;
StringName property;
- bool use_builtin_value;
- Variant builtin_value;
InputEvent::Type event_type;
Node *_get_base_node() const;
@@ -106,6 +144,12 @@ private:
void _update_base_type();
+ void _update_cache();
+
+ void _set_type_cache(const Dictionary& p_type);
+ Dictionary _get_type_cache() const;
+
+
protected:
virtual void _validate_property(PropertyInfo& property) const;
@@ -134,6 +178,9 @@ public:
void set_base_type(const StringName& p_type);
StringName get_base_type() const;
+ void set_base_script(const String& p_path);
+ String get_base_script() const;
+
void set_basic_type(Variant::Type p_type);
Variant::Type get_basic_type() const;
@@ -149,13 +196,9 @@ public:
void set_call_mode(CallMode p_mode);
CallMode get_call_mode() const;
- void set_use_builtin_value(bool p_use);
- bool is_using_builtin_value() const;
-
- void set_builtin_value(const Variant &p_value);
- Variant get_builtin_value() const;
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+ virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
VisualScriptPropertySet();
};
@@ -171,14 +214,17 @@ public:
CALL_MODE_SELF,
CALL_MODE_NODE_PATH,
CALL_MODE_INSTANCE,
- CALL_MODE_BASIC_TYPE
+ CALL_MODE_BASIC_TYPE,
};
private:
+ Variant::Type type_cache;
+
CallMode call_mode;
Variant::Type basic_type;
StringName base_type;
+ String base_script;
NodePath base_path;
StringName property;
InputEvent::Type event_type;
@@ -187,6 +233,10 @@ private:
Node *_get_base_node() const;
StringName _get_base_type() const;
+ void _update_cache();
+
+ void _set_type_cache(Variant::Type p_type);
+ Variant::Type _get_type_cache() const;
protected:
virtual void _validate_property(PropertyInfo& property) const;
@@ -216,6 +266,9 @@ public:
void set_base_type(const StringName& p_type);
StringName get_base_type() const;
+ void set_base_script(const String& p_path);
+ String get_base_script() const;
+
void set_basic_type(Variant::Type p_type);
Variant::Type get_basic_type() const;
@@ -244,74 +297,6 @@ VARIANT_ENUM_CAST(VisualScriptPropertyGet::CallMode );
-class VisualScriptScriptCall : public VisualScriptNode {
-
- OBJ_TYPE(VisualScriptScriptCall,VisualScriptNode)
-public:
- enum CallMode {
- CALL_MODE_SELF,
- CALL_MODE_NODE_PATH,
- };
-private:
-
- CallMode call_mode;
- NodePath base_path;
- StringName function;
- int argument_count;
-
-
- Node *_get_base_node() const;
-
-
- void _update_argument_count();
-protected:
- virtual void _validate_property(PropertyInfo& property) const;
-
- static void _bind_methods();
-
-public:
-
- virtual int get_output_sequence_port_count() const;
- virtual bool has_input_sequence_port() const;
-
-
- virtual String get_output_sequence_port_text(int p_port) const;
-
-
- virtual int get_input_value_port_count() const;
- virtual int get_output_value_port_count() const;
-
-
- virtual PropertyInfo get_input_value_port_info(int p_idx) const;
- virtual PropertyInfo get_output_value_port_info(int p_idx) const;
-
- virtual String get_caption() const;
- virtual String get_text() const;
- virtual String get_category() const { return "functions"; }
-
- void set_function(const StringName& p_type);
- StringName get_function() const;
-
- void set_base_path(const NodePath& p_type);
- NodePath get_base_path() const;
-
- void set_call_mode(CallMode p_mode);
- CallMode get_call_mode() const;
-
- void set_argument_count(int p_count);
- int get_argument_count() const;
-
-
- virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
-
- VisualScriptScriptCall();
-};
-
-VARIANT_ENUM_CAST(VisualScriptScriptCall::CallMode );
-
-
-
-
class VisualScriptEmitSignal : public VisualScriptNode {
OBJ_TYPE(VisualScriptEmitSignal,VisualScriptNode)
@@ -351,6 +336,9 @@ public:
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+
+
VisualScriptEmitSignal();
};
diff --git a/modules/visual_script/visual_script_nodes.cpp b/modules/visual_script/visual_script_nodes.cpp
index d205a40f76..7ada292b13 100644
--- a/modules/visual_script/visual_script_nodes.cpp
+++ b/modules/visual_script/visual_script_nodes.cpp
@@ -4,6 +4,7 @@
#include "scene/main/scene_main_loop.h"
#include "os/os.h"
#include "scene/main/node.h"
+#include "os/input.h"
//////////////////////////////////////////
////////////////FUNCTION//////////////////
@@ -62,6 +63,12 @@ bool VisualScriptFunction::_set(const StringName& p_name, const Variant& p_valu
stack_size=p_value;
return true;
}
+
+ if (p_name=="rpc/mode") {
+ rpc_mode=ScriptInstance::RPCMode(int(p_value));
+ return true;
+ }
+
return false;
}
@@ -99,13 +106,18 @@ bool VisualScriptFunction::_get(const StringName& p_name,Variant &r_ret) const
return true;
}
+ if (p_name=="rpc/mode") {
+ r_ret=rpc_mode;
+ return true;
+ }
+
return false;
}
void VisualScriptFunction::_get_property_list( List<PropertyInfo> *p_list) const {
p_list->push_back(PropertyInfo(Variant::INT,"argument_count",PROPERTY_HINT_RANGE,"0,256"));
- String argt="Variant";
+ String argt="Any";
for(int i=1;i<Variant::VARIANT_MAX;i++) {
argt+=","+Variant::get_type_name(Variant::Type(i));
}
@@ -118,6 +130,7 @@ void VisualScriptFunction::_get_property_list( List<PropertyInfo> *p_list) cons
p_list->push_back(PropertyInfo(Variant::INT,"stack/size",PROPERTY_HINT_RANGE,"1,100000"));
}
p_list->push_back(PropertyInfo(Variant::BOOL,"stack/stackless"));
+ p_list->push_back(PropertyInfo(Variant::INT,"rpc/mode",PROPERTY_HINT_ENUM,"Disabled,Remote,Sync,Master,Slave"));
}
@@ -224,6 +237,16 @@ int VisualScriptFunction::get_argument_count() const {
return arguments.size();
}
+
+void VisualScriptFunction::set_rpc_mode(ScriptInstance::RPCMode p_mode) {
+ rpc_mode=p_mode;
+}
+
+ScriptInstance::RPCMode VisualScriptFunction::get_rpc_mode() const {
+ return rpc_mode;
+}
+
+
class VisualScriptNodeInstanceFunction : public VisualScriptNodeInstance {
public:
@@ -231,8 +254,6 @@ public:
VisualScriptInstance *instance;
//virtual int get_working_memory_size() const { return 0; }
- //virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
- //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
@@ -272,6 +293,7 @@ VisualScriptFunction::VisualScriptFunction() {
stack_size=256;
stack_less=false;
+ rpc_mode=ScriptInstance::RPC_MODE_DISABLED;
}
@@ -302,12 +324,12 @@ int VisualScriptFunction::get_stack_size() const {
int VisualScriptOperator::get_output_sequence_port_count() const {
- return 1;
+ return 0;
}
bool VisualScriptOperator::has_input_sequence_port() const{
- return true;
+ return false;
}
int VisualScriptOperator::get_input_value_port_count() const{
@@ -362,6 +384,8 @@ PropertyInfo VisualScriptOperator::get_input_value_port_info(int p_idx) const{
PropertyInfo pinfo;
pinfo.name=p_idx==0?"A":"B";
pinfo.type=port_types[op][p_idx];
+ if (pinfo.type==Variant::NIL)
+ pinfo.type=typed;
return pinfo;
}
PropertyInfo VisualScriptOperator::get_output_value_port_info(int p_idx) const{
@@ -400,6 +424,8 @@ PropertyInfo VisualScriptOperator::get_output_value_port_info(int p_idx) const{
PropertyInfo pinfo;
pinfo.name="";
pinfo.type=port_types[op];
+ if (pinfo.type==Variant::NIL)
+ pinfo.type=typed;
return pinfo;
}
@@ -492,19 +518,43 @@ Variant::Operator VisualScriptOperator::get_operator() const{
return op;
}
+void VisualScriptOperator::set_typed(Variant::Type p_op) {
+
+ if (typed==p_op)
+ return;
+
+ typed=p_op;
+ ports_changed_notify();
+}
+
+Variant::Type VisualScriptOperator::get_typed() const {
+
+ return typed;
+}
+
void VisualScriptOperator::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_operator","op"),&VisualScriptOperator::set_operator);
ObjectTypeDB::bind_method(_MD("get_operator"),&VisualScriptOperator::get_operator);
+ ObjectTypeDB::bind_method(_MD("set_typed","type"),&VisualScriptOperator::set_typed);
+ ObjectTypeDB::bind_method(_MD("get_typed"),&VisualScriptOperator::get_typed);
+
String types;
for(int i=0;i<Variant::OP_MAX;i++) {
if (i>0)
types+=",";
types+=op_names[i];
}
+
+ String argt="Any";
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+ argt+=","+Variant::get_type_name(Variant::Type(i));
+ }
+
ADD_PROPERTY(PropertyInfo(Variant::INT,"operator_value/type",PROPERTY_HINT_ENUM,types),_SCS("set_operator"),_SCS("get_operator"));
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"typed_value/typed",PROPERTY_HINT_ENUM,argt),_SCS("set_typed"),_SCS("get_typed"));
}
@@ -515,8 +565,6 @@ public:
Variant::Operator op;
//virtual int get_working_memory_size() const { return 0; }
- //virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
- //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return true; }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
@@ -558,6 +606,7 @@ VisualScriptNodeInstance* VisualScriptOperator::instance(VisualScriptInstance* p
VisualScriptOperator::VisualScriptOperator() {
op=Variant::OP_ADD;
+ typed=Variant::NIL;
}
@@ -679,20 +728,14 @@ public:
VisualScriptInstance *instance;
StringName variable;
- //virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
-
- if (instance->get_variable(variable,r_value)==false) {
- r_error=RTR("VariableGet not found in script: ")+"'"+String(variable)+"'";
- return false;
- } else {
- return true;
- }
- }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+ if (instance->get_variable(variable,p_outputs[0])==false) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str=RTR("VariableGet not found in script: ")+"'"+String(variable)+"'";
+ return false;
+ }
return 0;
}
@@ -714,7 +757,7 @@ VisualScriptVariableGet::VisualScriptVariableGet() {
//////////////////////////////////////////
-////////////////VARIABLE GET//////////////////
+////////////////VARIABLE SET//////////////////
//////////////////////////////////////////
int VisualScriptVariableSet::get_output_sequence_port_count() const {
@@ -822,17 +865,16 @@ public:
StringName variable;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
if (instance->set_variable(variable,*p_inputs[0])==false) {
- r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD ;
+
+
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
r_error_str=RTR("VariableSet not found in script: ")+"'"+String(variable)+"'";
}
-
return 0;
}
@@ -971,17 +1013,10 @@ public:
Variant constant;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
-
- *r_value=constant;
-
- return true;
-
- }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+ *p_outputs[0]=constant;
return 0;
}
@@ -1001,6 +1036,124 @@ VisualScriptConstant::VisualScriptConstant() {
}
+//////////////////////////////////////////
+////////////////PRELOAD//////////////////
+//////////////////////////////////////////
+
+int VisualScriptPreload::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptPreload::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptPreload::get_input_value_port_count() const{
+
+ return 0;
+}
+int VisualScriptPreload::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptPreload::get_output_sequence_port_text(int p_port) const {
+
+ return String();
+}
+
+PropertyInfo VisualScriptPreload::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo();
+}
+
+PropertyInfo VisualScriptPreload::get_output_value_port_info(int p_idx) const{
+
+ PropertyInfo pinfo=PropertyInfo(Variant::OBJECT,"res");
+ if (preload.is_valid()) {
+ pinfo.hint=PROPERTY_HINT_RESOURCE_TYPE;
+ pinfo.hint_string=preload->get_type();
+ }
+
+ return pinfo;
+}
+
+
+String VisualScriptPreload::get_caption() const {
+
+ return "Preload";
+}
+
+String VisualScriptPreload::get_text() const {
+
+ if (preload.is_valid()) {
+ if (preload->get_path().is_resource_file()) {
+ return preload->get_path();
+ } else if (preload->get_name()!=String()) {
+ return preload->get_name();
+ } else {
+ return preload->get_type();
+ }
+ } else {
+ return "<empty>";
+ }
+}
+
+
+void VisualScriptPreload::set_preload(const Ref<Resource>& p_preload){
+
+ if (preload==p_preload)
+ return;
+
+ preload=p_preload;
+ ports_changed_notify();
+}
+Ref<Resource> VisualScriptPreload::get_preload() const{
+
+ return preload;
+}
+
+
+void VisualScriptPreload::_bind_methods() {
+
+
+ ObjectTypeDB::bind_method(_MD("set_preload","resource"),&VisualScriptPreload::set_preload);
+ ObjectTypeDB::bind_method(_MD("get_preload"),&VisualScriptPreload::get_preload);
+
+
+ ADD_PROPERTY(PropertyInfo(Variant::OBJECT,"resource",PROPERTY_HINT_RESOURCE_TYPE,"Resource"),_SCS("set_preload"),_SCS("get_preload"));
+
+}
+
+class VisualScriptNodeInstancePreload : public VisualScriptNodeInstance {
+public:
+
+ Ref<Resource> preload;
+ //virtual int get_working_memory_size() const { return 0; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ *p_outputs[0]=preload;
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptPreload::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstancePreload * instance = memnew(VisualScriptNodeInstancePreload );
+ instance->preload=preload;
+ return instance;
+}
+
+VisualScriptPreload::VisualScriptPreload() {
+
+}
+
+
//////////////////////////////////////////
@@ -1009,12 +1162,12 @@ VisualScriptConstant::VisualScriptConstant() {
int VisualScriptIndexGet::get_output_sequence_port_count() const {
- return 1;
+ return 0;
}
bool VisualScriptIndexGet::has_input_sequence_port() const{
- return true;
+ return false;
}
int VisualScriptIndexGet::get_input_value_port_count() const{
@@ -1063,8 +1216,6 @@ public:
//virtual int get_working_memory_size() const { return 0; }
- //virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
@@ -1155,8 +1306,6 @@ public:
//virtual int get_working_memory_size() const { return 0; }
- //virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
@@ -1252,17 +1401,11 @@ public:
int index;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
-
- *r_value = GlobalConstants::get_global_constant_value(index);
- return true;
-
- }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+ *p_outputs[0] = GlobalConstants::get_global_constant_value(index);
return 0;
}
@@ -1297,6 +1440,286 @@ VisualScriptGlobalConstant::VisualScriptGlobalConstant() {
index=0;
}
+//////////////////////////////////////////
+////////////////CLASSCONSTANT///////////
+//////////////////////////////////////////
+
+int VisualScriptClassConstant::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptClassConstant::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptClassConstant::get_input_value_port_count() const{
+
+ return 0;
+}
+int VisualScriptClassConstant::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptClassConstant::get_output_sequence_port_text(int p_port) const {
+
+ return String();
+}
+
+PropertyInfo VisualScriptClassConstant::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo();
+}
+
+PropertyInfo VisualScriptClassConstant::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(Variant::INT,"value");
+}
+
+
+String VisualScriptClassConstant::get_caption() const {
+
+ return "ClassConst";
+}
+
+String VisualScriptClassConstant::get_text() const {
+
+ return String(base_type)+"."+String(name);
+}
+
+void VisualScriptClassConstant::set_class_constant(const StringName& p_which) {
+
+ name=p_which;
+ _change_notify();
+ ports_changed_notify();
+}
+
+StringName VisualScriptClassConstant::get_class_constant() {
+ return name;
+}
+
+
+void VisualScriptClassConstant::set_base_type(const StringName& p_which) {
+
+ base_type=p_which;
+ _change_notify();
+ ports_changed_notify();
+}
+
+StringName VisualScriptClassConstant::get_base_type() {
+ return base_type;
+}
+
+class VisualScriptNodeInstanceClassConstant : public VisualScriptNodeInstance {
+public:
+
+ int value;
+ bool valid;
+ //virtual int get_working_memory_size() const { return 0; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ if (!valid) {
+ r_error_str="Invalid constant name, pick a valid class constant.";
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ }
+
+ *p_outputs[0] = value;
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptClassConstant::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceClassConstant * instance = memnew(VisualScriptNodeInstanceClassConstant );
+ instance->value=ObjectTypeDB::get_integer_constant(base_type,name,&instance->valid);
+ return instance;
+}
+
+void VisualScriptClassConstant::_validate_property(PropertyInfo& property) const {
+
+ if (property.name=="constant") {
+
+ List<String> constants;
+ ObjectTypeDB::get_integer_constant_list(base_type,&constants,true);
+
+ property.hint_string="";
+ for(List<String>::Element *E=constants.front();E;E=E->next()) {
+ if (property.hint_string!=String()) {
+ property.hint_string+=",";
+ }
+ property.hint_string+=E->get();
+ }
+ }
+}
+
+void VisualScriptClassConstant::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_class_constant","name"),&VisualScriptClassConstant::set_class_constant);
+ ObjectTypeDB::bind_method(_MD("get_class_constant"),&VisualScriptClassConstant::get_class_constant);
+
+ ObjectTypeDB::bind_method(_MD("set_base_type","name"),&VisualScriptClassConstant::set_base_type);
+ ObjectTypeDB::bind_method(_MD("get_base_type"),&VisualScriptClassConstant::get_base_type);
+
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"constant",PROPERTY_HINT_ENUM,""),_SCS("set_class_constant"),_SCS("get_class_constant"));
+}
+
+VisualScriptClassConstant::VisualScriptClassConstant() {
+
+ base_type="Object";
+}
+
+
+//////////////////////////////////////////
+////////////////BASICTYPECONSTANT///////////
+//////////////////////////////////////////
+
+int VisualScriptBasicTypeConstant::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptBasicTypeConstant::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptBasicTypeConstant::get_input_value_port_count() const{
+
+ return 0;
+}
+int VisualScriptBasicTypeConstant::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptBasicTypeConstant::get_output_sequence_port_text(int p_port) const {
+
+ return String();
+}
+
+PropertyInfo VisualScriptBasicTypeConstant::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo();
+}
+
+PropertyInfo VisualScriptBasicTypeConstant::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(Variant::INT,"value");
+}
+
+
+String VisualScriptBasicTypeConstant::get_caption() const {
+
+ return "BasicConst";
+}
+
+String VisualScriptBasicTypeConstant::get_text() const {
+
+ return Variant::get_type_name(type)+"."+String(name);
+}
+
+void VisualScriptBasicTypeConstant::set_basic_type_constant(const StringName& p_which) {
+
+ name=p_which;
+ _change_notify();
+ ports_changed_notify();
+}
+
+StringName VisualScriptBasicTypeConstant::get_basic_type_constant() const {
+ return name;
+}
+
+
+void VisualScriptBasicTypeConstant::set_basic_type(Variant::Type p_which) {
+
+ type=p_which;
+ _change_notify();
+ ports_changed_notify();
+}
+
+Variant::Type VisualScriptBasicTypeConstant::get_basic_type() const {
+ return type;
+}
+
+class VisualScriptNodeInstanceBasicTypeConstant : public VisualScriptNodeInstance {
+public:
+
+ int value;
+ bool valid;
+ //virtual int get_working_memory_size() const { return 0; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ if (!valid) {
+ r_error_str="Invalid constant name, pick a valid basic type constant.";
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ }
+
+ *p_outputs[0] = value;
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptBasicTypeConstant::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceBasicTypeConstant * instance = memnew(VisualScriptNodeInstanceBasicTypeConstant );
+ instance->value=Variant::get_numeric_constant_value(type,name,&instance->valid);
+ return instance;
+}
+
+void VisualScriptBasicTypeConstant::_validate_property(PropertyInfo& property) const {
+
+ if (property.name=="constant") {
+
+ List<StringName> constants;
+ Variant::get_numeric_constants_for_type(type,&constants);
+
+ if (constants.size()==0) {
+ property.usage=0;
+ return;
+ }
+ property.hint_string="";
+ for(List<StringName>::Element *E=constants.front();E;E=E->next()) {
+ if (property.hint_string!=String()) {
+ property.hint_string+=",";
+ }
+ property.hint_string+=String(E->get());
+ }
+
+ }
+}
+
+void VisualScriptBasicTypeConstant::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_basic_type","name"),&VisualScriptBasicTypeConstant::set_basic_type);
+ ObjectTypeDB::bind_method(_MD("get_basic_type"),&VisualScriptBasicTypeConstant::get_basic_type);
+
+ ObjectTypeDB::bind_method(_MD("set_basic_type_constant","name"),&VisualScriptBasicTypeConstant::set_basic_type_constant);
+ ObjectTypeDB::bind_method(_MD("get_basic_type_constant"),&VisualScriptBasicTypeConstant::get_basic_type_constant);
+
+
+ String argt="Null";
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+ argt+=","+Variant::get_type_name(Variant::Type(i));
+ }
+
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"basic_type",PROPERTY_HINT_ENUM,argt),_SCS("set_basic_type"),_SCS("get_basic_type"));
+ ADD_PROPERTY(PropertyInfo(Variant::STRING,"constant",PROPERTY_HINT_ENUM,""),_SCS("set_basic_type_constant"),_SCS("get_basic_type_constant"));
+}
+
+VisualScriptBasicTypeConstant::VisualScriptBasicTypeConstant() {
+
+ type=Variant::NIL;
+}
+
//////////////////////////////////////////
@@ -1384,17 +1807,10 @@ public:
float value;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
-
- *r_value = value;
- return true;
-
- }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
-
+ *p_outputs[0]=value;
return 0;
}
@@ -1501,16 +1917,10 @@ public:
Object* singleton;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
-
- *r_value=singleton;
- return true;
- }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
-
+ *p_outputs[0]=singleton;
return 0;
}
@@ -1523,6 +1933,19 @@ VisualScriptNodeInstance* VisualScriptEngineSingleton::instance(VisualScriptInst
return instance;
}
+VisualScriptEngineSingleton::TypeGuess VisualScriptEngineSingleton::guess_output_type(TypeGuess* p_inputs, int p_output) const {
+
+ Object *obj=Globals::get_singleton()->get_singleton_object(singleton);
+ TypeGuess tg;
+ tg.type=Variant::OBJECT;
+ if (obj) {
+ tg.obj_type=obj->get_type();
+ tg.script=obj->get_script();
+ }
+
+ return tg;
+}
+
void VisualScriptEngineSingleton::_bind_methods() {
@@ -1623,28 +2046,26 @@ public:
NodePath path;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
Node* node = instance->get_owner_ptr()->cast_to<Node>();
if (!node) {
- r_error="Base object is not a Node!";
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Base object is not a Node!";
+ return 0;
}
Node* another = node->get_node(path);
if (!node) {
- r_error="Path does not lead Node!";
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Path does not lead Node!";
+ return 0;
}
- *r_value=another;
- return true;
- }
-
- virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+ *p_outputs[0]=another;
return 0;
}
@@ -1662,6 +2083,8 @@ VisualScriptNodeInstance* VisualScriptSceneNode::instance(VisualScriptInstance*
}
+
+
#ifdef TOOLS_ENABLED
static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const Ref<Script> &script) {
@@ -1685,6 +2108,49 @@ static Node* _find_script_node(Node* p_edited_scene,Node* p_current_node,const R
#endif
+VisualScriptSceneNode::TypeGuess VisualScriptSceneNode::guess_output_type(TypeGuess* p_inputs, int p_output) const {
+
+
+ VisualScriptSceneNode::TypeGuess tg;
+ tg.type=Variant::OBJECT;
+ tg.obj_type="Node";
+
+#ifdef TOOLS_ENABLED
+ Ref<Script> script = get_visual_script();
+ if (!script.is_valid())
+ return tg;
+
+ MainLoop * main_loop = OS::get_singleton()->get_main_loop();
+ if (!main_loop)
+ return tg;
+
+ SceneTree *scene_tree = main_loop->cast_to<SceneTree>();
+
+ if (!scene_tree)
+ return tg;
+
+ Node *edited_scene = scene_tree->get_edited_scene_root();
+
+ if (!edited_scene)
+ return tg;
+
+ Node* script_node = _find_script_node(edited_scene,edited_scene,script);
+
+ if (!script_node)
+ return tg;
+
+ Node* another = script_node->get_node(path);
+
+ if (another) {
+ tg.obj_type=another->get_type();
+ tg.script=another->get_script();
+ }
+#endif
+ return tg;
+
+}
+
+
void VisualScriptSceneNode::_validate_property(PropertyInfo& property) const {
#ifdef TOOLS_ENABLED
@@ -1789,28 +2255,24 @@ public:
VisualScriptInstance *instance;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
Node* node = instance->get_owner_ptr()->cast_to<Node>();
if (!node) {
- r_error="Base object is not a Node!";
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Base object is not a Node!";
+ return 0;
}
SceneTree* tree = node->get_tree();
if (!tree) {
- r_error="Attempt to get SceneTree while node is not in the active tree.";
- return false;
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ r_error_str="Attempt to get SceneTree while node is not in the active tree.";
+ return 0;
}
- *r_value=tree;
- return true;
-
- }
-
- virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
-
+ *p_outputs[0]=tree;
return 0;
}
@@ -1826,6 +2288,13 @@ VisualScriptNodeInstance* VisualScriptSceneTree::instance(VisualScriptInstance*
return instance;
}
+VisualScriptSceneTree::TypeGuess VisualScriptSceneTree::guess_output_type(TypeGuess* p_inputs, int p_output) const {
+
+ TypeGuess tg;
+ tg.type=Variant::OBJECT;
+ tg.obj_type="SceneTree";
+ return tg;
+}
void VisualScriptSceneTree::_validate_property(PropertyInfo& property) const {
@@ -1907,14 +2376,10 @@ public:
String path;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
- *r_value = path;
- return true;
- }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+ *p_outputs[0] = path;
return 0;
}
@@ -2004,15 +2469,10 @@ public:
VisualScriptInstance* instance;
//virtual int get_working_memory_size() const { return 0; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return true; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
-
- *r_value = instance->get_owner_ptr();
- return true;
- }
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+ *p_outputs[0] = instance->get_owner_ptr();
return 0;
}
@@ -2026,6 +2486,23 @@ VisualScriptNodeInstance* VisualScriptSelf::instance(VisualScriptInstance* p_ins
return instance;
}
+VisualScriptSelf::TypeGuess VisualScriptSelf::guess_output_type(TypeGuess* p_inputs, int p_output) const {
+
+ VisualScriptSceneNode::TypeGuess tg;
+ tg.type=Variant::OBJECT;
+ tg.obj_type="Object";
+
+ Ref<Script> script = get_visual_script();
+ if (!script.is_valid())
+ return tg;
+
+ tg.obj_type=script->get_instance_base_type();
+ tg.script=script;
+
+ return tg;
+
+
+}
void VisualScriptSelf::_bind_methods() {
@@ -2138,35 +2615,8 @@ public:
int in_count;
int out_count;
int work_mem_size;
- Vector<bool> out_unsequenced;
virtual int get_working_memory_size() const { return work_mem_size; }
- virtual bool is_output_port_unsequenced(int p_idx) const { return out_unsequenced[p_idx]; }
- virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const {
-
- if (!node->get_script_instance() || !node->get_script_instance()->has_method(VisualScriptLanguage::singleton->_get_output_port_unsequenced)) {
-#ifdef DEBUG_ENABLED
- r_error=RTR("Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced ports were specified.");
- return false;
- }
-#endif
-
- Array work_mem(true);
- work_mem.resize(work_mem_size);
-
- *r_value = node->get_script_instance()->call(VisualScriptLanguage::singleton->_get_output_port_unsequenced,p_idx,work_mem);
-
-
- for(int i=0;i<work_mem_size;i++) {
- if (i<work_mem.size()) {
- p_working_mem[i]=work_mem[i];
- }
- }
-
- return true;
-
- }
-
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
if (node->get_script_instance()) {
@@ -2239,10 +2689,6 @@ VisualScriptNodeInstance* VisualScriptCustomNode::instance(VisualScriptInstance*
instance->in_count=get_input_value_port_count();
instance->out_count=get_output_value_port_count();
- for(int i=0;i<instance->out_count;i++) {
- bool unseq = get_script_instance() && get_script_instance()->has_method("_is_output_port_unsequenced") && bool(get_script_instance()->call("_is_output_port_unsequenced",i));
- instance->out_unsequenced.push_back(unseq);
- }
if (get_script_instance() && get_script_instance()->has_method("_get_working_memory_size")) {
instance->work_mem_size = get_script_instance()->call("_get_working_memory_size");
@@ -2275,8 +2721,6 @@ void VisualScriptCustomNode::_bind_methods() {
BIND_VMETHOD( MethodInfo(Variant::STRING,"_get_category") );
BIND_VMETHOD( MethodInfo(Variant::INT,"_get_working_memory_size") );
- BIND_VMETHOD( MethodInfo(Variant::INT,"_is_output_port_unsequenced",PropertyInfo(Variant::INT,"idx")) );
- BIND_VMETHOD( MethodInfo(Variant::INT,"_get_output_port_unsequenced",PropertyInfo(Variant::INT,"idx"),PropertyInfo(Variant::ARRAY,"work_mem")) );
BIND_VMETHOD( MethodInfo(Variant::NIL,"_step:Variant",PropertyInfo(Variant::ARRAY,"inputs"),PropertyInfo(Variant::ARRAY,"outputs"),PropertyInfo(Variant::INT,"start_mode"),PropertyInfo(Variant::ARRAY,"working_mem")) );
BIND_CONSTANT( START_MODE_BEGIN_SEQUENCE );
@@ -2388,8 +2832,6 @@ public:
bool valid;
//virtual int get_working_memory_size() const { return 0; }
- //virtual bool is_output_port_unsequenced(int p_idx) const { return false; }
- //virtual bool get_output_port_unsequenced(int p_idx,Variant* r_value,Variant* p_working_mem,String &r_error) const { return false; };
virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
@@ -2432,23 +2874,1016 @@ VisualScriptSubCall::VisualScriptSubCall() {
}
+//////////////////////////////////////////
+////////////////Comment///////////
+//////////////////////////////////////////
+
+int VisualScriptComment::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptComment::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptComment::get_input_value_port_count() const{
+ return 0;
+}
+int VisualScriptComment::get_output_value_port_count() const{
+
+ return 0;
+}
+
+String VisualScriptComment::get_output_sequence_port_text(int p_port) const {
+
+ return String();
+}
+
+PropertyInfo VisualScriptComment::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo();
+}
+
+PropertyInfo VisualScriptComment::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo();
+}
+
+
+String VisualScriptComment::get_caption() const {
+
+ return title;
+}
+
+
+String VisualScriptComment::get_text() const {
+
+ return description;
+}
+
+void VisualScriptComment::set_title(const String& p_title) {
+
+
+ if (title==p_title)
+ return;
+ title=p_title;
+ ports_changed_notify();
+}
+
+String VisualScriptComment::get_title() const{
+
+ return title;
+}
+
+void VisualScriptComment::set_description(const String& p_description){
+
+ if (description==p_description)
+ return;
+ description=p_description;
+ ports_changed_notify();
+
+}
+String VisualScriptComment::get_description() const{
+
+ return description;
+}
+
+void VisualScriptComment::set_size(const Size2& p_size){
+
+ if (size==p_size)
+ return;
+ size=p_size;
+ ports_changed_notify();
+
+}
+Size2 VisualScriptComment::get_size() const{
+
+ return size;
+}
+
+
+String VisualScriptComment::get_category() const {
+
+ return "data";
+}
+
+class VisualScriptNodeInstanceComment : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+
+ //virtual int get_working_memory_size() const { return 0; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptComment::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceComment * instance = memnew(VisualScriptNodeInstanceComment );
+ instance->instance=p_instance;
+ return instance;
+}
+
+
+
+void VisualScriptComment::_bind_methods() {
+
+
+ ObjectTypeDB::bind_method(_MD("set_title","title"),&VisualScriptComment::set_title);
+ ObjectTypeDB::bind_method(_MD("get_title"),&VisualScriptComment::get_title);
+
+ ObjectTypeDB::bind_method(_MD("set_description","description"),&VisualScriptComment::set_description);
+ ObjectTypeDB::bind_method(_MD("get_description"),&VisualScriptComment::get_description);
+
+ ObjectTypeDB::bind_method(_MD("set_size","size"),&VisualScriptComment::set_size);
+ ObjectTypeDB::bind_method(_MD("get_size"),&VisualScriptComment::get_size);
+
+ ADD_PROPERTY( PropertyInfo(Variant::STRING,"title"),_SCS("set_title"),_SCS("get_title"));
+ ADD_PROPERTY( PropertyInfo(Variant::STRING,"description",PROPERTY_HINT_MULTILINE_TEXT),_SCS("set_description"),_SCS("get_description"));
+ ADD_PROPERTY( PropertyInfo(Variant::VECTOR2,"size"),_SCS("set_size"),_SCS("get_size"));
+
+}
+
+VisualScriptComment::VisualScriptComment() {
+
+ title="Comment";
+ size=Size2(150,150);
+}
+
+
+//////////////////////////////////////////
+////////////////Constructor///////////
+//////////////////////////////////////////
+
+int VisualScriptConstructor::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptConstructor::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptConstructor::get_input_value_port_count() const{
+ return constructor.arguments.size();
+}
+int VisualScriptConstructor::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptConstructor::get_output_sequence_port_text(int p_port) const {
+
+ return "";
+}
+
+PropertyInfo VisualScriptConstructor::get_input_value_port_info(int p_idx) const{
+
+ return constructor.arguments[p_idx];
+}
+
+PropertyInfo VisualScriptConstructor::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(type,"value");
+}
+
+
+String VisualScriptConstructor::get_caption() const {
+
+ return "Construct";
+}
+
+
+String VisualScriptConstructor::get_text() const {
+
+ return "new "+Variant::get_type_name(type)+"()";
+}
+
+
+String VisualScriptConstructor::get_category() const {
+
+ return "functions";
+}
+
+void VisualScriptConstructor::set_constructor_type(Variant::Type p_type) {
+
+ if (type==p_type)
+ return;
+
+ type=p_type;
+ ports_changed_notify();
+}
+
+Variant::Type VisualScriptConstructor::get_constructor_type() const {
+
+ return type;
+}
+
+void VisualScriptConstructor::set_constructor(const Dictionary& p_info) {
+
+ constructor=MethodInfo::from_dict(p_info);
+ ports_changed_notify();
+}
+
+Dictionary VisualScriptConstructor::get_constructor() const {
+
+ return constructor;
+}
+
+
+class VisualScriptNodeInstanceConstructor : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+ Variant::Type type;
+ int argcount;
+
+ //virtual int get_working_memory_size() const { return 0; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ Variant::CallError ce;
+ *p_outputs[0]=Variant::construct(type,p_inputs,argcount,ce);
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ r_error_str="Invalid arguments for constructor";
+ }
+
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptConstructor::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceConstructor * instance = memnew(VisualScriptNodeInstanceConstructor );
+ instance->instance=p_instance;
+ instance->type=type;
+ instance->argcount=constructor.arguments.size();
+ return instance;
+}
+
+
+
+void VisualScriptConstructor::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_constructor_type","type"),&VisualScriptConstructor::set_constructor_type);
+ ObjectTypeDB::bind_method(_MD("get_constructor_type"),&VisualScriptConstructor::get_constructor_type);
+
+ ObjectTypeDB::bind_method(_MD("set_constructor","constructor"),&VisualScriptConstructor::set_constructor);
+ ObjectTypeDB::bind_method(_MD("get_constructor"),&VisualScriptConstructor::get_constructor);
+
+ ADD_PROPERTY( PropertyInfo(Variant::INT,"type",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("set_constructor_type"),_SCS("get_constructor_type"));
+ ADD_PROPERTY( PropertyInfo(Variant::DICTIONARY,"constructor",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("set_constructor"),_SCS("get_constructor"));
+
+}
+
+VisualScriptConstructor::VisualScriptConstructor() {
+
+ type=Variant::NIL;
+
+}
+
+static Map<String,Pair<Variant::Type,MethodInfo> > constructor_map;
+
+static Ref<VisualScriptNode> create_constructor_node(const String& p_name) {
+
+ ERR_FAIL_COND_V(!constructor_map.has(p_name),Ref<VisualScriptNode>());
+
+ Ref<VisualScriptConstructor> vsc;
+ vsc.instance();
+ vsc->set_constructor_type(constructor_map[p_name].first);
+ vsc->set_constructor(constructor_map[p_name].second);
+
+ return vsc;
+}
+
+//////////////////////////////////////////
+////////////////LocalVar///////////
+//////////////////////////////////////////
+
+int VisualScriptLocalVar::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptLocalVar::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptLocalVar::get_input_value_port_count() const{
+ return 0;
+}
+int VisualScriptLocalVar::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptLocalVar::get_output_sequence_port_text(int p_port) const {
+
+ return "";
+}
+
+PropertyInfo VisualScriptLocalVar::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo();
+}
+PropertyInfo VisualScriptLocalVar::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(type,"get");
+}
+
+
+String VisualScriptLocalVar::get_caption() const {
+
+ return "LocalVarGet";
+}
+
+
+String VisualScriptLocalVar::get_text() const {
+
+ return name;
+}
+
+
+String VisualScriptLocalVar::get_category() const {
+
+ return "data";
+}
+
+
+void VisualScriptLocalVar::set_var_name(const StringName& p_name) {
+
+ if (name==p_name)
+ return;
+
+ name=p_name;
+ ports_changed_notify();
+
+}
+
+StringName VisualScriptLocalVar::get_var_name() const {
+
+ return name;
+}
+
+void VisualScriptLocalVar::set_var_type(Variant::Type p_type) {
+
+ type=p_type;
+ ports_changed_notify();
+}
+
+Variant::Type VisualScriptLocalVar::get_var_type() const {
+
+ return type;
+}
+
+
+class VisualScriptNodeInstanceLocalVar : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+ StringName name;
+
+
+ virtual int get_working_memory_size() const { return 1; }
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ *p_outputs[0]=*p_working_mem;
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptLocalVar::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceLocalVar * instance = memnew(VisualScriptNodeInstanceLocalVar );
+ instance->instance=p_instance;
+ instance->name=name;
+
+ return instance;
+}
+
+
+
+void VisualScriptLocalVar::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_var_name","name"),&VisualScriptLocalVar::set_var_name);
+ ObjectTypeDB::bind_method(_MD("get_var_name"),&VisualScriptLocalVar::get_var_name);
+
+ ObjectTypeDB::bind_method(_MD("set_var_type","type"),&VisualScriptLocalVar::set_var_type);
+ ObjectTypeDB::bind_method(_MD("get_var_type"),&VisualScriptLocalVar::get_var_type);
+
+ String argt="Any";
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+ argt+=","+Variant::get_type_name(Variant::Type(i));
+ }
+
+ ADD_PROPERTY( PropertyInfo(Variant::STRING,"variable/name"),_SCS("set_var_name"),_SCS("get_var_name"));
+ ADD_PROPERTY( PropertyInfo(Variant::INT,"variable/type",PROPERTY_HINT_ENUM,argt),_SCS("set_var_type"),_SCS("get_var_type"));
+
+
+}
+
+VisualScriptLocalVar::VisualScriptLocalVar() {
+
+ name="new_local";
+ type=Variant::NIL;
+
+}
+
+//////////////////////////////////////////
+////////////////LocalVar///////////
+//////////////////////////////////////////
+
+int VisualScriptLocalVarSet::get_output_sequence_port_count() const {
+
+ return 1;
+}
+
+bool VisualScriptLocalVarSet::has_input_sequence_port() const{
+
+ return true;
+}
+
+int VisualScriptLocalVarSet::get_input_value_port_count() const{
+ return 1;
+}
+int VisualScriptLocalVarSet::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptLocalVarSet::get_output_sequence_port_text(int p_port) const {
+
+ return "";
+}
+
+PropertyInfo VisualScriptLocalVarSet::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo(type,"set");
+}
+PropertyInfo VisualScriptLocalVarSet::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(type,"get");
+}
+
+
+String VisualScriptLocalVarSet::get_caption() const {
+
+ return "LocalVarSet";
+}
+
+
+String VisualScriptLocalVarSet::get_text() const {
+
+ return name;
+}
+
+
+String VisualScriptLocalVarSet::get_category() const {
+
+ return "data";
+}
+
+
+void VisualScriptLocalVarSet::set_var_name(const StringName& p_name) {
+
+ if (name==p_name)
+ return;
+
+ name=p_name;
+ ports_changed_notify();
+
+}
+
+StringName VisualScriptLocalVarSet::get_var_name() const {
+
+ return name;
+}
+
+void VisualScriptLocalVarSet::set_var_type(Variant::Type p_type) {
+
+ type=p_type;
+ ports_changed_notify();
+}
+
+Variant::Type VisualScriptLocalVarSet::get_var_type() const {
+
+ return type;
+}
+
+
+class VisualScriptNodeInstanceLocalVarSet : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+ StringName name;
+
+
+ virtual int get_working_memory_size() const { return 1; }
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ *p_working_mem=*p_inputs[0];
+ *p_outputs[0]=*p_working_mem;
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptLocalVarSet::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceLocalVarSet * instance = memnew(VisualScriptNodeInstanceLocalVarSet );
+ instance->instance=p_instance;
+ instance->name=name;
+
+ return instance;
+}
+
+
+
+void VisualScriptLocalVarSet::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_var_name","name"),&VisualScriptLocalVarSet::set_var_name);
+ ObjectTypeDB::bind_method(_MD("get_var_name"),&VisualScriptLocalVarSet::get_var_name);
+
+ ObjectTypeDB::bind_method(_MD("set_var_type","type"),&VisualScriptLocalVarSet::set_var_type);
+ ObjectTypeDB::bind_method(_MD("get_var_type"),&VisualScriptLocalVarSet::get_var_type);
+
+ String argt="Any";
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+ argt+=","+Variant::get_type_name(Variant::Type(i));
+ }
+
+ ADD_PROPERTY( PropertyInfo(Variant::STRING,"variable/name"),_SCS("set_var_name"),_SCS("get_var_name"));
+ ADD_PROPERTY( PropertyInfo(Variant::INT,"variable/type",PROPERTY_HINT_ENUM,argt),_SCS("set_var_type"),_SCS("get_var_type"));
+
+
+}
+
+VisualScriptLocalVarSet::VisualScriptLocalVarSet() {
+
+ name="new_local";
+ type=Variant::NIL;
+
+}
+
+
+//////////////////////////////////////////
+////////////////LocalVar///////////
+//////////////////////////////////////////
+
+int VisualScriptInputAction::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptInputAction::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptInputAction::get_input_value_port_count() const{
+ return 0;
+}
+int VisualScriptInputAction::get_output_value_port_count() const{
+
+ return 1;
+}
+
+String VisualScriptInputAction::get_output_sequence_port_text(int p_port) const {
+
+ return "";
+}
+
+PropertyInfo VisualScriptInputAction::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo();
+}
+PropertyInfo VisualScriptInputAction::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(Variant::BOOL,"pressed");
+}
+
+
+String VisualScriptInputAction::get_caption() const {
+
+
+ return "Action";
+}
+
+
+String VisualScriptInputAction::get_text() const {
+
+ switch(mode) {
+ case MODE_PRESSED: {
+ return name;
+ } break;
+ case MODE_RELEASED: {
+ return "not "+name;
+ } break;
+ case MODE_JUST_PRESSED: {
+ return String(name)+" "+TTR("just pressed");
+ } break;
+ case MODE_JUST_RELEASED: {
+ return String(name)+" "+TTR("just released");
+ } break;
+ }
+
+ return String();
+}
+
+
+String VisualScriptInputAction::get_category() const {
+
+ return "data";
+}
+
+
+void VisualScriptInputAction::set_action_name(const StringName& p_name) {
+
+ if (name==p_name)
+ return;
+
+ name=p_name;
+ ports_changed_notify();
+
+}
+
+StringName VisualScriptInputAction::get_action_name() const {
+
+ return name;
+}
+
+void VisualScriptInputAction::set_action_mode(Mode p_mode) {
+
+ if (mode==p_mode)
+ return;
+
+ mode=p_mode;
+ ports_changed_notify();
+
+}
+VisualScriptInputAction::Mode VisualScriptInputAction::get_action_mode() const {
+
+ return mode;
+}
+
+
+class VisualScriptNodeInstanceInputAction : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+ StringName action;
+ VisualScriptInputAction::Mode mode;
+
+
+ virtual int get_working_memory_size() const { return 1; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ switch(mode) {
+ case VisualScriptInputAction::MODE_PRESSED: {
+ *p_outputs[0]=Input::get_singleton()->is_action_pressed(action);
+ } break;
+ case VisualScriptInputAction::MODE_RELEASED: {
+ *p_outputs[0]=!Input::get_singleton()->is_action_pressed(action);
+ } break;
+ case VisualScriptInputAction::MODE_JUST_PRESSED: {
+ *p_outputs[0]=Input::get_singleton()->is_action_just_pressed(action);
+ } break;
+ case VisualScriptInputAction:: MODE_JUST_RELEASED: {
+ *p_outputs[0]=Input::get_singleton()->is_action_just_released(action);
+ } break;
+
+ }
+
+
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptInputAction::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceInputAction * instance = memnew(VisualScriptNodeInstanceInputAction );
+ instance->instance=p_instance;
+ instance->action=name;
+ instance->mode=mode;
+
+ return instance;
+}
+
+void VisualScriptInputAction::_validate_property(PropertyInfo& property) const {
+
+
+ if (property.name=="action") {
+
+ property.hint=PROPERTY_HINT_ENUM;
+ String actions;
+
+ List<PropertyInfo> pinfo;
+ Globals::get_singleton()->get_property_list(&pinfo);
+ Vector<String> al;
+
+ for(List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+ const PropertyInfo &pi=E->get();
+
+ if (!pi.name.begins_with("input/"))
+ continue;
+
+ String name = pi.name.substr(pi.name.find("/")+1,pi.name.length());
+
+
+ al.push_back(name);
+ }
+
+ al.sort();;
+
+ for(int i=0;i<al.size();i++) {
+ if (actions!=String())
+ actions+=",";
+ actions+=al[i];
+ }
+
+ property.hint_string=actions;
+ }
+}
+
+
+void VisualScriptInputAction::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_action_name","name"),&VisualScriptInputAction::set_action_name);
+ ObjectTypeDB::bind_method(_MD("get_action_name"),&VisualScriptInputAction::get_action_name);
+
+ ObjectTypeDB::bind_method(_MD("set_action_mode","mode"),&VisualScriptInputAction::set_action_mode);
+ ObjectTypeDB::bind_method(_MD("get_action_mode"),&VisualScriptInputAction::get_action_mode);
+
+ ADD_PROPERTY( PropertyInfo(Variant::STRING,"action"),_SCS("set_action_name"),_SCS("get_action_name"));
+ ADD_PROPERTY( PropertyInfo(Variant::INT,"mode",PROPERTY_HINT_ENUM,"Pressed,Released,JustPressed,JustReleased"),_SCS("set_action_mode"),_SCS("get_action_mode"));
+
+}
+
+VisualScriptInputAction::VisualScriptInputAction() {
+
+ name="";
+ mode=MODE_PRESSED;
+
+}
+
+//////////////////////////////////////////
+////////////////Constructor///////////
+//////////////////////////////////////////
+
+int VisualScriptDeconstruct::get_output_sequence_port_count() const {
+
+ return 0;
+}
+
+bool VisualScriptDeconstruct::has_input_sequence_port() const{
+
+ return false;
+}
+
+int VisualScriptDeconstruct::get_input_value_port_count() const{
+ return 1;
+}
+int VisualScriptDeconstruct::get_output_value_port_count() const{
+
+ return elements.size();
+}
+
+String VisualScriptDeconstruct::get_output_sequence_port_text(int p_port) const {
+
+ return "";
+}
+
+PropertyInfo VisualScriptDeconstruct::get_input_value_port_info(int p_idx) const{
+
+ return PropertyInfo(type,"value");
+}
+
+PropertyInfo VisualScriptDeconstruct::get_output_value_port_info(int p_idx) const{
+
+ return PropertyInfo(elements[p_idx].type,elements[p_idx].name);
+}
+
+
+String VisualScriptDeconstruct::get_caption() const {
+
+ return "Deconstruct";
+}
+
+
+String VisualScriptDeconstruct::get_text() const {
+
+ return "from "+Variant::get_type_name(type)+":";
+}
+
+
+String VisualScriptDeconstruct::get_category() const {
+
+ return "functions";
+}
+
+void VisualScriptDeconstruct::_update_elements() {
+
+ elements.clear();;
+ Variant v;
+ if (type==Variant::INPUT_EVENT) {
+ InputEvent ie;
+ ie.type=input_type;
+ v=ie;
+ } else {
+ Variant::CallError ce;
+ v = Variant::construct(type,NULL,0,ce);
+ }
+
+ List<PropertyInfo> pinfo;
+ v.get_property_list(&pinfo);
+
+ for (List<PropertyInfo>::Element *E=pinfo.front();E;E=E->next()) {
+
+ Element e;
+ e.name=E->get().name;
+ e.type=E->get().type;
+ elements.push_back(e);
+ }
+}
+
+void VisualScriptDeconstruct::set_deconstruct_type(Variant::Type p_type) {
+
+ if (type==p_type)
+ return;
+
+ type=p_type;
+ _update_elements();
+ ports_changed_notify();
+ _change_notify(); //to make input appear/disappear
+}
+
+Variant::Type VisualScriptDeconstruct::get_deconstruct_type() const {
+
+ return type;
+}
+
+void VisualScriptDeconstruct::set_deconstruct_input_type(InputEvent::Type p_input_type) {
+
+ if (input_type==p_input_type)
+ return;
+
+ input_type=p_input_type;
+ _update_elements();
+ ports_changed_notify();
+}
+
+InputEvent::Type VisualScriptDeconstruct::get_deconstruct_input_type() const {
+
+ return input_type;
+}
+
+void VisualScriptDeconstruct::_set_elem_cache(const Array& p_elements) {
+
+ ERR_FAIL_COND(p_elements.size()%2==1);
+ elements.resize(p_elements.size()/2);
+ for(int i=0;i<elements.size();i++) {
+ elements[i].name=p_elements[i*2+0];
+ elements[i].type=Variant::Type(int(p_elements[i*2+1]));
+ }
+}
+
+Array VisualScriptDeconstruct::_get_elem_cache() const {
+
+ Array ret;
+ for(int i=0;i<elements.size();i++) {
+ ret.push_back(elements[i].name);
+ ret.push_back(elements[i].type);
+ }
+ return ret;
+}
+
+class VisualScriptNodeInstanceDeconstruct : public VisualScriptNodeInstance {
+public:
+
+ VisualScriptInstance* instance;
+ Vector<StringName> outputs;
+
+ //virtual int get_working_memory_size() const { return 0; }
+
+ virtual int step(const Variant** p_inputs,Variant** p_outputs,StartMode p_start_mode,Variant* p_working_mem,Variant::CallError& r_error,String& r_error_str) {
+
+ Variant in=*p_inputs[0];
+
+ for(int i=0;i<outputs.size();i++) {
+ bool valid;
+ *p_outputs[i]=in.get(outputs[i],&valid);
+ if (!valid) {
+ r_error_str="Can't obtain element '"+String(outputs[i])+"' from "+Variant::get_type_name(in.get_type());
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_METHOD;
+ return 0;
+ }
+
+ }
+
+ return 0;
+ }
+
+
+};
+
+VisualScriptNodeInstance* VisualScriptDeconstruct::instance(VisualScriptInstance* p_instance) {
+
+ VisualScriptNodeInstanceDeconstruct * instance = memnew(VisualScriptNodeInstanceDeconstruct );
+ instance->instance=p_instance;
+ instance->outputs.resize(elements.size());
+ for(int i=0;i<elements.size();i++) {
+ instance->outputs[i]=elements[i].name;
+ }
+
+ return instance;
+}
+
+
+
+void VisualScriptDeconstruct::_validate_property(PropertyInfo& property) const {
+
+ if (property.name=="input_type") {
+ if (type!=Variant::INPUT_EVENT) {
+ property.usage=0;
+ }
+ }
+}
+
+
+void VisualScriptDeconstruct::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("set_deconstruct_type","type"),&VisualScriptDeconstruct::set_deconstruct_type);
+ ObjectTypeDB::bind_method(_MD("get_deconstruct_type"),&VisualScriptDeconstruct::get_deconstruct_type);
+
+ ObjectTypeDB::bind_method(_MD("set_deconstruct_input_type","input_type"),&VisualScriptDeconstruct::set_deconstruct_input_type);
+ ObjectTypeDB::bind_method(_MD("get_deconstruct_input_type"),&VisualScriptDeconstruct::get_deconstruct_input_type);
+
+ ObjectTypeDB::bind_method(_MD("_set_elem_cache","_cache"),&VisualScriptDeconstruct::_set_elem_cache);
+ ObjectTypeDB::bind_method(_MD("_get_elem_cache"),&VisualScriptDeconstruct::_get_elem_cache);
+
+ String argt="Any";
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+ argt+=","+Variant::get_type_name(Variant::Type(i));
+ }
+
+ String iet="None,Key,MouseMotion,MouseButton,JoystickMotion,JoystickButton,ScreenTouch,ScreenDrag,Action";
+
+ ADD_PROPERTY( PropertyInfo(Variant::INT,"type",PROPERTY_HINT_ENUM,argt),_SCS("set_deconstruct_type"),_SCS("get_deconstruct_type"));
+ ADD_PROPERTY( PropertyInfo(Variant::INT,"input_type",PROPERTY_HINT_ENUM,iet),_SCS("set_deconstruct_input_type"),_SCS("get_deconstruct_input_type"));
+ ADD_PROPERTY( PropertyInfo(Variant::ARRAY,"elem_cache",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR),_SCS("_set_elem_cache"),_SCS("_get_elem_cache"));
+
+}
+
+VisualScriptDeconstruct::VisualScriptDeconstruct() {
+
+ type=Variant::NIL;
+ input_type=InputEvent::NONE;
+
+}
+
void register_visual_script_nodes() {
- VisualScriptLanguage::singleton->add_register_func("data/set_variable",create_node_generic<VisualScriptVariableGet>);
- VisualScriptLanguage::singleton->add_register_func("data/get_variable",create_node_generic<VisualScriptVariableSet>);
- VisualScriptLanguage::singleton->add_register_func("data/constant",create_node_generic<VisualScriptConstant>);
- VisualScriptLanguage::singleton->add_register_func("data/global_constant",create_node_generic<VisualScriptGlobalConstant>);
- VisualScriptLanguage::singleton->add_register_func("data/math_constant",create_node_generic<VisualScriptMathConstant>);
+ VisualScriptLanguage::singleton->add_register_func("data/set_variable",create_node_generic<VisualScriptVariableSet>);
+ VisualScriptLanguage::singleton->add_register_func("data/get_variable",create_node_generic<VisualScriptVariableGet>);
VisualScriptLanguage::singleton->add_register_func("data/engine_singleton",create_node_generic<VisualScriptEngineSingleton>);
VisualScriptLanguage::singleton->add_register_func("data/scene_node",create_node_generic<VisualScriptSceneNode>);
VisualScriptLanguage::singleton->add_register_func("data/scene_tree",create_node_generic<VisualScriptSceneTree>);
VisualScriptLanguage::singleton->add_register_func("data/resource_path",create_node_generic<VisualScriptResourcePath>);
VisualScriptLanguage::singleton->add_register_func("data/self",create_node_generic<VisualScriptSelf>);
+ VisualScriptLanguage::singleton->add_register_func("data/comment",create_node_generic<VisualScriptComment>);
+ VisualScriptLanguage::singleton->add_register_func("data/get_local_variable",create_node_generic<VisualScriptLocalVar>);
+ VisualScriptLanguage::singleton->add_register_func("data/set_local_variable",create_node_generic<VisualScriptLocalVarSet>);
+ VisualScriptLanguage::singleton->add_register_func("data/preload",create_node_generic<VisualScriptPreload>);
+ VisualScriptLanguage::singleton->add_register_func("data/action",create_node_generic<VisualScriptInputAction>);
+
+ VisualScriptLanguage::singleton->add_register_func("constants/constant",create_node_generic<VisualScriptConstant>);
+ VisualScriptLanguage::singleton->add_register_func("constants/math_constant",create_node_generic<VisualScriptMathConstant>);
+ VisualScriptLanguage::singleton->add_register_func("constants/class_constant",create_node_generic<VisualScriptClassConstant>);
+ VisualScriptLanguage::singleton->add_register_func("constants/global_constant",create_node_generic<VisualScriptGlobalConstant>);
+ VisualScriptLanguage::singleton->add_register_func("constants/basic_type_constant",create_node_generic<VisualScriptBasicTypeConstant>);
+
VisualScriptLanguage::singleton->add_register_func("custom/custom_node",create_node_generic<VisualScriptCustomNode>);
VisualScriptLanguage::singleton->add_register_func("custom/sub_call",create_node_generic<VisualScriptSubCall>);
-
VisualScriptLanguage::singleton->add_register_func("index/get_index",create_node_generic<VisualScriptIndexGet>);
VisualScriptLanguage::singleton->add_register_func("index/set_index",create_node_generic<VisualScriptIndexSet>);
@@ -2481,5 +3916,43 @@ void register_visual_script_nodes() {
VisualScriptLanguage::singleton->add_register_func("operators/logic/not",create_op_node<Variant::OP_NOT>);
VisualScriptLanguage::singleton->add_register_func("operators/logic/in",create_op_node<Variant::OP_IN>);
+ VisualScriptLanguage::singleton->add_register_func("functions/deconstruct",create_node_generic<VisualScriptDeconstruct>);
+ for(int i=1;i<Variant::VARIANT_MAX;i++) {
+
+ List<MethodInfo> constructors;
+ Variant::get_constructor_list(Variant::Type(i),&constructors);
+
+ for(List<MethodInfo>::Element *E=constructors.front();E;E=E->next()) {
+
+ if (E->get().arguments.size()>0) {
+
+
+ String name = "functions/constructors/"+Variant::get_type_name(Variant::Type(i))+" ( ";
+ for(int j=0;j<E->get().arguments.size();j++) {
+ if (j>0)
+ name+=", ";
+ if (E->get().arguments.size()==1)
+ name+=Variant::get_type_name(E->get().arguments[j].type);
+ else
+ name+=E->get().arguments[j].name;
+ }
+ name+=") ";
+
+ VisualScriptLanguage::singleton->add_register_func(name,create_constructor_node);
+ Pair<Variant::Type,MethodInfo> pair;
+ pair.first=Variant::Type(i);
+ pair.second=E->get();
+ constructor_map[name]=pair;
+ }
+ }
+ }
+}
+
+
+
+void unregister_visual_script_nodes() {
+
+ constructor_map.clear();
}
+
diff --git a/modules/visual_script/visual_script_nodes.h b/modules/visual_script/visual_script_nodes.h
index 50f61ecfcc..94eeadca57 100644
--- a/modules/visual_script/visual_script_nodes.h
+++ b/modules/visual_script/visual_script_nodes.h
@@ -17,6 +17,7 @@ class VisualScriptFunction : public VisualScriptNode {
bool stack_less;
int stack_size;
+ ScriptInstance::RPCMode rpc_mode;
protected:
@@ -60,6 +61,9 @@ public:
void set_stack_size(int p_size);
int get_stack_size() const;
+ void set_rpc_mode(ScriptInstance::RPCMode p_mode);
+ ScriptInstance::RPCMode get_rpc_mode() const;
+
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
VisualScriptFunction();
@@ -71,6 +75,7 @@ class VisualScriptOperator : public VisualScriptNode {
OBJ_TYPE(VisualScriptOperator,VisualScriptNode)
+ Variant::Type typed;
Variant::Operator op;
protected:
@@ -98,6 +103,9 @@ public:
void set_operator(Variant::Operator p_op);
Variant::Operator get_operator() const;
+ void set_typed(Variant::Type p_op);
+ Variant::Type get_typed() const;
+
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
VisualScriptOperator();
@@ -211,7 +219,7 @@ public:
virtual String get_caption() const;
virtual String get_text() const;
- virtual String get_category() const { return "data"; }
+ virtual String get_category() const { return "constants"; }
void set_constant_type(Variant::Type p_type);
Variant::Type get_constant_type() const;
@@ -225,6 +233,45 @@ public:
};
+
+class VisualScriptPreload : public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptPreload,VisualScriptNode)
+
+
+ Ref<Resource> preload;
+protected:
+
+ static void _bind_methods();
+
+public:
+
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const { return "data"; }
+
+ void set_preload(const Ref<Resource>& p_value);
+ Ref<Resource> get_preload() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptPreload();
+};
+
class VisualScriptIndexGet : public VisualScriptNode {
OBJ_TYPE(VisualScriptIndexGet,VisualScriptNode)
@@ -313,7 +360,7 @@ public:
virtual String get_caption() const;
virtual String get_text() const;
- virtual String get_category() const { return "data"; }
+ virtual String get_category() const { return "constants"; }
void set_global_constant(int p_which);
int get_global_constant();
@@ -324,6 +371,89 @@ public:
};
+class VisualScriptClassConstant : public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptClassConstant,VisualScriptNode)
+
+ StringName base_type;
+ StringName name;
+protected:
+ static void _bind_methods();
+ virtual void _validate_property(PropertyInfo& property) const;
+
+public:
+
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const { return "constants"; }
+
+ void set_class_constant(const StringName& p_which);
+ StringName get_class_constant();
+
+ void set_base_type(const StringName& p_which);
+ StringName get_base_type();
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptClassConstant();
+};
+
+class VisualScriptBasicTypeConstant : public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptBasicTypeConstant,VisualScriptNode)
+
+ Variant::Type type;
+ StringName name;
+protected:
+ static void _bind_methods();
+ virtual void _validate_property(PropertyInfo& property) const;
+
+public:
+
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const { return "constants"; }
+
+ void set_basic_type_constant(const StringName& p_which);
+ StringName get_basic_type_constant() const;
+
+ void set_basic_type(Variant::Type p_which);
+ Variant::Type get_basic_type() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptBasicTypeConstant();
+};
+
+
class VisualScriptMathConstant : public VisualScriptNode {
@@ -364,7 +494,7 @@ public:
virtual String get_caption() const;
virtual String get_text() const;
- virtual String get_category() const { return "data"; }
+ virtual String get_category() const { return "constants"; }
void set_math_constant(MathConstant p_which);
MathConstant get_math_constant();
@@ -408,6 +538,9 @@ public:
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+ virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
+
+
VisualScriptEngineSingleton();
};
@@ -447,6 +580,8 @@ public:
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+ virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
+
VisualScriptSceneNode();
};
@@ -483,6 +618,8 @@ public:
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+ virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
+
VisualScriptSceneTree();
};
@@ -556,6 +693,8 @@ public:
virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+ virtual TypeGuess guess_output_type(TypeGuess* p_inputs, int p_output) const;
+
VisualScriptSelf();
};
@@ -618,7 +757,6 @@ class VisualScriptSubCall: public VisualScriptNode {
protected:
- virtual bool _use_builtin_script() const { return true; }
static void _bind_methods();
public:
@@ -645,7 +783,286 @@ public:
VisualScriptSubCall();
};
+class VisualScriptComment: public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptComment,VisualScriptNode)
+
+
+ String title;
+ String description;
+ Size2 size;
+protected:
+
+ static void _bind_methods();
+public:
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const;
+
+ void set_title(const String& p_title);
+ String get_title() const;
+
+ void set_description(const String& p_description);
+ String get_description() const;
+
+ void set_size(const Size2& p_size);
+ Size2 get_size() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptComment();
+};
+
+class VisualScriptConstructor: public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptConstructor,VisualScriptNode)
+
+
+ Variant::Type type;
+ MethodInfo constructor;
+
+protected:
+
+
+ static void _bind_methods();
+public:
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const;
+
+ void set_constructor_type(Variant::Type p_type);
+ Variant::Type get_constructor_type() const;
+
+ void set_constructor(const Dictionary& p_info);
+ Dictionary get_constructor() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptConstructor();
+};
+
+
+
+
+class VisualScriptLocalVar: public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptLocalVar,VisualScriptNode)
+
+ StringName name;
+ Variant::Type type;
+
+protected:
+
+ static void _bind_methods();
+public:
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const;
+
+ void set_var_name(const StringName& p_name);
+ StringName get_var_name() const;
+
+ void set_var_type(Variant::Type p_type);
+ Variant::Type get_var_type() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptLocalVar();
+};
+
+class VisualScriptLocalVarSet: public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptLocalVarSet,VisualScriptNode)
+
+ StringName name;
+ Variant::Type type;
+
+protected:
+
+ static void _bind_methods();
+public:
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const;
+
+ void set_var_name(const StringName& p_name);
+ StringName get_var_name() const;
+
+ void set_var_type(Variant::Type p_type);
+ Variant::Type get_var_type() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptLocalVarSet();
+};
+
+
+
+class VisualScriptInputAction: public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptInputAction,VisualScriptNode)
+public:
+ enum Mode {
+ MODE_PRESSED,
+ MODE_RELEASED,
+ MODE_JUST_PRESSED,
+ MODE_JUST_RELEASED,
+ };
+
+ StringName name;
+ Mode mode;
+
+protected:
+
+ virtual void _validate_property(PropertyInfo& property) const;
+
+ static void _bind_methods();
+public:
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const;
+
+ void set_action_name(const StringName& p_name);
+ StringName get_action_name() const;
+
+ void set_action_mode(Mode p_mode);
+ Mode get_action_mode() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptInputAction();
+};
+
+VARIANT_ENUM_CAST( VisualScriptInputAction::Mode )
+
+class VisualScriptDeconstruct: public VisualScriptNode {
+
+ OBJ_TYPE(VisualScriptDeconstruct,VisualScriptNode)
+
+
+ struct Element {
+ StringName name;
+ Variant::Type type;
+ };
+
+
+ Vector<Element> elements;
+
+ void _update_elements();
+ Variant::Type type;
+ InputEvent::Type input_type;
+
+ void _set_elem_cache(const Array& p_elements);
+ Array _get_elem_cache() const;
+
+ virtual void _validate_property(PropertyInfo& property) const;
+
+protected:
+
+
+ static void _bind_methods();
+public:
+ virtual int get_output_sequence_port_count() const;
+ virtual bool has_input_sequence_port() const;
+
+
+ virtual String get_output_sequence_port_text(int p_port) const;
+
+
+ virtual int get_input_value_port_count() const;
+ virtual int get_output_value_port_count() const;
+
+
+ virtual PropertyInfo get_input_value_port_info(int p_idx) const;
+ virtual PropertyInfo get_output_value_port_info(int p_idx) const;
+
+ virtual String get_caption() const;
+ virtual String get_text() const;
+ virtual String get_category() const;
+
+ void set_deconstruct_type(Variant::Type p_type);
+ Variant::Type get_deconstruct_type() const;
+
+ void set_deconstruct_input_type(InputEvent::Type p_input_type);
+ InputEvent::Type get_deconstruct_input_type() const;
+
+ virtual VisualScriptNodeInstance* instance(VisualScriptInstance* p_instance);
+
+ VisualScriptDeconstruct();
+};
+
void register_visual_script_nodes();
+void unregister_visual_script_nodes();
#endif // VISUAL_SCRIPT_NODES_H
diff --git a/modules/visual_script/visual_script_yield_nodes.cpp b/modules/visual_script/visual_script_yield_nodes.cpp
index a6f84a97d9..221c46b6fd 100644
--- a/modules/visual_script/visual_script_yield_nodes.cpp
+++ b/modules/visual_script/visual_script_yield_nodes.cpp
@@ -45,12 +45,13 @@ PropertyInfo VisualScriptYield::get_output_value_port_info(int p_idx) const{
String VisualScriptYield::get_caption() const {
- return "Wait";
+ return yield_mode==YIELD_RETURN?"Yield":"Wait";
}
String VisualScriptYield::get_text() const {
switch (yield_mode) {
+ case YIELD_RETURN: return ""; break;
case YIELD_FRAME: return "Next Frame"; break;
case YIELD_FIXED_FRAME: return "Next Fixed Frame"; break;
case YIELD_WAIT: return rtos(wait_time)+" sec(s)"; break;
@@ -88,8 +89,10 @@ public:
Ref<VisualScriptFunctionState> state;
state.instance();
+ int ret = STEP_YIELD_BIT;
switch(mode) {
+ case VisualScriptYield::YIELD_RETURN: ret=STEP_EXIT_FUNCTION_BIT; break; //return the yield
case VisualScriptYield::YIELD_FRAME: state->connect_to_signal(tree,"idle_frame",Array()); break;
case VisualScriptYield::YIELD_FIXED_FRAME: state->connect_to_signal(tree,"fixed_frame",Array()); break;
case VisualScriptYield::YIELD_WAIT: state->connect_to_signal(tree->create_timer(wait_time).ptr(),"timeout",Array()); break;
@@ -98,7 +101,7 @@ public:
*p_working_mem=state;
- return STEP_YIELD_BIT;
+ return ret;
}
}
@@ -487,7 +490,7 @@ void VisualScriptYieldSignal::_bind_methods() {
bt+=Variant::get_type_name(Variant::Type(i));
}
- ADD_PROPERTY(PropertyInfo(Variant::INT,"signal/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance",PROPERTY_USAGE_NOEDITOR),_SCS("set_call_mode"),_SCS("get_call_mode"));
+ ADD_PROPERTY(PropertyInfo(Variant::INT,"signal/call_mode",PROPERTY_HINT_ENUM,"Self,Node Path,Instance"),_SCS("set_call_mode"),_SCS("get_call_mode"));
ADD_PROPERTY(PropertyInfo(Variant::STRING,"signal/base_type",PROPERTY_HINT_TYPE_STRING,"Object"),_SCS("set_base_type"),_SCS("get_base_type"));
ADD_PROPERTY(PropertyInfo(Variant::NODE_PATH,"signal/node_path",PROPERTY_HINT_NODE_PATH_TO_EDITED_NODE),_SCS("set_base_path"),_SCS("get_base_path"));
ADD_PROPERTY(PropertyInfo(Variant::STRING,"signal/signal"),_SCS("set_signal"),_SCS("get_signal"));
@@ -595,7 +598,7 @@ VisualScriptNodeInstance* VisualScriptYieldSignal::instance(VisualScriptInstance
}
VisualScriptYieldSignal::VisualScriptYieldSignal() {
- call_mode=CALL_MODE_INSTANCE;
+ call_mode=CALL_MODE_SELF;
base_type="Object";
}
@@ -615,8 +618,8 @@ void register_visual_script_yield_nodes() {
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_fixed_frame",create_yield_node<VisualScriptYield::YIELD_FIXED_FRAME>);
VisualScriptLanguage::singleton->add_register_func("functions/wait/wait_time",create_yield_node<VisualScriptYield::YIELD_WAIT>);
- VisualScriptLanguage::singleton->add_register_func("functions/yield/instance_signal",create_yield_signal_node<VisualScriptYieldSignal::CALL_MODE_INSTANCE>);
- VisualScriptLanguage::singleton->add_register_func("functions/yield/self_signal",create_yield_signal_node<VisualScriptYieldSignal::CALL_MODE_SELF>);
- VisualScriptLanguage::singleton->add_register_func("functions/yield/node_signal",create_yield_signal_node<VisualScriptYieldSignal::CALL_MODE_NODE_PATH>);
+
+ VisualScriptLanguage::singleton->add_register_func("functions/yield",create_yield_node<VisualScriptYield::YIELD_RETURN>);
+ VisualScriptLanguage::singleton->add_register_func("functions/yield_signal",create_node_generic<VisualScriptYieldSignal>);
}
diff --git a/modules/visual_script/visual_script_yield_nodes.h b/modules/visual_script/visual_script_yield_nodes.h
index a7e200305d..ae7f8c15c1 100644
--- a/modules/visual_script/visual_script_yield_nodes.h
+++ b/modules/visual_script/visual_script_yield_nodes.h
@@ -9,6 +9,7 @@ class VisualScriptYield : public VisualScriptNode {
public:
enum YieldMode {
+ YIELD_RETURN,
YIELD_FRAME,
YIELD_FIXED_FRAME,
YIELD_WAIT
diff --git a/platform/android/build.gradle.template b/platform/android/build.gradle.template
index 24951b921b..873eef0566 100644
--- a/platform/android/build.gradle.template
+++ b/platform/android/build.gradle.template
@@ -67,7 +67,6 @@ android {
$$GRADLE_ASSET_DIRS$$
]
jniLibs.srcDirs = [
- 'libs'
$$GRADLE_JNI_DIRS$$
]
}
diff --git a/platform/javascript/SCsub b/platform/javascript/SCsub
index cd96cf4f31..fc70d45a04 100644
--- a/platform/javascript/SCsub
+++ b/platform/javascript/SCsub
@@ -4,7 +4,8 @@ javascript_files = [
"os_javascript.cpp",
"audio_driver_javascript.cpp",
"javascript_main.cpp",
- "audio_server_javascript.cpp"
+ "audio_server_javascript.cpp",
+ "javascript_eval.cpp"
]
#obj = env.SharedObject('godot_javascript.cpp')
diff --git a/platform/javascript/detect.py b/platform/javascript/detect.py
index d76a20bea7..aeff5a1a34 100644
--- a/platform/javascript/detect.py
+++ b/platform/javascript/detect.py
@@ -18,7 +18,8 @@ def can_build():
def get_opts():
return [
- ['compress','Compress JS Executable','no']
+ ['compress','Compress JS Executable','no'],
+ ['javascript_eval','Enable JavaScript eval interface','yes']
]
def get_flags():
@@ -89,6 +90,10 @@ def configure(env):
env.Append(CPPFLAGS=['-s','ASM_JS=1'])
env.Append(CPPFLAGS=['-s','FULL_ES2=1'])
# env.Append(CPPFLAGS=['-DANDROID_ENABLED', '-DUNIX_ENABLED','-DMPC_FIXED_POINT'])
+
+ if env['javascript_eval'] == 'yes':
+ env.Append(CPPFLAGS=['-DJAVASCRIPT_EVAL_ENABLED'])
+
if (env["compress"]=="yes"):
lzma_binpath = em_path+"/third_party/lzma.js/lzma-native"
lzma_decoder = em_path+"/third_party/lzma.js/lzma-decoder.js"
diff --git a/platform/javascript/javascript_eval.cpp b/platform/javascript/javascript_eval.cpp
new file mode 100644
index 0000000000..e642300bda
--- /dev/null
+++ b/platform/javascript/javascript_eval.cpp
@@ -0,0 +1,169 @@
+/*************************************************************************/
+/* javascript_eval.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+#ifdef JAVASCRIPT_EVAL_ENABLED
+
+#include "javascript_eval.h"
+#include "emscripten.h"
+
+JavaScript *JavaScript::singleton=NULL;
+
+JavaScript *JavaScript::get_singleton() {
+
+ return singleton;
+}
+
+Variant JavaScript::eval(const String& p_code, bool p_use_global_exec_context) {
+
+ union { int i; double d; char* s; } js_data[4];
+ Variant::Type return_type = static_cast<Variant::Type>(EM_ASM_INT({
+
+ var eval_ret;
+ try {
+ if ($3) { // p_use_global_exec_context
+ // indirect eval call grants global execution context
+ var global_eval = eval;
+ eval_ret = global_eval(UTF8ToString($2));
+ }
+ else {
+ eval_ret = eval(UTF8ToString($2));
+ }
+ } catch (e) {
+ Module.printErr(e);
+ eval_ret = null;
+ }
+
+ switch (typeof eval_ret) {
+
+ case 'boolean':
+ // bitwise op yields 32-bit int
+ setValue($0, eval_ret|0, 'i32');
+ return 1; // BOOL
+
+ case 'number':
+ if ((eval_ret|0)===eval_ret) {
+ setValue($0, eval_ret|0, 'i32');
+ return 2; // INT
+ }
+ setValue($0, eval_ret, 'double');
+ return 3; // REAL
+
+ case 'string':
+ var array_len = lengthBytesUTF8(eval_ret)+1;
+ var array_ptr = _malloc(array_len);
+ try {
+ if (array_ptr===0) {
+ throw new Error('String allocation failed (probably out of memory)');
+ }
+ setValue($0, array_ptr|0 , '*');
+ stringToUTF8(eval_ret, array_ptr, array_len);
+ return 4; // STRING
+ } catch (e) {
+ if (array_ptr!==0) {
+ _free(array_ptr)
+ }
+ Module.printErr(e);
+ // fall through
+ }
+ break;
+
+ case 'object':
+ if (eval_ret === null) {
+ break;
+ }
+
+ else if (typeof eval_ret.x==='number' && typeof eval_ret.y==='number') {
+ setValue($0, eval_ret.x, 'double');
+ setValue($0+$1, eval_ret.y, 'double');
+ if (typeof eval_ret.z==='number') {
+ setValue($0+$1*2, eval_ret.z, 'double');
+ return 7; // VECTOR3
+ }
+ else if (typeof eval_ret.width==='number' && typeof eval_ret.height==='number') {
+ setValue($0+$1*2, eval_ret.width, 'double');
+ setValue($0+$1*3, eval_ret.height, 'double');
+ return 6; // RECT2
+ }
+ return 5; // VECTOR2
+ }
+
+ else if (typeof eval_ret.r==='number' && typeof eval_ret.g==='number' && typeof eval_ret.b==='number') {
+ // assume 8-bit rgb components since we're on the web
+ setValue($0, eval_ret.r, 'double');
+ setValue($0+$1, eval_ret.g, 'double');
+ setValue($0+$1*2, eval_ret.b, 'double');
+ setValue($0+$1*3, typeof eval_ret.a==='number' ? eval_ret.a : 1, 'double');
+ return 14; // COLOR
+ }
+ break;
+ }
+ return 0; // NIL
+
+ }, js_data, sizeof *js_data, p_code.utf8().get_data(), p_use_global_exec_context));
+
+ switch(return_type) {
+ case Variant::BOOL:
+ return !!js_data->i;
+ case Variant::INT:
+ return js_data->i;
+ case Variant::REAL:
+ return js_data->d;
+ case Variant::STRING:
+ {
+ String str = String::utf8(js_data->s);
+ EM_ASM_({ _free($0); }, js_data->s);
+ return str;
+ }
+ case Variant::VECTOR2:
+ return Vector2(js_data[0].d, js_data[1].d);
+ case Variant::VECTOR3:
+ return Vector3(js_data[0].d, js_data[1].d, js_data[2].d);
+ case Variant::RECT2:
+ return Rect2(js_data[0].d, js_data[1].d, js_data[2].d, js_data[3].d);
+ case Variant::COLOR:
+ return Color(js_data[0].d/255., js_data[1].d/255., js_data[2].d/255., js_data[3].d);
+ }
+ return Variant();
+}
+
+void JavaScript::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("eval", "code", "use_global_execution_context"), &JavaScript::eval, false);
+}
+
+JavaScript::JavaScript() {
+
+ ERR_FAIL_COND(singleton != NULL);
+ singleton = this;
+}
+
+JavaScript::~JavaScript() {
+
+}
+
+#endif // JAVASCRIPT_EVAL_ENABLED
diff --git a/tools/ios_xcode_template/godot_ios/main.m b/platform/javascript/javascript_eval.h
index 3e4ea5e129..e5f6268076 100644
--- a/tools/ios_xcode_template/godot_ios/main.m
+++ b/platform/javascript/javascript_eval.h
@@ -1,5 +1,5 @@
/*************************************************************************/
-/* main.m */
+/* javascript_eval.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
@@ -26,14 +26,30 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
+#ifdef JAVASCRIPT_EVAL_ENABLED
-#import <UIKit/UIKit.h>
+#ifndef JAVASCRIPT_EVAL_H
+#define JAVASCRIPT_EVAL_H
-#import "AppDelegate.h"
+#include "object.h"
-int main(int argc, char * argv[])
-{
- @autoreleasepool {
- return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
- }
-}
+class JavaScript : public Object {
+private:
+ OBJ_TYPE( JavaScript, Object );
+
+ static JavaScript *singleton;
+
+
+protected:
+ static void _bind_methods();
+
+public:
+ Variant eval(const String& p_code, bool p_use_global_exec_context = false);
+
+ static JavaScript *get_singleton();
+ JavaScript();
+ ~JavaScript();
+};
+
+#endif // JAVASCRIPT_EVAL_H
+#endif // JAVASCRIPT_EVAL_ENABLED
diff --git a/platform/javascript/os_javascript.cpp b/platform/javascript/os_javascript.cpp
index 1defcb7cb2..e802a7e9cb 100644
--- a/platform/javascript/os_javascript.cpp
+++ b/platform/javascript/os_javascript.cpp
@@ -230,6 +230,11 @@ void OS_JavaScript::initialize(const VideoMode& p_desired,int p_video_driver,int
if (result!=EMSCRIPTEN_RESULT_SUCCESS) {
ERR_PRINTS( "Error while setting Emscripten gamepaddisconnected callback: Code " + itos(result) );
}
+
+#ifdef JAVASCRIPT_EVAL_ENABLED
+ javascript_eval = memnew(JavaScript);
+ Globals::get_singleton()->add_singleton(Globals::Singleton("JavaScript", javascript_eval));
+#endif
}
void OS_JavaScript::set_main_loop( MainLoop * p_main_loop ) {
diff --git a/platform/javascript/os_javascript.h b/platform/javascript/os_javascript.h
index 16e4781d15..5b7904805b 100644
--- a/platform/javascript/os_javascript.h
+++ b/platform/javascript/os_javascript.h
@@ -42,6 +42,7 @@
#include "audio_driver_javascript.h"
#include "main/input_default.h"
#include "emscripten/html5.h"
+#include "javascript_eval.h"
typedef void (*GFXInitFunc)(void *ud,bool gl2,int w, int h, bool fs);
typedef int (*OpenURIFunc)(const String&);
@@ -88,6 +89,10 @@ private:
GetDataDirFunc get_data_dir_func;
GetLocaleFunc get_locale_func;
+#ifdef JAVASCRIPT_EVAL_ENABLED
+ JavaScript* javascript_eval;
+#endif
+
static void _close_notification_funcs(const String& p_file,int p_flags);
void process_joysticks();
diff --git a/platform/osx/SCsub b/platform/osx/SCsub
index 3785eb3fb3..4169795519 100644
--- a/platform/osx/SCsub
+++ b/platform/osx/SCsub
@@ -7,6 +7,7 @@ files = [
'sem_osx.cpp',
# 'context_gl_osx.cpp',
'dir_access_osx.mm',
+ 'joystick_osx.cpp',
]
env.Program('#bin/godot',files)
diff --git a/platform/osx/detect.py b/platform/osx/detect.py
index 1982beb10e..01ea09fa21 100644
--- a/platform/osx/detect.py
+++ b/platform/osx/detect.py
@@ -92,7 +92,7 @@ def configure(env):
env.Append(LIBS=['pthread'])
#env.Append(CPPFLAGS=['-F/Developer/SDKs/MacOSX10.4u.sdk/System/Library/Frameworks', '-isysroot', '/Developer/SDKs/MacOSX10.4u.sdk', '-mmacosx-version-min=10.4'])
#env.Append(LINKFLAGS=['-mmacosx-version-min=10.4', '-isysroot', '/Developer/SDKs/MacOSX10.4u.sdk', '-Wl,-syslibroot,/Developer/SDKs/MacOSX10.4u.sdk'])
- env.Append(LINKFLAGS=['-framework', 'Cocoa', '-framework', 'Carbon', '-framework', 'OpenGL', '-framework', 'AGL', '-framework', 'AudioUnit','-lz'])
+ env.Append(LINKFLAGS=['-framework', 'Cocoa', '-framework', 'Carbon', '-framework', 'OpenGL', '-framework', 'AGL', '-framework', 'AudioUnit','-lz', '-framework', 'IOKit', '-framework', 'ForceFeedback'])
if (env["CXX"]=="clang++"):
env.Append(CPPFLAGS=['-DTYPED_METHOD_BIND'])
diff --git a/platform/osx/joystick_osx.cpp b/platform/osx/joystick_osx.cpp
new file mode 100644
index 0000000000..ffb6ac326b
--- /dev/null
+++ b/platform/osx/joystick_osx.cpp
@@ -0,0 +1,623 @@
+/*************************************************************************/
+/* joystick_osx.cpp */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+#include "joystick_osx.h"
+#include <machine/endian.h>
+
+#define GODOT_JOY_LOOP_RUN_MODE CFSTR("GodotJoystick")
+
+static JoystickOSX* self = NULL;
+
+joystick::joystick() {
+ device_ref = NULL;
+ ff_device = NULL;
+ ff_axes = NULL;
+ ff_directions = NULL;
+ ffservice = 0;
+ ff_timestamp = 0;
+ id = 0;
+
+ ff_constant_force.lMagnitude = 10000;
+ ff_effect.dwDuration = 0;
+ ff_effect.dwSamplePeriod = 0;
+ ff_effect.dwGain = 10000;
+ ff_effect.dwFlags = FFEFF_OBJECTOFFSETS;
+ ff_effect.dwTriggerButton = FFEB_NOTRIGGER;
+ ff_effect.dwStartDelay = 0;
+ ff_effect.dwTriggerRepeatInterval = 0;
+ ff_effect.lpEnvelope = NULL;
+ ff_effect.cbTypeSpecificParams = sizeof(FFCONSTANTFORCE);
+ ff_effect.lpvTypeSpecificParams = &ff_constant_force;
+ ff_effect.dwSize = sizeof(ff_effect);
+}
+
+void joystick::free() {
+ if (device_ref) {
+ IOHIDDeviceUnscheduleFromRunLoop(device_ref, CFRunLoopGetCurrent(), GODOT_JOY_LOOP_RUN_MODE);
+ }
+ if (ff_device) {
+ FFDeviceReleaseEffect(ff_device, ff_object);
+ FFReleaseDevice(ff_device);
+ memfree(ff_axes);
+ memfree(ff_directions);
+ }
+}
+
+bool joystick::has_element(IOHIDElementCookie p_cookie, Vector<rec_element> *p_list) const {
+ for (int i = 0; i < p_list->size(); i++) {
+ if (p_cookie == p_list->get(i).cookie) {
+ return true;
+ }
+ }
+ return false;
+}
+
+int joystick::get_hid_element_state(rec_element *p_element) const {
+ int value = 0;
+ if (p_element && p_element->ref) {
+ IOHIDValueRef valueRef;
+ if (IOHIDDeviceGetValue(device_ref, p_element->ref, &valueRef) == kIOReturnSuccess) {
+ value = (SInt32) IOHIDValueGetIntegerValue(valueRef);
+
+ /* record min and max for auto calibration */
+ if (value < p_element->min) {
+ p_element->min = value;
+ }
+ if (value > p_element->max) {
+ p_element->max = value;
+ }
+ }
+ }
+ return value;
+}
+void joystick::add_hid_element(IOHIDElementRef p_element) {
+ const CFTypeID elementTypeID = p_element ? CFGetTypeID(p_element) : 0;
+
+ if (p_element && (elementTypeID == IOHIDElementGetTypeID())) {
+ const IOHIDElementCookie cookie = IOHIDElementGetCookie(p_element);
+ const uint32_t usagePage = IOHIDElementGetUsagePage(p_element);
+ const uint32_t usage = IOHIDElementGetUsage(p_element);
+ Vector<rec_element> *list = NULL;
+
+ switch (IOHIDElementGetType(p_element)) {
+ case kIOHIDElementTypeInput_Misc:
+ case kIOHIDElementTypeInput_Button:
+ case kIOHIDElementTypeInput_Axis: {
+ switch (usagePage) {
+ case kHIDPage_GenericDesktop:
+ switch (usage) {
+ case kHIDUsage_GD_X:
+ case kHIDUsage_GD_Y:
+ case kHIDUsage_GD_Z:
+ case kHIDUsage_GD_Rx:
+ case kHIDUsage_GD_Ry:
+ case kHIDUsage_GD_Rz:
+ case kHIDUsage_GD_Slider:
+ case kHIDUsage_GD_Dial:
+ case kHIDUsage_GD_Wheel:
+ if (!has_element(cookie, &axis_elements)) {
+ list = &axis_elements;
+ }
+ break;
+
+ case kHIDUsage_GD_Hatswitch:
+ if (!has_element(cookie, &hat_elements)) {
+ list = &hat_elements;
+ }
+ break;
+ case kHIDUsage_GD_DPadUp:
+ case kHIDUsage_GD_DPadDown:
+ case kHIDUsage_GD_DPadRight:
+ case kHIDUsage_GD_DPadLeft:
+ case kHIDUsage_GD_Start:
+ case kHIDUsage_GD_Select:
+ if (!has_element(cookie, &button_elements)) {
+ list = &button_elements;
+ }
+ break;
+ }
+ break;
+
+ case kHIDPage_Simulation:
+ switch (usage) {
+ case kHIDUsage_Sim_Rudder:
+ case kHIDUsage_Sim_Throttle:
+ if (!has_element(cookie, &axis_elements)) {
+ list = &axis_elements;
+ }
+ break;
+
+ default:
+ break;
+ }
+ break;
+
+ case kHIDPage_Button:
+ case kHIDPage_Consumer:
+ if (!has_element(cookie, &button_elements)) {
+ list = &button_elements;
+ }
+ break;
+
+ default:
+ break;
+ }
+ }
+ break;
+
+ case kIOHIDElementTypeCollection: {
+ CFArrayRef array = IOHIDElementGetChildren(p_element);
+ if (array) {
+ add_hid_elements(array);
+ }
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ if (list) { /* add to list */
+ rec_element element;
+
+ element.ref = p_element;
+ element.usage = usage;
+
+ element.min = (SInt32) IOHIDElementGetLogicalMin(p_element);
+ element.max = (SInt32) IOHIDElementGetLogicalMax(p_element);
+ element.cookie = IOHIDElementGetCookie(p_element);
+ list->push_back(element);
+ list->sort_custom<rec_element::Comparator>();
+ }
+ }
+}
+
+static void hid_element_added(const void *p_value, void *p_parameter) {
+ joystick *joy = (joystick*) p_parameter;
+ joy->add_hid_element((IOHIDElementRef) p_value);
+}
+
+void joystick::add_hid_elements(CFArrayRef p_array) {
+ CFRange range = { 0, CFArrayGetCount(p_array) };
+ CFArrayApplyFunction(p_array, range,hid_element_added,this);
+}
+
+static void joystick_removed_callback(void *ctx, IOReturn result, void *sender) {
+ int id = (intptr_t) ctx;
+ self->_device_removed(id);
+}
+
+
+static void joystick_added_callback(void *ctx, IOReturn res, void *sender, IOHIDDeviceRef ioHIDDeviceObject) {
+ self->_device_added(res, ioHIDDeviceObject);
+}
+
+static bool is_joystick(IOHIDDeviceRef p_device_ref) {
+ CFTypeRef refCF = NULL;
+ int usage_page = 0;
+ int usage = 0;
+ refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDPrimaryUsagePageKey));
+ if (refCF) {
+ CFNumberGetValue((CFNumberRef) refCF, kCFNumberSInt32Type, &usage_page);
+ }
+ if (usage_page != kHIDPage_GenericDesktop) {
+ return false;
+ }
+
+ refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDPrimaryUsageKey));
+ if (refCF) {
+ CFNumberGetValue((CFNumberRef) refCF, kCFNumberSInt32Type, &usage);
+ }
+ if ((usage != kHIDUsage_GD_Joystick &&
+ usage != kHIDUsage_GD_GamePad &&
+ usage != kHIDUsage_GD_MultiAxisController)) {
+ return false;
+ }
+ return true;
+}
+
+void JoystickOSX::_device_added(IOReturn p_res, IOHIDDeviceRef p_device) {
+
+ if (p_res != kIOReturnSuccess || have_device(p_device)) {
+ return;
+ }
+
+ joystick new_joystick;
+ if (is_joystick(p_device)) {
+ configure_joystick(p_device, &new_joystick);
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+ if (IOHIDDeviceGetService != NULL) {
+#endif
+ const io_service_t ioservice = IOHIDDeviceGetService(p_device);
+ if ((ioservice) && (FFIsForceFeedback(ioservice) == FF_OK) && new_joystick.config_force_feedback(ioservice)) {
+ new_joystick.ffservice = ioservice;
+ }
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 1060
+ }
+#endif
+ device_list.push_back(new_joystick);
+ }
+ IOHIDDeviceRegisterRemovalCallback(p_device, joystick_removed_callback, (void*) (intptr_t) new_joystick.id);
+ IOHIDDeviceScheduleWithRunLoop(p_device, CFRunLoopGetCurrent(), GODOT_JOY_LOOP_RUN_MODE);
+}
+
+void JoystickOSX::_device_removed(int p_id) {
+
+ int device = get_joy_index(p_id);
+ ERR_FAIL_COND(device == -1);
+
+ input->joy_connection_changed(p_id, false, "");
+ device_list[device].free();
+ device_list.remove(device);
+ attached_devices[p_id] = false;
+}
+
+static String _hex_str(uint8_t p_byte) {
+
+ static const char* dict = "0123456789abcdef";
+ char ret[3];
+ ret[2] = 0;
+
+ ret[0] = dict[p_byte>>4];
+ ret[1] = dict[p_byte & 0xF];
+
+ return ret;
+}
+
+bool JoystickOSX::configure_joystick(IOHIDDeviceRef p_device_ref, joystick* p_joy) {
+
+ CFTypeRef refCF = NULL;
+
+ p_joy->device_ref = p_device_ref;
+ /* get device name */
+ String name;
+ char c_name[256];
+ refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDProductKey));
+ if (!refCF) {
+ refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDManufacturerKey));
+ }
+ if ((!refCF) || (!CFStringGetCString((CFStringRef) refCF, c_name, sizeof (c_name), kCFStringEncodingUTF8))) {
+ name = "Unidentified Joystick";
+ }
+ name = c_name;
+
+ int id = get_free_joy_id();
+ ERR_FAIL_COND_V(id == -1, false);
+ p_joy->id = id;
+ int vendor = 0;
+ refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDVendorIDKey));
+ if (refCF) {
+ CFNumberGetValue((CFNumberRef)refCF, kCFNumberSInt32Type, &vendor);
+ }
+
+ int product_id = 0;
+ refCF = IOHIDDeviceGetProperty(p_device_ref, CFSTR(kIOHIDProductIDKey));
+ if (refCF) {
+ CFNumberGetValue((CFNumberRef)refCF, kCFNumberSInt32Type, &product_id);
+ }
+ if (vendor && product_id) {
+ char uid[128];
+ sprintf(uid, "%04x%08x%04x%08x", OSSwapHostToBigInt32(vendor),0, OSSwapHostToBigInt32(product_id), 0);
+ input->joy_connection_changed(id, true, name, uid);
+ }
+ else {
+ //bluetooth device
+ String guid = "05000000";
+ for (int i = 0; i < 12; i++) {
+ if (i < name.size()) guid += _hex_str(name[i]);
+ else guid += "00";
+ }
+ input->joy_connection_changed(id, true, name, guid);
+ }
+
+ CFArrayRef array = NULL;
+ array = IOHIDDeviceCopyMatchingElements(p_device_ref, NULL, kIOHIDOptionsTypeNone);
+ if (array) {
+ p_joy->add_hid_elements(array);
+ CFRelease(array);
+ }
+ return true;
+}
+
+#define FF_ERR() { if (ret != FF_OK) { FFReleaseDevice(ff_device); return false; } }
+bool joystick::config_force_feedback(io_service_t p_service) {
+
+ HRESULT ret = FFCreateDevice(p_service, &ff_device);
+ ERR_FAIL_COND_V(ret != FF_OK, false);
+
+ ret = FFDeviceSendForceFeedbackCommand(ff_device, FFSFFC_RESET);
+ FF_ERR();
+
+ ret = FFDeviceSendForceFeedbackCommand(ff_device, FFSFFC_SETACTUATORSON);
+ FF_ERR();
+
+ if (check_ff_features()) {
+ ret = FFDeviceCreateEffect(ff_device, kFFEffectType_ConstantForce_ID, &ff_effect, &ff_object);
+ FF_ERR();
+ return true;
+ }
+ FFReleaseDevice(ff_device);
+ return false;
+}
+#undef FF_ERR
+
+#define TEST_FF(ff) (features.supportedEffects & (ff))
+bool joystick::check_ff_features() {
+
+ FFCAPABILITIES features;
+ HRESULT ret = FFDeviceGetForceFeedbackCapabilities(ff_device, &features);
+ if (ret == FF_OK && (features.supportedEffects & FFCAP_ET_CONSTANTFORCE)) {
+ uint32_t val;
+ ret = FFDeviceGetForceFeedbackProperty(ff_device, FFPROP_FFGAIN, &val, sizeof(val));
+ if (ret != FF_OK) return false;
+ int num_axes = features.numFfAxes;
+ ff_axes = (DWORD*) memalloc(sizeof(DWORD) * num_axes);
+ ff_directions = (LONG*) memalloc(sizeof(LONG) * num_axes);
+
+ for (int i = 0; i < num_axes; i++) {
+ ff_axes[i] = features.ffAxes[i];
+ ff_directions[i] = 0;
+ }
+
+ ff_effect.cAxes = num_axes;
+ ff_effect.rgdwAxes = ff_axes;
+ ff_effect.rglDirection = ff_directions;
+ return true;
+ }
+ return false;
+}
+
+static int process_hat_value(int p_min, int p_max, int p_value) {
+ int range = (p_max - p_min + 1);
+ int value = p_value - p_min;
+ int hat_value = InputDefault::HAT_MASK_CENTER;
+ if (range == 4) {
+ value *= 2;
+ }
+
+ switch (value) {
+ case 0:
+ hat_value = InputDefault::HAT_MASK_UP;
+ break;
+ case 1:
+ hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_RIGHT;
+ break;
+ case 2:
+ hat_value = InputDefault::HAT_MASK_RIGHT;
+ break;
+ case 3:
+ hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_RIGHT;
+ break;
+ case 4:
+ hat_value = InputDefault::HAT_MASK_DOWN;
+ break;
+ case 5:
+ hat_value = InputDefault::HAT_MASK_DOWN | InputDefault::HAT_MASK_LEFT;
+ break;
+ case 6:
+ hat_value = InputDefault::HAT_MASK_LEFT;
+ break;
+ case 7:
+ hat_value = InputDefault::HAT_MASK_UP | InputDefault::HAT_MASK_LEFT;
+ break;
+ default:
+ hat_value = InputDefault::HAT_MASK_CENTER;
+ break;
+ }
+ return hat_value;
+}
+
+void JoystickOSX::poll_joysticks() const {
+ while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE,0,TRUE) == kCFRunLoopRunHandledSource) {
+ /* no-op. Pending callbacks will fire. */
+ }
+}
+
+static const InputDefault::JoyAxis axis_correct(int p_value, int p_min, int p_max) {
+ InputDefault::JoyAxis jx;
+ if (p_min < 0) {
+ jx.min = -1;
+ if (p_value < 0) {
+ jx.value = (float) -p_value / p_min;
+ }
+ else jx.value = (float) p_value / p_max;
+ }
+ if (p_min == 0) {
+ jx.min = 0;
+ jx.value = 0.0f + (float) p_value / p_max;
+ }
+ return jx;
+}
+
+uint32_t JoystickOSX::process_joysticks(uint32_t p_last_id){
+ poll_joysticks();
+
+ for (int i = 0; i < device_list.size(); i++) {
+ joystick &joy = device_list[i];
+
+ for (int j = 0; j < joy.axis_elements.size(); j++) {
+ rec_element &elem = joy.axis_elements[j];
+ int value = joy.get_hid_element_state(&elem);
+ p_last_id = input->joy_axis(p_last_id, joy.id, j, axis_correct(value, elem.min, elem.max));
+ }
+ for (int j = 0; j < joy.button_elements.size(); j++) {
+ int value = joy.get_hid_element_state(&joy.button_elements[j]);
+ p_last_id = input->joy_button(p_last_id, joy.id, j, (value>=1));
+ }
+ for (int j = 0; j < joy.hat_elements.size(); j++) {
+ rec_element &elem = joy.hat_elements[j];
+ int value = joy.get_hid_element_state(&elem);
+ int hat_value = process_hat_value(elem.min, elem.max, value);
+ p_last_id = input->joy_hat(p_last_id, joy.id, hat_value);
+ }
+
+ if (joy.ffservice) {
+ uint64_t timestamp = input->get_joy_vibration_timestamp(joy.id);
+ if (timestamp > joy.ff_timestamp) {
+ Vector2 strength = input->get_joy_vibration_strength(joy.id);
+ float duration = input->get_joy_vibration_duration(joy.id);
+ if (strength.x == 0 && strength.y == 0) {
+ joystick_vibration_stop(joy.id, timestamp);
+ }
+ else {
+ float gain = MAX(strength.x, strength.y);
+ joystick_vibration_start(joy.id, gain, duration, timestamp);
+ }
+ }
+ }
+ }
+ return p_last_id;
+}
+
+void JoystickOSX::joystick_vibration_start(int p_id, float p_magnitude, float p_duration, uint64_t p_timestamp) {
+ joystick *joy = &device_list[get_joy_index(p_id)];
+ joy->ff_timestamp = p_timestamp;
+ joy->ff_effect.dwDuration = p_duration * FF_SECONDS;
+ joy->ff_effect.dwGain = p_magnitude * FF_FFNOMINALMAX;
+ FFEffectSetParameters(joy->ff_object, &joy->ff_effect, FFEP_DURATION | FFEP_GAIN);
+ FFEffectStart(joy->ff_object, 1, 0);
+}
+
+void JoystickOSX::joystick_vibration_stop(int p_id, uint64_t p_timestamp) {
+ joystick* joy = &device_list[get_joy_index(p_id)];
+ joy->ff_timestamp = p_timestamp;
+ FFEffectStop(joy->ff_object);
+}
+
+int JoystickOSX::get_free_joy_id() {
+ for (int i = 0; i < JOYSTICKS_MAX; i++) {
+ if (!attached_devices[i]) {
+ attached_devices[i] = true;
+ return i;
+ }
+ }
+ return -1;
+}
+
+int JoystickOSX::get_joy_index(int p_id) const {
+ for (int i = 0; i < device_list.size(); i++) {
+ if (device_list[i].id == p_id) return i;
+ }
+ return -1;
+}
+
+bool JoystickOSX::have_device(IOHIDDeviceRef p_device) const {
+ for (int i = 0; i < device_list.size(); i++) {
+ if (device_list[i].device_ref == p_device) {
+ return true;
+ }
+ }
+ return false;
+}
+
+static CFDictionaryRef create_match_dictionary(const UInt32 page, const UInt32 usage, int *okay)
+{
+ CFDictionaryRef retval = NULL;
+ CFNumberRef pageNumRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &page);
+ CFNumberRef usageNumRef = CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &usage);
+ const void *keys[2] = { (void *) CFSTR(kIOHIDDeviceUsagePageKey), (void *) CFSTR(kIOHIDDeviceUsageKey) };
+ const void *vals[2] = { (void *) pageNumRef, (void *) usageNumRef };
+
+ if (pageNumRef && usageNumRef) {
+ retval = CFDictionaryCreate(kCFAllocatorDefault, keys, vals, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
+ }
+
+ if (pageNumRef) {
+ CFRelease(pageNumRef);
+ }
+ if (usageNumRef) {
+ CFRelease(usageNumRef);
+ }
+
+ if (!retval) {
+ *okay = 0;
+ }
+
+ return retval;
+}
+
+void JoystickOSX::config_hid_manager(CFArrayRef p_matching_array) const {
+
+ CFRunLoopRef runloop = CFRunLoopGetCurrent();
+ IOReturn ret = IOHIDManagerOpen(hid_manager, kIOHIDOptionsTypeNone);
+ ERR_FAIL_COND(ret != kIOReturnSuccess);
+
+ IOHIDManagerSetDeviceMatchingMultiple(hid_manager, p_matching_array);
+ IOHIDManagerRegisterDeviceMatchingCallback(hid_manager, joystick_added_callback, NULL);
+ IOHIDManagerScheduleWithRunLoop(hid_manager, runloop, GODOT_JOY_LOOP_RUN_MODE);
+
+ while (CFRunLoopRunInMode(GODOT_JOY_LOOP_RUN_MODE,0,TRUE) == kCFRunLoopRunHandledSource) {
+ /* no-op. Callback fires once per existing device. */
+ }
+}
+
+JoystickOSX::JoystickOSX()
+{
+ self = this;
+ input = (InputDefault*)Input::get_singleton();
+
+ for (int i = 0; i < JOYSTICKS_MAX; i++) {
+ attached_devices[i] = false;
+ }
+
+ int okay = 1;
+ const void *vals[] = {
+ (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_Joystick, &okay),
+ (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_GamePad, &okay),
+ (void *) create_match_dictionary(kHIDPage_GenericDesktop, kHIDUsage_GD_MultiAxisController, &okay),
+ };
+ const size_t n_elements = sizeof(vals)/sizeof(vals[0]);
+ CFArrayRef array = okay ? CFArrayCreate(kCFAllocatorDefault, vals, n_elements, &kCFTypeArrayCallBacks) : NULL;
+
+ for (int i = 0; i < n_elements; i++) {
+ if (vals[i]) {
+ CFRelease((CFTypeRef) vals[i]);
+ }
+ }
+
+ if (array) {
+ hid_manager = IOHIDManagerCreate(kCFAllocatorDefault, kIOHIDOptionsTypeNone);
+ if (hid_manager != NULL) {
+ config_hid_manager(array);
+ }
+ CFRelease(array);
+ }
+}
+
+JoystickOSX::~JoystickOSX() {
+
+ for (int i = 0; i < device_list.size(); i++) {
+ device_list[i].free();
+ }
+
+ IOHIDManagerUnscheduleFromRunLoop(hid_manager, CFRunLoopGetCurrent(), GODOT_JOY_LOOP_RUN_MODE);
+ IOHIDManagerClose(hid_manager, kIOHIDOptionsTypeNone);
+ CFRelease(hid_manager);
+ hid_manager = NULL;
+}
+
diff --git a/platform/osx/joystick_osx.h b/platform/osx/joystick_osx.h
new file mode 100644
index 0000000000..38a4e3b1d3
--- /dev/null
+++ b/platform/osx/joystick_osx.h
@@ -0,0 +1,125 @@
+/*************************************************************************/
+/* joystick_osx.h */
+/*************************************************************************/
+/* This file is part of: */
+/* GODOT ENGINE */
+/* http://www.godotengine.org */
+/*************************************************************************/
+/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
+/* */
+/* Permission is hereby granted, free of charge, to any person obtaining */
+/* a copy of this software and associated documentation files (the */
+/* "Software"), to deal in the Software without restriction, including */
+/* without limitation the rights to use, copy, modify, merge, publish, */
+/* distribute, sublicense, and/or sell copies of the Software, and to */
+/* permit persons to whom the Software is furnished to do so, subject to */
+/* the following conditions: */
+/* */
+/* The above copyright notice and this permission notice shall be */
+/* included in all copies or substantial portions of the Software. */
+/* */
+/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
+/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
+/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
+/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
+/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
+/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
+/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+/*************************************************************************/
+#ifndef JOYSTICKOSX_H
+#define JOYSTICKOSX_H
+
+#ifdef MACOS_10_0_4
+#include <IOKit/hidsystem/IOHIDUsageTables.h>
+#else
+#include <Kernel/IOKit/hidsystem/IOHIDUsageTables.h>
+#endif
+#include <IOKit/hid/IOHIDLib.h>
+#include <ForceFeedback/ForceFeedback.h>
+#include <ForceFeedback/ForceFeedbackConstants.h>
+
+#include "main/input_default.h"
+
+struct rec_element {
+ IOHIDElementRef ref;
+ IOHIDElementCookie cookie;
+
+ uint32_t usage;
+
+ int min;
+ int max;
+
+ struct Comparator {
+ bool operator()(const rec_element p_a, const rec_element p_b) const { return p_a.usage < p_b.usage; }
+ };
+};
+
+struct joystick {
+ IOHIDDeviceRef device_ref;
+
+ Vector<rec_element> axis_elements;
+ Vector<rec_element> button_elements;
+ Vector<rec_element> hat_elements;
+
+ int id;
+
+ io_service_t ffservice; /* Interface for force feedback, 0 = no ff */
+ FFCONSTANTFORCE ff_constant_force;
+ FFDeviceObjectReference ff_device;
+ FFEffectObjectReference ff_object;
+ uint64_t ff_timestamp;
+ LONG *ff_directions;
+ FFEFFECT ff_effect;
+ DWORD *ff_axes;
+
+ void add_hid_elements(CFArrayRef p_array);
+ void add_hid_element(IOHIDElementRef p_element);
+
+ bool has_element(IOHIDElementCookie p_cookie, Vector<rec_element> *p_list) const;
+ bool config_force_feedback(io_service_t p_service);
+ bool check_ff_features();
+
+ int get_hid_element_state(rec_element *p_element) const;
+
+ void free();
+ joystick();
+};
+
+class JoystickOSX {
+
+ enum {
+ JOYSTICKS_MAX = 16,
+ };
+
+private:
+ InputDefault *input;
+ IOHIDManagerRef hid_manager;
+
+ bool attached_devices[JOYSTICKS_MAX];
+ Vector<joystick> device_list;
+
+ bool have_device(IOHIDDeviceRef p_device) const;
+ bool configure_joystick(IOHIDDeviceRef p_device_ref, joystick *p_joy);
+
+
+ int get_free_joy_id();
+ int get_joy_index(int p_id) const;
+
+ void poll_joysticks() const;
+ void setup_joystick_objects();
+ void config_hid_manager(CFArrayRef p_matching_array) const;
+
+ void joystick_vibration_start(int p_id, float p_magnitude, float p_duration, uint64_t p_timestamp);
+ void joystick_vibration_stop(int p_id, uint64_t p_timestamp);
+
+public:
+ uint32_t process_joysticks(uint32_t p_last_id);
+
+ void _device_added(IOReturn p_res, IOHIDDeviceRef p_device);
+ void _device_removed(int p_id);
+
+ JoystickOSX();
+ ~JoystickOSX();
+};
+
+#endif // JOYSTICKOSX_H
diff --git a/platform/osx/os_osx.h b/platform/osx/os_osx.h
index 8f89695a68..e23ae49a35 100644
--- a/platform/osx/os_osx.h
+++ b/platform/osx/os_osx.h
@@ -31,6 +31,7 @@
#include "os/input.h"
+#include "joystick_osx.h"
#include "drivers/unix/os_unix.h"
#include "main/input_default.h"
#include "servers/visual_server.h"
@@ -76,6 +77,7 @@ public:
SpatialSound2DServerSW *spatial_sound_2d_server;
InputDefault *input;
+ JoystickOSX *joystick_osx;
/* objc */
@@ -203,6 +205,7 @@ public:
virtual void set_window_maximized(bool p_enabled);
virtual bool is_window_maximized() const;
virtual void request_attention();
+ virtual String get_joy_guid(int p_device) const;
void run();
diff --git a/platform/osx/os_osx.mm b/platform/osx/os_osx.mm
index b084a08ecc..cc893cc7a0 100644
--- a/platform/osx/os_osx.mm
+++ b/platform/osx/os_osx.mm
@@ -1123,6 +1123,7 @@ void OS_OSX::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
physics_2d_server->init();
input = memnew( InputDefault );
+ joystick_osx = memnew( JoystickOSX );
_ensure_data_dir();
@@ -1165,7 +1166,7 @@ void OS_OSX::finalize() {
spatial_sound_2d_server->finish();
memdelete(spatial_sound_2d_server);
-
+ memdelete(joystick_osx);
memdelete(input);
memdelete(sample_manager);
@@ -1738,7 +1739,7 @@ void OS_OSX::run() {
while (!force_quit) {
process_events(); // get rid of pending events
-// process_joysticks();
+ last_id = joystick_osx->process_joysticks(last_id);
if (Main::iteration()==true)
break;
};
@@ -1773,6 +1774,10 @@ OS::MouseMode OS_OSX::get_mouse_mode() const {
return mouse_mode;
}
+String OS_OSX::get_joy_guid(int p_device) const {
+ return input->get_joy_guid_remapped(p_device);
+}
+
OS_OSX* OS_OSX::singleton=NULL;
OS_OSX::OS_OSX() {
diff --git a/platform/windows/detect.py b/platform/windows/detect.py
index 320fb9d269..2414cee57e 100644
--- a/platform/windows/detect.py
+++ b/platform/windows/detect.py
@@ -237,8 +237,7 @@ def configure(env):
env.Append(CCFLAGS=['/DTYPED_METHOD_BIND'])
env.Append(CCFLAGS=['/DGLES2_ENABLED'])
-
- LIBS=['winmm','opengl32','dsound','kernel32','ole32','oleaut32','user32','gdi32', 'IPHLPAPI','Shlwapi', 'wsock32', 'shell32','advapi32','dinput8','dxguid']
+ LIBS=['winmm','opengl32','dsound','kernel32','ole32','oleaut32','user32','gdi32', 'IPHLPAPI','Shlwapi', 'wsock32','Ws2_32', 'shell32','advapi32','dinput8','dxguid']
env.Append(LINKFLAGS=[p+env["LIBSUFFIX"] for p in LIBS])
env.Append(LIBPATH=[os.getenv("WindowsSdkDir")+"/Lib"])
@@ -361,7 +360,7 @@ def configure(env):
env.Append(CCFLAGS=['-DWINDOWS_ENABLED','-mwindows'])
env.Append(CPPFLAGS=['-DRTAUDIO_ENABLED'])
env.Append(CCFLAGS=['-DGLES2_ENABLED'])
- env.Append(LIBS=['mingw32','opengl32', 'dsound', 'ole32', 'd3d9','winmm','gdi32','iphlpapi','shlwapi','wsock32','kernel32', 'oleaut32', 'dinput8', 'dxguid'])
+ env.Append(LIBS=['mingw32','opengl32', 'dsound', 'ole32', 'd3d9','winmm','gdi32','iphlpapi','shlwapi','wsock32','ws2_32','kernel32', 'oleaut32', 'dinput8', 'dxguid'])
# if (env["bits"]=="32"):
# env.Append(LIBS=['gcc_s'])
diff --git a/platform/windows/os_windows.cpp b/platform/windows/os_windows.cpp
index 571277f91e..cebafdabce 100644
--- a/platform/windows/os_windows.cpp
+++ b/platform/windows/os_windows.cpp
@@ -1364,7 +1364,9 @@ void OS_Windows::set_mouse_mode(MouseMode p_mode) {
POINT pos = { (int) center.x, (int) center.y };
ClientToScreen(hWnd, &pos);
SetCursorPos(pos.x, pos.y);
+ ShowCursor(false);
} else {
+ ShowCursor(true);
ReleaseCapture();
ClipCursor(NULL);
}
diff --git a/platform/x11/os_x11.cpp b/platform/x11/os_x11.cpp
index 490030398e..9a2d610e78 100644
--- a/platform/x11/os_x11.cpp
+++ b/platform/x11/os_x11.cpp
@@ -127,10 +127,10 @@ void OS_X11::initialize(const VideoMode& p_desired,int p_video_driver,int p_audi
int xrandr_minor = 0;
int event_base, error_base;
xrandr_ext_ok = XRRQueryExtension(x11_display,&event_base, &error_base);
- xrandr_handle = dlopen("libXrandr.so", RTLD_LAZY);
- err = dlerror();
+ xrandr_handle = dlopen("libXrandr.so.2", RTLD_LAZY);
if (!xrandr_handle) {
- fprintf(stderr, "could not load libXrandr.so, Error: %s\n", err);
+ err = dlerror();
+ fprintf(stderr, "could not load libXrandr.so.2, Error: %s\n", err);
}
else {
XRRQueryVersion(x11_display, &xrandr_major, &xrandr_minor);
diff --git a/scene/2d/camera_2d.cpp b/scene/2d/camera_2d.cpp
index f98a50e3e0..e576aa10e0 100644
--- a/scene/2d/camera_2d.cpp
+++ b/scene/2d/camera_2d.cpp
@@ -29,6 +29,8 @@
#include "camera_2d.h"
#include "scene/scene_string_names.h"
#include "servers/visual_server.h"
+#include "core/math/math_funcs.h"
+#include <editor/editor_node.h>
void Camera2D::_update_scroll() {
@@ -114,7 +116,25 @@ Matrix32 Camera2D::get_camera_transform() {
camera_pos=new_camera_pos;
}
-
+ Point2 screen_offset = (anchor_mode==ANCHOR_MODE_DRAG_CENTER ? (screen_size * 0.5 * zoom) : Point2());
+ Rect2 screen_rect(-screen_offset+camera_pos,screen_size*zoom);
+
+ if (offset!=Vector2())
+ screen_rect.pos+=offset;
+
+ if (limit_smoothing_enabled) {
+ if (screen_rect.pos.x < limit[MARGIN_LEFT])
+ camera_pos.x -= screen_rect.pos.x - limit[MARGIN_LEFT];
+
+ if (screen_rect.pos.x + screen_rect.size.x > limit[MARGIN_RIGHT])
+ camera_pos.x -= screen_rect.pos.x + screen_rect.size.x - limit[MARGIN_RIGHT];
+
+ if (screen_rect.pos.y + screen_rect.size.y > limit[MARGIN_BOTTOM])
+ camera_pos.y -= screen_rect.pos.y + screen_rect.size.y - limit[MARGIN_BOTTOM];
+
+ if (screen_rect.pos.y < limit[MARGIN_TOP])
+ camera_pos.y -= screen_rect.pos.y - limit[MARGIN_TOP];
+ }
if (smoothing_enabled && !get_tree()->is_editor_hint()) {
@@ -144,19 +164,19 @@ Matrix32 Camera2D::get_camera_transform() {
}
Rect2 screen_rect(-screen_offset+ret_camera_pos,screen_size*zoom);
+ if (screen_rect.pos.x < limit[MARGIN_LEFT])
+ screen_rect.pos.x = limit[MARGIN_LEFT];
+
if (screen_rect.pos.x + screen_rect.size.x > limit[MARGIN_RIGHT])
screen_rect.pos.x = limit[MARGIN_RIGHT] - screen_rect.size.x;
if (screen_rect.pos.y + screen_rect.size.y > limit[MARGIN_BOTTOM])
screen_rect.pos.y = limit[MARGIN_BOTTOM] - screen_rect.size.y;
-
- if (screen_rect.pos.x < limit[MARGIN_LEFT])
- screen_rect.pos.x=limit[MARGIN_LEFT];
-
if (screen_rect.pos.y < limit[MARGIN_TOP])
screen_rect.pos.y =limit[MARGIN_TOP];
-
+
+
if (offset!=Vector2()) {
screen_rect.pos+=offset;
@@ -382,6 +402,17 @@ int Camera2D::get_limit(Margin p_margin) const{
}
+void Camera2D::set_limit_smoothing_enabled(bool enable) {
+
+ limit_smoothing_enabled = enable;
+ _update_scroll();
+}
+
+bool Camera2D::is_limit_smoothing_enabled() const{
+
+ return limit_smoothing_enabled;
+}
+
void Camera2D::set_drag_margin(Margin p_margin,float p_drag_margin) {
ERR_FAIL_INDEX(p_margin,4);
@@ -536,13 +567,15 @@ void Camera2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_update_scroll"),&Camera2D::_update_scroll);
-
ObjectTypeDB::bind_method(_MD("_set_current","current"),&Camera2D::_set_current);
ObjectTypeDB::bind_method(_MD("is_current"),&Camera2D::is_current);
ObjectTypeDB::bind_method(_MD("set_limit","margin","limit"),&Camera2D::set_limit);
ObjectTypeDB::bind_method(_MD("get_limit","margin"),&Camera2D::get_limit);
+ ObjectTypeDB::bind_method(_MD("set_limit_smoothing_enabled","limit_smoothing_enabled"),&Camera2D::set_limit_smoothing_enabled);
+ ObjectTypeDB::bind_method(_MD("is_limit_smoothing_enabled"),&Camera2D::is_limit_smoothing_enabled);
+
ObjectTypeDB::bind_method(_MD("set_v_drag_enabled","enabled"),&Camera2D::set_v_drag_enabled);
ObjectTypeDB::bind_method(_MD("is_v_drag_enabled"),&Camera2D::is_v_drag_enabled);
@@ -587,6 +620,7 @@ void Camera2D::_bind_methods() {
ADD_PROPERTYI( PropertyInfo(Variant::INT,"limit/top"),_SCS("set_limit"),_SCS("get_limit"),MARGIN_TOP);
ADD_PROPERTYI( PropertyInfo(Variant::INT,"limit/right"),_SCS("set_limit"),_SCS("get_limit"),MARGIN_RIGHT);
ADD_PROPERTYI( PropertyInfo(Variant::INT,"limit/bottom"),_SCS("set_limit"),_SCS("get_limit"),MARGIN_BOTTOM);
+ ADD_PROPERTY( PropertyInfo(Variant::BOOL,"limit/smoothed"),_SCS("set_limit_smoothing_enabled"),_SCS("is_limit_smoothing_enabled") );
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"drag_margin/h_enabled"),_SCS("set_h_drag_enabled"),_SCS("is_h_drag_enabled") );
ADD_PROPERTY( PropertyInfo(Variant::BOOL,"drag_margin/v_enabled"),_SCS("set_v_drag_enabled"),_SCS("is_v_drag_enabled") );
@@ -619,6 +653,7 @@ Camera2D::Camera2D() {
limit[MARGIN_TOP]=-10000000;
limit[MARGIN_RIGHT]=10000000;
limit[MARGIN_BOTTOM]=10000000;
+
drag_margin[MARGIN_LEFT]=0.2;
drag_margin[MARGIN_TOP]=0.2;
drag_margin[MARGIN_RIGHT]=0.2;
@@ -626,6 +661,7 @@ Camera2D::Camera2D() {
camera_pos=Vector2();
first=true;
smoothing_enabled=false;
+ limit_smoothing_enabled=false;
smoothing=5.0;
zoom = Vector2(1, 1);
diff --git a/scene/2d/camera_2d.h b/scene/2d/camera_2d.h
index b3f55d798d..9f3e4254bb 100644
--- a/scene/2d/camera_2d.h
+++ b/scene/2d/camera_2d.h
@@ -61,6 +61,7 @@ protected:
float smoothing;
bool smoothing_enabled;
int limit[4];
+ bool limit_smoothing_enabled;
float drag_margin[4];
bool h_drag_enabled;
@@ -68,7 +69,6 @@ protected:
float h_ofs;
float v_ofs;
-
Point2 camera_screen_center;
void _update_scroll();
@@ -95,6 +95,8 @@ public:
void set_limit(Margin p_margin,int p_limit);
int get_limit(Margin p_margin) const;
+ void set_limit_smoothing_enabled(bool enable);
+ bool is_limit_smoothing_enabled() const;
void set_h_drag_enabled(bool p_enabled);
bool is_h_drag_enabled() const;
diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp
index eb4f457975..ed1d606ba8 100644
--- a/scene/2d/canvas_item.cpp
+++ b/scene/2d/canvas_item.cpp
@@ -650,21 +650,22 @@ int CanvasItem::get_light_mask() const{
}
-void CanvasItem::item_rect_changed() {
+void CanvasItem::item_rect_changed(bool p_size_changed) {
- update();
+ if (p_size_changed)
+ update();
emit_signal(SceneStringNames::get_singleton()->item_rect_changed);
}
-void CanvasItem::draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) {
+void CanvasItem::draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased) {
if (!drawing) {
ERR_EXPLAIN("Drawing is only allowed inside NOTIFICATION_DRAW, _draw() function or 'draw' signal.");
ERR_FAIL();
}
- VisualServer::get_singleton()->canvas_item_add_line(canvas_item,p_from,p_to,p_color,p_width);
+ VisualServer::get_singleton()->canvas_item_add_line(canvas_item,p_from,p_to,p_color,p_width,p_antialiased);
}
void CanvasItem::draw_rect(const Rect2& p_rect, const Color& p_color) {
@@ -1028,7 +1029,7 @@ void CanvasItem::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_is_on_top"),&CanvasItem::_is_on_top);
//ObjectTypeDB::bind_method(_MD("get_transform"),&CanvasItem::get_transform);
- ObjectTypeDB::bind_method(_MD("draw_line","from","to","color","width"),&CanvasItem::draw_line,DEFVAL(1.0));
+ ObjectTypeDB::bind_method(_MD("draw_line","from","to","color","width","antialiased"),&CanvasItem::draw_line,DEFVAL(1.0),DEFVAL(false));
ObjectTypeDB::bind_method(_MD("draw_rect","rect","color"),&CanvasItem::draw_rect);
ObjectTypeDB::bind_method(_MD("draw_circle","pos","radius","color"),&CanvasItem::draw_circle);
ObjectTypeDB::bind_method(_MD("draw_texture","texture:Texture","pos","modulate"),&CanvasItem::draw_texture,DEFVAL(Color(1,1,1,1)));
diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h
index b894310ce2..7849a66185 100644
--- a/scene/2d/canvas_item.h
+++ b/scene/2d/canvas_item.h
@@ -157,7 +157,7 @@ protected:
_FORCE_INLINE_ void _notify_transform() { if (!is_inside_tree()) return; _notify_transform(this); if (!block_transform_notify && notify_local_transform) notification(NOTIFICATION_LOCAL_TRANSFORM_CHANGED); }
- void item_rect_changed();
+ void item_rect_changed(bool p_size_changed=true);
void _notification(int p_what);
static void _bind_methods();
@@ -207,7 +207,7 @@ public:
/* DRAWING API */
- void draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0);
+ void draw_line(const Point2& p_from, const Point2& p_to, const Color& p_color, float p_width=1.0, bool p_antialiased=false);
void draw_rect(const Rect2& p_rect, const Color& p_color);
void draw_circle(const Point2& p_pos, float p_radius, const Color& p_color);
void draw_texture(const Ref<Texture>& p_texture, const Point2& p_pos, const Color &p_modulate=Color(1,1,1,1));
diff --git a/scene/2d/node_2d.cpp b/scene/2d/node_2d.cpp
index 134e0153b3..df43e8e373 100644
--- a/scene/2d/node_2d.cpp
+++ b/scene/2d/node_2d.cpp
@@ -295,6 +295,53 @@ void Node2D::set_global_pos(const Point2& p_pos) {
}
}
+
+float Node2D::get_global_rot() const {
+
+ return get_global_transform().get_rotation();
+}
+
+void Node2D::set_global_rot(float p_radians) {
+
+ CanvasItem *pi = get_parent_item();
+ if (pi) {
+ const float parent_global_rot = pi->get_global_transform().get_rotation();
+ set_rot(p_radians - parent_global_rot);
+ } else {
+ set_rot(p_radians);
+ }
+}
+
+
+float Node2D::get_global_rotd() const {
+
+ return Math::rad2deg(get_global_rot());
+}
+
+void Node2D::set_global_rotd(float p_degrees) {
+
+ set_global_rot(Math::deg2rad(p_degrees));
+}
+
+
+Size2 Node2D::get_global_scale() const {
+
+ return get_global_transform().get_scale();
+}
+
+void Node2D::set_global_scale(const Size2& p_scale) {
+
+ CanvasItem *pi = get_parent_item();
+ if (pi) {
+ const Size2 parent_global_scale = pi->get_global_transform().get_scale();
+ set_scale(p_scale - parent_global_scale);
+ } else {
+ set_scale(p_scale);
+ }
+
+}
+
+
void Node2D::set_transform(const Matrix32& p_transform) {
_mat=p_transform;
@@ -398,6 +445,12 @@ void Node2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_global_pos","pos"),&Node2D::set_global_pos);
ObjectTypeDB::bind_method(_MD("get_global_pos"),&Node2D::get_global_pos);
+ ObjectTypeDB::bind_method(_MD("set_global_rot","radians"),&Node2D::set_global_rot);
+ ObjectTypeDB::bind_method(_MD("get_global_rot"),&Node2D::get_global_rot);
+ ObjectTypeDB::bind_method(_MD("set_global_rotd","degrees"),&Node2D::set_global_rotd);
+ ObjectTypeDB::bind_method(_MD("get_global_rotd"),&Node2D::get_global_rotd);
+ ObjectTypeDB::bind_method(_MD("set_global_scale","scale"),&Node2D::set_global_scale);
+ ObjectTypeDB::bind_method(_MD("get_global_scale"),&Node2D::get_global_scale);
ObjectTypeDB::bind_method(_MD("set_transform","xform"),&Node2D::set_transform);
ObjectTypeDB::bind_method(_MD("set_global_transform","xform"),&Node2D::set_global_transform);
diff --git a/scene/2d/node_2d.h b/scene/2d/node_2d.h
index b0c628fd94..aa8d0ef33c 100644
--- a/scene/2d/node_2d.h
+++ b/scene/2d/node_2d.h
@@ -87,11 +87,17 @@ public:
Size2 get_scale() const;
Point2 get_global_pos() const;
+ float get_global_rot() const;
+ float get_global_rotd() const;
+ Size2 get_global_scale() const;
virtual Rect2 get_item_rect() const;
void set_transform(const Matrix32& p_transform);
void set_global_transform(const Matrix32& p_transform);
void set_global_pos(const Point2& p_pos);
+ void set_global_rot(float p_radians);
+ void set_global_rotd(float p_degrees);
+ void set_global_scale(const Size2& p_scale);
void set_z(int p_z);
int get_z() const;
diff --git a/scene/2d/physics_body_2d.cpp b/scene/2d/physics_body_2d.cpp
index 26c4ea385f..0c5c353766 100644
--- a/scene/2d/physics_body_2d.cpp
+++ b/scene/2d/physics_body_2d.cpp
@@ -436,7 +436,7 @@ bool RigidBody2D::_test_motion(const Vector2& p_motion,float p_margin,const Ref<
Physics2DServer::MotionResult *r=NULL;
if (p_result.is_valid())
r=p_result->get_result_ptr();
- return Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_motion,p_margin,r);
+ return Physics2DServer::get_singleton()->body_test_motion(get_rid(),get_global_transform(),p_motion,p_margin,r);
}
@@ -1057,8 +1057,10 @@ Vector2 KinematicBody2D::get_travel() const {
Vector2 KinematicBody2D::move(const Vector2& p_motion) {
#if 1
+
+ Matrix32 gt = get_global_transform();
Physics2DServer::MotionResult result;
- colliding = Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_motion,margin,&result);
+ colliding = Physics2DServer::get_singleton()->body_test_motion(get_rid(),gt,p_motion,margin,&result);
collider_metadata=result.collider_metadata;
collider_shape=result.collider_shape;
@@ -1067,10 +1069,12 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
normal=result.collision_normal;
collider=result.collider_id;
- Matrix32 gt = get_global_transform();
+
gt.elements[2]+=result.motion;
set_global_transform(gt);
travel=result.motion;
+
+
return result.remainder;
#else
@@ -1081,7 +1085,6 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
//this took about a week to get right..
//but is it right? who knows at this point..
-
colliding=false;
ERR_FAIL_COND_V(!is_inside_tree(),Vector2());
Physics2DDirectSpaceState *dss = Physics2DServer::get_singleton()->space_get_direct_state(get_world_2d()->get_space());
@@ -1099,17 +1102,15 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
bool collided=false;
uint32_t mask=0;
- if (collide_static)
+ if (true)
mask|=Physics2DDirectSpaceState::TYPE_MASK_STATIC_BODY;
- if (collide_kinematic)
+ if (true)
mask|=Physics2DDirectSpaceState::TYPE_MASK_KINEMATIC_BODY;
- if (collide_rigid)
+ if (true)
mask|=Physics2DDirectSpaceState::TYPE_MASK_RIGID_BODY;
- if (collide_character)
+ if (true)
mask|=Physics2DDirectSpaceState::TYPE_MASK_CHARACTER_BODY;
-// print_line("motion: "+p_motion+" margin: "+rtos(margin));
-
//print_line("margin: "+rtos(margin));
do {
@@ -1145,6 +1146,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
break;
}
+
+
Matrix32 gt = get_global_transform();
gt.elements[2]+=recover_motion;
set_global_transform(gt);
@@ -1191,6 +1194,8 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
if (safe>=1) {
//not collided
colliding=false;
+
+
} else {
//it collided, let's get the rest info in unsafe advance
@@ -1226,16 +1231,94 @@ Vector2 KinematicBody2D::move(const Vector2& p_motion) {
#endif
}
+
+
+Vector2 KinematicBody2D::move_and_slide(const Vector2& p_linear_velocity,const Vector2& p_floor_direction,float p_slope_stop_min_velocity,int p_max_bounces) {
+
+ Vector2 motion = (move_and_slide_floor_velocity+p_linear_velocity)*get_fixed_process_delta_time();
+ Vector2 lv = p_linear_velocity;
+
+ move_and_slide_on_floor=false;
+ move_and_slide_on_ceiling=false;
+ move_and_slide_on_wall=false;
+ move_and_slide_colliders.clear();
+ move_and_slide_floor_velocity=Vector2();
+
+ while(p_max_bounces) {
+
+ motion=move(motion);
+
+ if (is_colliding()) {
+
+
+ if (p_floor_direction==Vector2()) {
+ //all is a wall
+ move_and_slide_on_wall=true;
+ } else {
+ if ( get_collision_normal().dot(p_floor_direction) > Math::cos(Math::deg2rad(45))) { //floor
+
+
+ move_and_slide_on_floor=true;
+ move_and_slide_floor_velocity=get_collider_velocity();
+
+ if (get_travel().length()<1 && ABS((lv.x-move_and_slide_floor_velocity.x))<p_slope_stop_min_velocity) {
+ revert_motion();
+ return Vector2();
+ }
+ } else if ( get_collision_normal().dot(p_floor_direction) < Math::cos(Math::deg2rad(45))) { //ceiling
+ move_and_slide_on_ceiling=true;
+ } else {
+ move_and_slide_on_wall=true;
+ }
+
+ }
+
+ motion=get_collision_normal().slide(motion);
+ lv=get_collision_normal().slide(lv);
+ Variant collider = _get_collider();
+ if (collider.get_type()!=Variant::NIL) {
+ move_and_slide_colliders.push_back(collider);
+ }
+
+ } else {
+ break;
+ }
+
+ p_max_bounces--;
+ if (motion==Vector2())
+ break;
+ }
+
+ return lv;
+}
+
+bool KinematicBody2D::is_move_and_slide_on_floor() const {
+
+ return move_and_slide_on_floor;
+}
+bool KinematicBody2D::is_move_and_slide_on_wall() const{
+
+ return move_and_slide_on_wall;
+}
+bool KinematicBody2D::is_move_and_slide_on_ceiling() const{
+
+ return move_and_slide_on_ceiling;
+}
+Array KinematicBody2D::get_move_and_slide_colliders() const{
+
+ return move_and_slide_colliders;
+}
+
Vector2 KinematicBody2D::move_to(const Vector2& p_position) {
return move(p_position-get_global_pos());
}
-bool KinematicBody2D::test_move(const Vector2& p_motion) {
+bool KinematicBody2D::test_move(const Matrix32& p_from,const Vector2& p_motion) {
ERR_FAIL_COND_V(!is_inside_tree(),false);
- return Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_motion,margin);
+ return Physics2DServer::get_singleton()->body_test_motion(get_rid(),p_from,p_motion,margin);
}
@@ -1300,8 +1383,9 @@ void KinematicBody2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("move","rel_vec"),&KinematicBody2D::move);
ObjectTypeDB::bind_method(_MD("move_to","position"),&KinematicBody2D::move_to);
+ ObjectTypeDB::bind_method(_MD("move_and_slide","linear_velocity","floor_normal","slope_stop_min_velocity","max_bounces"),&KinematicBody2D::move_and_slide,DEFVAL(Vector2(0,0)),DEFVAL(5),DEFVAL(4));
- ObjectTypeDB::bind_method(_MD("test_move","rel_vec"),&KinematicBody2D::test_move);
+ ObjectTypeDB::bind_method(_MD("test_move","from","rel_vec"),&KinematicBody2D::test_move);
ObjectTypeDB::bind_method(_MD("get_travel"),&KinematicBody2D::get_travel);
ObjectTypeDB::bind_method(_MD("revert_motion"),&KinematicBody2D::revert_motion);
@@ -1313,6 +1397,10 @@ void KinematicBody2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_collider:Object"),&KinematicBody2D::_get_collider);
ObjectTypeDB::bind_method(_MD("get_collider_shape"),&KinematicBody2D::get_collider_shape);
ObjectTypeDB::bind_method(_MD("get_collider_metadata:Variant"),&KinematicBody2D::get_collider_metadata);
+ ObjectTypeDB::bind_method(_MD("get_move_and_slide_colliders"),&KinematicBody2D::get_move_and_slide_colliders);
+ ObjectTypeDB::bind_method(_MD("is_move_and_slide_on_floor"),&KinematicBody2D::is_move_and_slide_on_floor);
+ ObjectTypeDB::bind_method(_MD("is_move_and_slide_on_ceiling"),&KinematicBody2D::is_move_and_slide_on_ceiling);
+ ObjectTypeDB::bind_method(_MD("is_move_and_slide_on_wall"),&KinematicBody2D::is_move_and_slide_on_wall);
ObjectTypeDB::bind_method(_MD("set_collision_margin","pixels"),&KinematicBody2D::set_collision_margin);
ObjectTypeDB::bind_method(_MD("get_collision_margin","pixels"),&KinematicBody2D::get_collision_margin);
@@ -1330,6 +1418,11 @@ KinematicBody2D::KinematicBody2D() : PhysicsBody2D(Physics2DServer::BODY_MODE_KI
collider_shape=0;
margin=0.08;
+
+ move_and_slide_on_floor=false;
+ move_and_slide_on_ceiling=false;
+ move_and_slide_on_wall=false;
+
}
KinematicBody2D::~KinematicBody2D() {
diff --git a/scene/2d/physics_body_2d.h b/scene/2d/physics_body_2d.h
index 5af65bff33..ea29d873bd 100644
--- a/scene/2d/physics_body_2d.h
+++ b/scene/2d/physics_body_2d.h
@@ -302,6 +302,12 @@ class KinematicBody2D : public PhysicsBody2D {
Variant collider_metadata;
Vector2 travel;
+ Vector2 move_and_slide_floor_velocity;
+ bool move_and_slide_on_floor;
+ bool move_and_slide_on_ceiling;
+ bool move_and_slide_on_wall;
+ Array move_and_slide_colliders;
+
Variant _get_collider() const;
_FORCE_INLINE_ bool _ignores_mode(Physics2DServer::BodyMode) const;
@@ -313,7 +319,7 @@ public:
Vector2 move(const Vector2& p_motion);
Vector2 move_to(const Vector2& p_position);
- bool test_move(const Vector2& p_motion);
+ bool test_move(const Matrix32 &p_from, const Vector2& p_motion);
bool is_colliding() const;
Vector2 get_travel() const;
@@ -329,6 +335,13 @@ public:
void set_collision_margin(float p_margin);
float get_collision_margin() const;
+ Vector2 move_and_slide(const Vector2& p_linear_velocity, const Vector2& p_floor_direction=Vector2(0,0), float p_slope_stop_min_velocity=5, int p_max_bounces=4);
+ bool is_move_and_slide_on_floor() const;
+ bool is_move_and_slide_on_wall() const;
+ bool is_move_and_slide_on_ceiling() const;
+ Array get_move_and_slide_colliders() const;
+
+
KinematicBody2D();
~KinematicBody2D();
diff --git a/scene/2d/ray_cast_2d.cpp b/scene/2d/ray_cast_2d.cpp
index 6cda52fa4e..b5d62adfb4 100644
--- a/scene/2d/ray_cast_2d.cpp
+++ b/scene/2d/ray_cast_2d.cpp
@@ -29,6 +29,7 @@
#include "ray_cast_2d.h"
#include "servers/physics_2d_server.h"
#include "collision_object_2d.h"
+#include "physics_body_2d.h"
void RayCast2D::set_cast_to(const Vector2& p_point) {
@@ -106,6 +107,30 @@ bool RayCast2D::is_enabled() const {
return enabled;
}
+void RayCast2D::set_exclude_parent_body(bool p_exclude_parent_body) {
+
+ if (exclude_parent_body==p_exclude_parent_body)
+ return;
+
+ exclude_parent_body=p_exclude_parent_body;
+
+ if (!is_inside_tree())
+ return;
+
+
+
+ if (get_parent()->cast_to<PhysicsBody2D>()) {
+ if (exclude_parent_body)
+ exclude.insert( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ else
+ exclude.erase( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ }
+}
+
+bool RayCast2D::get_exclude_parent_body() const{
+
+ return exclude_parent_body;
+}
void RayCast2D::_notification(int p_what) {
@@ -118,6 +143,12 @@ void RayCast2D::_notification(int p_what) {
else
set_fixed_process(false);
+ if (get_parent()->cast_to<PhysicsBody2D>()) {
+ if (exclude_parent_body)
+ exclude.insert( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ else
+ exclude.erase( get_parent()->cast_to<PhysicsBody2D>()->get_rid() );
+ }
} break;
case NOTIFICATION_EXIT_TREE: {
@@ -254,7 +285,11 @@ void RayCast2D::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_type_mask","mask"),&RayCast2D::set_type_mask);
ObjectTypeDB::bind_method(_MD("get_type_mask"),&RayCast2D::get_type_mask);
+ ObjectTypeDB::bind_method(_MD("set_exclude_parent_body","mask"),&RayCast2D::set_exclude_parent_body);
+ ObjectTypeDB::bind_method(_MD("get_exclude_parent_body"),&RayCast2D::get_exclude_parent_body);
+
ADD_PROPERTY(PropertyInfo(Variant::BOOL,"enabled"),_SCS("set_enabled"),_SCS("is_enabled"));
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL,"exclude_parent"),_SCS("set_exclude_parent_body"),_SCS("get_exclude_parent_body"));
ADD_PROPERTY(PropertyInfo(Variant::VECTOR2,"cast_to"),_SCS("set_cast_to"),_SCS("get_cast_to"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"layer_mask",PROPERTY_HINT_ALL_FLAGS),_SCS("set_layer_mask"),_SCS("get_layer_mask"));
ADD_PROPERTY(PropertyInfo(Variant::INT,"type_mask",PROPERTY_HINT_FLAGS,"Static,Kinematic,Rigid,Character,Area"),_SCS("set_type_mask"),_SCS("get_type_mask"));
@@ -269,4 +304,5 @@ RayCast2D::RayCast2D() {
layer_mask=1;
type_mask=Physics2DDirectSpaceState::TYPE_MASK_COLLISION;
cast_to=Vector2(0,50);
+ exclude_parent_body=true;
}
diff --git a/scene/2d/ray_cast_2d.h b/scene/2d/ray_cast_2d.h
index 54ec42c53e..e1caa8b63e 100644
--- a/scene/2d/ray_cast_2d.h
+++ b/scene/2d/ray_cast_2d.h
@@ -45,6 +45,7 @@ class RayCast2D : public Node2D {
Set<RID> exclude;
uint32_t layer_mask;
uint32_t type_mask;
+ bool exclude_parent_body;
Vector2 cast_to;
@@ -66,6 +67,9 @@ public:
void set_type_mask(uint32_t p_mask);
uint32_t get_type_mask() const;
+ void set_exclude_parent_body(bool p_exclude_parent_body);
+ bool get_exclude_parent_body() const;
+
bool is_colliding() const;
Object *get_collider() const;
int get_collider_shape() const;
diff --git a/scene/3d/immediate_geometry.cpp b/scene/3d/immediate_geometry.cpp
index e83fa69b4f..c9319904bd 100644
--- a/scene/3d/immediate_geometry.cpp
+++ b/scene/3d/immediate_geometry.cpp
@@ -102,7 +102,7 @@ DVector<Face3> ImmediateGeometry::get_faces(uint32_t p_usage_flags) const {
-void ImmediateGeometry::add_sphere(int p_lats,int p_lons,float p_radius) {
+void ImmediateGeometry::add_sphere(int p_lats, int p_lons, float p_radius, bool p_add_uv) {
for(int i = 1; i <= p_lats; i++) {
double lat0 = Math_PI * (-0.5 + (double) (i - 1) / p_lats);
@@ -132,6 +132,10 @@ void ImmediateGeometry::add_sphere(int p_lats,int p_lons,float p_radius) {
};
#define ADD_POINT(m_idx)\
+ if (p_add_uv) {\
+ set_uv(Vector2(Math::atan2(v[m_idx].x,v[m_idx].z)/Math_PI * 0.5+0.5,v[m_idx].y*0.5+0.5));\
+ set_tangent(Plane(Vector3(-v[m_idx].z,v[m_idx].y,v[m_idx].x),1)); \
+ }\
set_normal(v[m_idx]);\
add_vertex(v[m_idx]*p_radius);
@@ -156,7 +160,7 @@ void ImmediateGeometry::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_uv","uv"),&ImmediateGeometry::set_uv);
ObjectTypeDB::bind_method(_MD("set_uv2","uv"),&ImmediateGeometry::set_uv2);
ObjectTypeDB::bind_method(_MD("add_vertex","pos"),&ImmediateGeometry::add_vertex);
- ObjectTypeDB::bind_method(_MD("add_sphere","lats","lons","radius"),&ImmediateGeometry::add_sphere);
+ ObjectTypeDB::bind_method(_MD("add_sphere","lats","lons","radius","add_uv"),&ImmediateGeometry::add_sphere,DEFVAL(true));
ObjectTypeDB::bind_method(_MD("end"),&ImmediateGeometry::end);
ObjectTypeDB::bind_method(_MD("clear"),&ImmediateGeometry::clear);
diff --git a/scene/3d/immediate_geometry.h b/scene/3d/immediate_geometry.h
index c1cc4f87d5..fc7f4de634 100644
--- a/scene/3d/immediate_geometry.h
+++ b/scene/3d/immediate_geometry.h
@@ -62,7 +62,7 @@ public:
void clear();
- void add_sphere(int p_lats,int p_lons,float p_radius);
+ void add_sphere(int p_lats,int p_lons,float p_radius,bool p_add_uv=true);
diff --git a/scene/gui/base_button.cpp b/scene/gui/base_button.cpp
index 41d766c1b7..6479dd2d02 100644
--- a/scene/gui/base_button.cpp
+++ b/scene/gui/base_button.cpp
@@ -55,6 +55,8 @@ void BaseButton::_input_event(InputEvent p_event) {
if (b.pressed) {
+ emit_signal("button_down");
+
if (!toggle_mode) { //mouse press attempt
status.press_attempt=true;
@@ -86,6 +88,8 @@ void BaseButton::_input_event(InputEvent p_event) {
} else {
+ emit_signal("button_up");
+
if (status.press_attempt && status.pressing_inside) {
// released();
emit_signal("released");
@@ -100,9 +104,11 @@ void BaseButton::_input_event(InputEvent p_event) {
status.press_attempt=true;
status.pressing_inside=true;
+ emit_signal("button_down");
} else {
+ emit_signal("button_up");
if (status.press_attempt &&status.pressing_inside) {
@@ -173,6 +179,7 @@ void BaseButton::_input_event(InputEvent p_event) {
status.pressing_button++;
status.press_attempt=true;
status.pressing_inside=true;
+ emit_signal("button_down");
} else if (status.press_attempt) {
@@ -185,6 +192,8 @@ void BaseButton::_input_event(InputEvent p_event) {
status.press_attempt=false;
status.pressing_inside=false;
+ emit_signal("button_up");
+
if (!toggle_mode) { //mouse press attempt
pressed();
@@ -467,6 +476,8 @@ void BaseButton::_bind_methods() {
ADD_SIGNAL( MethodInfo("pressed" ) );
ADD_SIGNAL( MethodInfo("released" ) );
+ ADD_SIGNAL( MethodInfo("button_up") );
+ ADD_SIGNAL( MethodInfo("button_down") );
ADD_SIGNAL( MethodInfo("toggled", PropertyInfo( Variant::BOOL,"pressed") ) );
ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "disabled"), _SCS("set_disabled"), _SCS("is_disabled"));
ADD_PROPERTY( PropertyInfo( Variant::BOOL, "toggle_mode"), _SCS("set_toggle_mode"), _SCS("is_toggle_mode"));
diff --git a/scene/gui/control.cpp b/scene/gui/control.cpp
index 71ec508c81..bf35fd25bd 100644
--- a/scene/gui/control.cpp
+++ b/scene/gui/control.cpp
@@ -449,6 +449,13 @@ void Control::remove_child_notify(Node *p_child) {
}
+void Control::_update_canvas_item_transform() {
+
+ Matrix32 xform=Matrix32(data.rotation,get_pos());
+ xform.scale_basis(data.scale);
+ VisualServer::get_singleton()->canvas_item_set_transform(get_canvas_item(),xform);
+
+}
void Control::_notification(int p_notification) {
@@ -600,10 +607,9 @@ void Control::_notification(int p_notification) {
} break;
case NOTIFICATION_DRAW: {
- Matrix32 xform=Matrix32(data.rotation,get_pos());
- xform.scale_basis(data.scale);
- VisualServer::get_singleton()->canvas_item_set_transform(get_canvas_item(),xform);
- VisualServer::get_singleton()->canvas_item_set_custom_rect( get_canvas_item(),true, Rect2(Point2(),get_size()));
+ _update_canvas_item_transform();
+ VisualServer::get_singleton()->canvas_item_set_custom_rect( get_canvas_item(),!data.disable_visibility_clip, Rect2(Point2(),get_size()));
+
//emit_signal(SceneStringNames::get_singleton()->draw);
} break;
@@ -1272,17 +1278,24 @@ void Control::_size_changed() {
new_size_cache.x = MAX( minimum_size.x, new_size_cache.x );
new_size_cache.y = MAX( minimum_size.y, new_size_cache.y );
-
- if (new_pos_cache == data.pos_cache && new_size_cache == data.size_cache)
- return; // did not change, don't emit signal
+ bool pos_changed = new_pos_cache != data.pos_cache;
+ bool size_changed = new_size_cache != data.size_cache;
data.pos_cache=new_pos_cache;
data.size_cache=new_size_cache;
- notification(NOTIFICATION_RESIZED);
- item_rect_changed();
- _change_notify_margins();
- _notify_transform();
+ if (size_changed) {
+ notification(NOTIFICATION_RESIZED);
+ }
+ if (pos_changed || size_changed) {
+ item_rect_changed(size_changed);
+ _change_notify_margins();
+ _notify_transform();
+ }
+
+ if (pos_changed && !size_changed) {
+ _update_canvas_item_transform(); //move because it won't be updated
+ }
}
float Control::_get_parent_range(int p_idx) const {
@@ -2214,7 +2227,7 @@ void Control::grab_click_focus() {
void Control::minimum_size_changed() {
- if (!is_inside_tree())
+ if (!is_inside_tree() || data.block_minimum_size_adjust)
return;
if (data.pending_min_size_update)
@@ -2374,7 +2387,26 @@ Control *Control::get_root_parent_control() const {
return const_cast<Control*>(root);
}
+void Control::set_block_minimum_size_adjust(bool p_block) {
+ data.block_minimum_size_adjust=p_block;
+}
+
+bool Control::is_minimum_size_adjust_blocked() const {
+
+ return data.block_minimum_size_adjust;
+}
+
+void Control::set_disable_visibility_clip(bool p_ignore) {
+
+ data.disable_visibility_clip=p_ignore;
+ update();
+}
+
+bool Control::is_visibility_clip_disabled() const {
+
+ return data.disable_visibility_clip;
+}
void Control::_bind_methods() {
@@ -2603,6 +2635,8 @@ Control::Control() {
data.scale=Vector2(1,1);
data.drag_owner=0;
data.modal_frame=0;
+ data.block_minimum_size_adjust=false;
+ data.disable_visibility_clip=false;
for (int i=0;i<4;i++) {
diff --git a/scene/gui/control.h b/scene/gui/control.h
index b9ac53067a..558439efbf 100644
--- a/scene/gui/control.h
+++ b/scene/gui/control.h
@@ -128,6 +128,9 @@ private:
bool ignore_mouse;
bool stop_mouse;
+ bool block_minimum_size_adjust;
+ bool disable_visibility_clip;
+
Control *parent;
ObjectID drag_owner;
bool modal;
@@ -193,6 +196,7 @@ private:
void _unref_font( Ref<Font> p_sc);
void _font_changed();
+ void _update_canvas_item_transform();
friend class Viewport;
@@ -396,6 +400,13 @@ public:
Control *get_root_parent_control() const;
+
+ void set_block_minimum_size_adjust(bool p_block);
+ bool is_minimum_size_adjust_blocked() const;
+
+ void set_disable_visibility_clip(bool p_ignore);
+ bool is_visibility_clip_disabled() const;
+
Control();
~Control();
diff --git a/scene/gui/dialogs.cpp b/scene/gui/dialogs.cpp
index 4dbc106834..93e46da82b 100644
--- a/scene/gui/dialogs.cpp
+++ b/scene/gui/dialogs.cpp
@@ -399,8 +399,6 @@ AcceptDialog::AcceptDialog() {
add_child(label);
hbc = memnew( HBoxContainer );
- hbc->set_area_as_parent_rect(margin);
- hbc->set_anchor_and_margin(MARGIN_TOP,ANCHOR_END,button_margin);
add_child(hbc);
hbc->add_spacer();
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index 458e51b4fd..0de6add8cb 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -61,6 +61,8 @@ Error GraphEdit::connect_node(const StringName& p_from, int p_from_port,const St
c.to_port=p_to_port;
connections.push_back(c);
top_layer->update();
+ update();
+ connections_layer->update();
return OK;
}
@@ -85,6 +87,8 @@ void GraphEdit::disconnect_node(const StringName& p_from, int p_from_port,const
connections.erase(E);
top_layer->update();
+ update();
+ connections_layer->update();
return;
}
}
@@ -116,12 +120,13 @@ Vector2 GraphEdit::get_scroll_ofs() const{
void GraphEdit::_scroll_moved(double) {
- _update_scroll_offset();
- top_layer->update();
- if (is_using_snap()) {
- //must redraw grid
- update();
+
+ if (!awaiting_scroll_offset_update) {
+ call_deferred("_update_scroll_offset");
+ awaiting_scroll_offset_update=true;
}
+ top_layer->update();
+ update();
if (!setting_scroll_ofs) {//in godot, signals on change value are avoided as a convention
emit_signal("scroll_offset_changed",get_scroll_ofs());
@@ -130,6 +135,8 @@ void GraphEdit::_scroll_moved(double) {
void GraphEdit::_update_scroll_offset() {
+ set_block_minimum_size_adjust(true);
+
for(int i=0;i<get_child_count();i++) {
GraphNode *gn=get_child(i)->cast_to<GraphNode>();
@@ -139,9 +146,15 @@ void GraphEdit::_update_scroll_offset() {
Point2 pos=gn->get_offset()*zoom;
pos-=Point2(h_scroll->get_val(),v_scroll->get_val());
gn->set_pos(pos);
- gn->set_scale(Vector2(zoom,zoom));
+ if (gn->get_scale()!=Vector2(zoom,zoom)) {
+ gn->set_scale(Vector2(zoom,zoom));
+ }
}
+ connections_layer->set_pos(-Point2(h_scroll->get_val(),v_scroll->get_val())*zoom);
+ set_block_minimum_size_adjust(false);
+ awaiting_scroll_offset_update=false;
+
}
void GraphEdit::_update_scroll() {
@@ -150,6 +163,9 @@ void GraphEdit::_update_scroll() {
return;
updating=true;
+
+ set_block_minimum_size_adjust(true);
+
Rect2 screen;
for(int i=0;i<get_child_count();i++) {
@@ -184,7 +200,13 @@ void GraphEdit::_update_scroll() {
else
v_scroll->show();
- _update_scroll_offset();
+ set_block_minimum_size_adjust(false);
+
+ if (!awaiting_scroll_offset_update) {
+ call_deferred("_update_scroll_offset");
+ awaiting_scroll_offset_update=true;
+ }
+
updating=false;
}
@@ -194,6 +216,19 @@ void GraphEdit::_graph_node_raised(Node* p_gn) {
GraphNode *gn=p_gn->cast_to<GraphNode>();
ERR_FAIL_COND(!gn);
gn->raise();
+ if (gn->is_comment()) {
+ move_child(gn,0);
+ }
+ int first_not_comment=0;
+ for(int i=0;i<get_child_count();i++) {
+ GraphNode *gn=get_child(i)->cast_to<GraphNode>();
+ if (gn && !gn->is_comment()) {
+ first_not_comment=i;
+ break;
+ }
+ }
+
+ move_child(connections_layer,first_not_comment);
top_layer->raise();
emit_signal("node_selected",p_gn);
@@ -205,6 +240,8 @@ void GraphEdit::_graph_node_moved(Node *p_gn) {
GraphNode *gn=p_gn->cast_to<GraphNode>();
ERR_FAIL_COND(!gn);
top_layer->update();
+ update();
+ connections_layer->update();
}
void GraphEdit::add_child_notify(Node *p_child) {
@@ -261,6 +298,8 @@ void GraphEdit::_notification(int p_what) {
}
if (p_what==NOTIFICATION_DRAW) {
+
+
draw_style_box( get_stylebox("bg"),Rect2(Point2(),get_size()) );
VS::get_singleton()->canvas_item_set_clip(get_canvas_item(),true);
@@ -306,11 +345,14 @@ void GraphEdit::_notification(int p_what) {
}
+
+
}
if (p_what==NOTIFICATION_RESIZED) {
_update_scroll();
top_layer->update();
+
}
}
@@ -318,7 +360,8 @@ bool GraphEdit::_filter_input(const Point2& p_point) {
Ref<Texture> port =get_icon("port","GraphNode");
- float grab_r=port->get_width()*0.5;
+ float grab_r_extend = 2.0;
+ float grab_r=port->get_width()*0.5*grab_r_extend;
for(int i=get_child_count()-1;i>=0;i--) {
GraphNode *gn=get_child(i)->cast_to<GraphNode>();
@@ -337,8 +380,9 @@ bool GraphEdit::_filter_input(const Point2& p_point) {
for(int j=0;j<gn->get_connection_input_count();j++) {
Vector2 pos = gn->get_connection_input_pos(j)+gn->get_pos();
- if (pos.distance_to(p_point)<grab_r)
+ if (pos.distance_to(p_point)<grab_r) {
return true;
+ }
}
@@ -350,11 +394,13 @@ bool GraphEdit::_filter_input(const Point2& p_point) {
void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
+
+ float grab_r_extend = 2.0;
if (p_ev.type==InputEvent::MOUSE_BUTTON && p_ev.mouse_button.button_index==BUTTON_LEFT && p_ev.mouse_button.pressed) {
Ref<Texture> port =get_icon("port","GraphNode");
Vector2 mpos(p_ev.mouse_button.x,p_ev.mouse_button.y);
- float grab_r=port->get_width()*0.5;
+ float grab_r=port->get_width()*0.5*grab_r_extend;
for(int i=get_child_count()-1;i>=0;i--) {
GraphNode *gn=get_child(i)->cast_to<GraphNode>();
@@ -383,6 +429,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
connecting_color=to->cast_to<GraphNode>()->get_connection_input_color(E->get().to_port);
connecting_target=false;
connecting_to=pos;
+ just_disconected=true;
emit_signal("disconnection_request",E->get().from,E->get().from_port,E->get().to,E->get().to_port);
to = get_node(String(connecting_from)); //maybe it was erased
@@ -404,6 +451,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
connecting_color=gn->get_connection_output_color(j);
connecting_target=false;
connecting_to=pos;
+ just_disconected=false;
return;
}
@@ -432,6 +480,7 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
connecting_color=fr->cast_to<GraphNode>()->get_connection_output_color(E->get().from_port);
connecting_target=false;
connecting_to=pos;
+ just_disconected=true;
emit_signal("disconnection_request",E->get().from,E->get().from_port,E->get().to,E->get().to_port);
fr = get_node(String(connecting_from)); //maybe it was erased
@@ -454,6 +503,8 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
connecting_color=gn->get_connection_input_color(j);
connecting_target=false;
connecting_to=pos;
+ just_disconected=true;
+
return;
}
@@ -466,11 +517,11 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
connecting_to=Vector2(p_ev.mouse_motion.x,p_ev.mouse_motion.y);
connecting_target=false;
- top_layer->update();
+ top_layer->update();
Ref<Texture> port =get_icon("port","GraphNode");
Vector2 mpos(p_ev.mouse_button.x,p_ev.mouse_button.y);
- float grab_r=port->get_width()*0.5;
+ float grab_r=port->get_width()*0.5*grab_r_extend;
for(int i=get_child_count()-1;i>=0;i--) {
GraphNode *gn=get_child(i)->cast_to<GraphNode>();
@@ -526,18 +577,91 @@ void GraphEdit::_top_layer_input(const InputEvent& p_ev) {
}
emit_signal("connection_request",from,from_slot,to,to_slot);
+ } else if (!just_disconected) {
+ String from = connecting_from;
+ int from_slot = connecting_index;
+ Vector2 ofs = Vector2(p_ev.mouse_button.x,p_ev.mouse_button.y);
+ emit_signal("connection_to_empty",from,from_slot,ofs);
}
connecting=false;
top_layer->update();
+ update();
+ connections_layer->update();
}
}
-void GraphEdit::_draw_cos_line(const Vector2& p_from, const Vector2& p_to,const Color& p_color,const Color& p_to_color) {
+
+template<class Vector2>
+static _FORCE_INLINE_ Vector2 _bezier_interp(real_t t, Vector2 start, Vector2 control_1, Vector2 control_2, Vector2 end) {
+ /* Formula from Wikipedia article on Bezier curves. */
+ real_t omt = (1.0 - t);
+ real_t omt2 = omt*omt;
+ real_t omt3 = omt2*omt;
+ real_t t2 = t*t;
+ real_t t3 = t2*t;
+
+ return start * omt3
+ + control_1 * omt2 * t * 3.0
+ + control_2 * omt * t2 * 3.0
+ + end * t3;
+}
+
+
+void GraphEdit::_bake_segment2d(CanvasItem* p_where,float p_begin, float p_end,const Vector2& p_a,const Vector2& p_out,const Vector2& p_b, const Vector2& p_in,int p_depth,int p_min_depth,int p_max_depth,float p_tol,const Color& p_color,const Color& p_to_color,int &lines) const {
+
+ float mp = p_begin+(p_end-p_begin)*0.5;
+ Vector2 beg = _bezier_interp(p_begin,p_a,p_a+p_out,p_b+p_in,p_b);
+ Vector2 mid = _bezier_interp(mp,p_a,p_a+p_out,p_b+p_in,p_b);
+ Vector2 end = _bezier_interp(p_end,p_a,p_a+p_out,p_b+p_in,p_b);
+
+ Vector2 na = (mid-beg).normalized();
+ Vector2 nb = (end-mid).normalized();
+ float dp = Math::rad2deg(Math::acos(na.dot(nb)));
+
+ if (p_depth>=p_min_depth && ( dp<p_tol || p_depth>=p_max_depth)) {
+
+
+
+ p_where->draw_line(beg,end,p_color.linear_interpolate(p_to_color,mp),2,true);
+ lines++;
+ } else {
+ _bake_segment2d(p_where,p_begin,mp,p_a,p_out,p_b,p_in,p_depth+1,p_min_depth,p_max_depth,p_tol,p_color,p_to_color,lines);
+ _bake_segment2d(p_where,mp,p_end,p_a,p_out,p_b,p_in,p_depth+1,p_min_depth,p_max_depth,p_tol,p_color,p_to_color,lines);
+ }
+}
+
+
+void GraphEdit::_draw_cos_line(CanvasItem* p_where,const Vector2& p_from, const Vector2& p_to,const Color& p_color,const Color& p_to_color) {
+
+
+#if 1
+
+ //cubic bezier code
+ float diff = p_to.x-p_from.x;
+ float cp_offset;
+ int cp_len = get_constant("bezier_len_pos");
+ int cp_neg_len = get_constant("bezier_len_neg");
+
+ if (diff>0) {
+ cp_offset=MAX(cp_len,diff*0.5);
+ } else {
+ cp_offset=MAX(MIN(cp_len-diff,cp_neg_len),-diff*0.5);
+ }
+
+ Vector2 c1 = Vector2(cp_offset,0);
+ Vector2 c2 = Vector2(-cp_offset,0);
+
+ int lines=0;
+ _bake_segment2d(p_where,0,1,p_from,c1,p_to,c2,0,3,9,8,p_color,p_to_color,lines);
+
+
+#else
static const int steps = 20;
+ //old cosine code
Rect2 r;
r.pos=p_from;
r.expand_to(p_to);
@@ -547,6 +671,7 @@ void GraphEdit::_draw_cos_line(const Vector2& p_from, const Vector2& p_to,const
Vector2 prev;
for(int i=0;i<=steps;i++) {
+
float d = i/float(steps);
float c=-Math::cos(d*Math_PI) * 0.5+0.5;
if (flip)
@@ -555,11 +680,65 @@ void GraphEdit::_draw_cos_line(const Vector2& p_from, const Vector2& p_to,const
if (i>0) {
- top_layer->draw_line(prev,p,p_color.linear_interpolate(p_to_color,d),2);
+ p_where->draw_line(prev,p,p_color.linear_interpolate(p_to_color,d),2);
}
prev=p;
}
+#endif
+}
+
+
+void GraphEdit::_connections_layer_draw() {
+
+
+ {
+ //draw connections
+ List<List<Connection>::Element* > to_erase;
+ for(List<Connection>::Element *E=connections.front();E;E=E->next()) {
+
+ NodePath fromnp(E->get().from);
+
+ Node * from = get_node(fromnp);
+ if (!from) {
+ to_erase.push_back(E);
+ continue;
+ }
+
+ GraphNode *gfrom = from->cast_to<GraphNode>();
+
+ if (!gfrom) {
+ to_erase.push_back(E);
+ continue;
+ }
+
+ NodePath tonp(E->get().to);
+ Node * to = get_node(tonp);
+ if (!to) {
+ to_erase.push_back(E);
+ continue;
+ }
+
+ GraphNode *gto = to->cast_to<GraphNode>();
+
+ if (!gto) {
+ to_erase.push_back(E);
+ continue;
+ }
+
+ Vector2 frompos=gfrom->get_connection_output_pos(E->get().from_port)+gfrom->get_offset();
+ Color color = gfrom->get_connection_output_color(E->get().from_port);
+ Vector2 topos=gto->get_connection_input_pos(E->get().to_port)+gto->get_offset();
+ Color tocolor = gto->get_connection_input_color(E->get().to_port);
+ _draw_cos_line(connections_layer,frompos,topos,color,tocolor);
+
+ }
+
+ while(to_erase.size()) {
+ connections.erase(to_erase.front()->get());
+ to_erase.pop_front();
+ }
+ }
}
void GraphEdit::_top_layer_draw() {
@@ -589,53 +768,14 @@ void GraphEdit::_top_layer_draw() {
col.g+=0.4;
col.b+=0.4;
}
- _draw_cos_line(pos,topos,col,col);
- }
- List<List<Connection>::Element* > to_erase;
- for(List<Connection>::Element *E=connections.front();E;E=E->next()) {
-
- NodePath fromnp(E->get().from);
-
- Node * from = get_node(fromnp);
- if (!from) {
- to_erase.push_back(E);
- continue;
- }
-
- GraphNode *gfrom = from->cast_to<GraphNode>();
-
- if (!gfrom) {
- to_erase.push_back(E);
- continue;
- }
-
- NodePath tonp(E->get().to);
- Node * to = get_node(tonp);
- if (!to) {
- to_erase.push_back(E);
- continue;
- }
-
- GraphNode *gto = to->cast_to<GraphNode>();
-
- if (!gto) {
- to_erase.push_back(E);
- continue;
+ if (!connecting_out) {
+ SWAP(pos,topos);
}
-
- Vector2 frompos=gfrom->get_connection_output_pos(E->get().from_port)+gfrom->get_pos();
- Color color = gfrom->get_connection_output_color(E->get().from_port);
- Vector2 topos=gto->get_connection_input_pos(E->get().to_port)+gto->get_pos();
- Color tocolor = gto->get_connection_input_color(E->get().to_port);
- _draw_cos_line(frompos,topos,color,tocolor);
-
+ _draw_cos_line(top_layer,pos,topos,col,col);
}
- while(to_erase.size()) {
- connections.erase(to_erase.front()->get());
- to_erase.pop_front();
- }
+
if (box_selecting)
top_layer->draw_rect(box_selecting_rect,Color(0.7,0.7,1.0,0.3));
}
@@ -765,6 +905,8 @@ void GraphEdit::_input_event(const InputEvent& p_ev) {
dragging = false;
top_layer->update();
+ update();
+ connections_layer->update();
}
if (b.button_index==BUTTON_LEFT && b.pressed) {
@@ -775,6 +917,10 @@ void GraphEdit::_input_event(const InputEvent& p_ev) {
gn=get_child(i)->cast_to<GraphNode>();
if (gn) {
+
+ if (gn->is_resizing())
+ continue;
+
Rect2 r = gn->get_rect();
r.size*=zoom;
if (r.has_point(get_local_mouse_pos()))
@@ -886,6 +1032,7 @@ void GraphEdit::clear_connections() {
connections.clear();
update();
+ connections_layer->update();
}
void GraphEdit::set_zoom(float p_zoom) {
@@ -1019,6 +1166,7 @@ void GraphEdit::set_use_snap(bool p_enable) {
snap_button->set_pressed(p_enable);
update();
+
}
bool GraphEdit::is_using_snap() const{
@@ -1082,6 +1230,10 @@ void GraphEdit::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_snap_value_changed"),&GraphEdit::_snap_value_changed);
ObjectTypeDB::bind_method(_MD("_input_event"),&GraphEdit::_input_event);
+ ObjectTypeDB::bind_method(_MD("_update_scroll_offset"),&GraphEdit::_update_scroll_offset);
+ ObjectTypeDB::bind_method(_MD("_connections_layer_draw"),&GraphEdit::_connections_layer_draw);
+
+
ObjectTypeDB::bind_method(_MD("set_selected","node"),&GraphEdit::set_selected);
@@ -1090,6 +1242,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("delete_nodes_request"));
ADD_SIGNAL(MethodInfo("_begin_node_move"));
ADD_SIGNAL(MethodInfo("_end_node_move"));
@@ -1101,6 +1254,7 @@ void GraphEdit::_bind_methods() {
GraphEdit::GraphEdit() {
set_focus_mode(FOCUS_ALL);
+ awaiting_scroll_offset_update=false;
top_layer=NULL;
top_layer=memnew(GraphEditFilter(this));
add_child(top_layer);
@@ -1110,6 +1264,12 @@ GraphEdit::GraphEdit() {
top_layer->set_stop_mouse(false);
top_layer->connect("input_event",this,"_top_layer_input");
+ connections_layer = memnew( Control );
+ add_child(connections_layer);
+ connections_layer->connect("draw",this,"_connections_layer_draw");
+ connections_layer->set_name("CLAYER");
+ connections_layer->set_disable_visibility_clip(true); // so it can draw freely and be offseted
+
h_scroll = memnew(HScrollBar);
h_scroll->set_name("_h_scroll");
top_layer->add_child(h_scroll);
@@ -1172,5 +1332,8 @@ GraphEdit::GraphEdit() {
zoom_hb->add_child(snap_amount);
setting_scroll_ofs=false;
+ just_disconected=false;
+
+
}
diff --git a/scene/gui/graph_edit.h b/scene/gui/graph_edit.h
index 6d35e1518f..c5174f6699 100644
--- a/scene/gui/graph_edit.h
+++ b/scene/gui/graph_edit.h
@@ -92,6 +92,7 @@ private:
Vector2 connecting_to;
String connecting_target_to;
int connecting_target_index;
+ bool just_disconected;
bool dragging;
bool just_selected;
@@ -110,9 +111,12 @@ private:
bool setting_scroll_ofs;
bool right_disconnects;
bool updating;
+ bool awaiting_scroll_offset_update;
List<Connection> connections;
- void _draw_cos_line(const Vector2& p_from, const Vector2& p_to, const Color& p_color, const Color &p_to_color);
+ void _bake_segment2d(CanvasItem* p_where,float p_begin, float p_end, const Vector2& p_a, const Vector2& p_out, const Vector2& p_b, const Vector2& p_in, int p_depth, int p_min_depth, int p_max_depth, float p_tol, const Color& p_color, const Color& p_to_color, int &lines) const;
+
+ void _draw_cos_line(CanvasItem* p_where,const Vector2& p_from, const Vector2& p_to, const Color& p_color, const Color &p_to_color);
void _graph_node_raised(Node* p_gn);
void _graph_node_moved(Node *p_gn);
@@ -121,13 +125,19 @@ private:
void _scroll_moved(double);
void _input_event(const InputEvent& p_ev);
+ Control *connections_layer;
GraphEditFilter *top_layer;
void _top_layer_input(const InputEvent& p_ev);
void _top_layer_draw();
+ void _connections_layer_draw();
void _update_scroll_offset();
Array _get_connection_list() const;
+ bool lines_on_bg;
+
+
+
struct ConnType {
union {
@@ -200,6 +210,7 @@ public:
int get_snap() const;
void set_snap(int p_snap);
+
GraphEdit();
};
diff --git a/scene/gui/graph_node.cpp b/scene/gui/graph_node.cpp
index 66d2725ad2..da298a795a 100644
--- a/scene/gui/graph_node.cpp
+++ b/scene/gui/graph_node.cpp
@@ -183,16 +183,45 @@ void GraphNode::_resort() {
}
+bool GraphNode::has_point(const Point2& p_point) const {
+
+ if (comment) {
+ Ref<StyleBox> comment = get_stylebox("comment");
+ Ref<Texture> resizer =get_icon("resizer");
+
+ if (Rect2(get_size()-resizer->get_size(), resizer->get_size()).has_point(p_point)) {
+ return true;
+ }
+ if (Rect2(0,0,get_size().width,comment->get_margin(MARGIN_TOP)).has_point(p_point)) {
+ return true;
+ }
+
+ return false;
+
+ } else {
+ return Control::has_point(p_point);
+ }
+}
void GraphNode::_notification(int p_what) {
if (p_what==NOTIFICATION_DRAW) {
- Ref<StyleBox> sb=get_stylebox(selected ? "selectedframe" : "frame");
+ Ref<StyleBox> sb;
+
+ if (comment) {
+ sb = get_stylebox( selected? "commentfocus" : "comment");
+
+ } else {
+
+ sb = get_stylebox( selected ? "selectedframe" : "frame");
+ }
+
sb=sb->duplicate();
sb->call("set_modulate",modulate);
Ref<Texture> port =get_icon("port");
Ref<Texture> close =get_icon("close");
+ Ref<Texture> resizer =get_icon("resizer");
int close_offset = get_constant("close_offset");
Ref<Font> title_font = get_font("title_font");
int title_offset = get_constant("title_offset");
@@ -258,6 +287,11 @@ void GraphNode::_notification(int p_what) {
}
}
+
+
+ if (resizeable) {
+ draw_texture(resizer,get_size()-resizer->get_size());
+ }
}
if (p_what==NOTIFICATION_SORT_CHILDREN) {
@@ -594,19 +628,51 @@ void GraphNode::_input_event(const InputEvent& p_ev) {
ERR_EXPLAIN("GraphNode must be the child of a GraphEdit node.");
ERR_FAIL_COND(get_parent_control() == NULL);
- get_parent_control()->grab_focus();
+ print_line("INPUT EVENT BUTTON");
if(p_ev.mouse_button.pressed && p_ev.mouse_button.button_index==BUTTON_LEFT) {
Vector2 mpos = Vector2(p_ev.mouse_button.x,p_ev.mouse_button.y);
if (close_rect.size!=Size2() && close_rect.has_point(mpos)) {
emit_signal("close_request");
+ accept_event();
return;
}
+
+ Ref<Texture> resizer =get_icon("resizer");
+
+ if (resizeable && mpos.x > get_size().x-resizer->get_width() && mpos.y > get_size().y-resizer->get_height()) {
+
+ resizing=true;
+ resizing_from=mpos;
+ resizing_from_size=get_size();
+ accept_event();
+ return;
+ }
+
+ //send focus to parent
emit_signal("raise_request");
+ get_parent_control()->grab_focus();
+
+ }
+
+ if(!p_ev.mouse_button.pressed && p_ev.mouse_button.button_index==BUTTON_LEFT) {
+ resizing=false;
}
+
+ }
+
+
+ if (resizing && p_ev.type==InputEvent::MOUSE_MOTION) {
+ Vector2 mpos = Vector2(p_ev.mouse_motion.x,p_ev.mouse_motion.y);
+
+ Vector2 diff = mpos - resizing_from;
+
+ emit_signal("resize_request",resizing_from_size+diff);
+
}
+
}
void GraphNode::set_modulate(const Color &p_color) {
@@ -630,6 +696,30 @@ GraphNode::Overlay GraphNode::get_overlay() const{
return overlay;
}
+void GraphNode::set_comment(bool p_enable) {
+
+ comment=p_enable;
+ update();
+}
+
+bool GraphNode::is_comment() const{
+
+ return comment;
+}
+
+
+void GraphNode::set_resizeable(bool p_enable) {
+
+ resizeable=p_enable;
+ update();
+}
+
+bool GraphNode::is_resizeable() const{
+
+ return resizeable;
+}
+
+
void GraphNode::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_title","title"),&GraphNode::set_title);
@@ -649,6 +739,12 @@ void GraphNode::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_offset","offset"),&GraphNode::set_offset);
ObjectTypeDB::bind_method(_MD("get_offset"),&GraphNode::get_offset);
+ ObjectTypeDB::bind_method(_MD("set_comment","comment"),&GraphNode::set_comment);
+ ObjectTypeDB::bind_method(_MD("is_comment"),&GraphNode::is_comment);
+
+ ObjectTypeDB::bind_method(_MD("set_resizeable","resizeable"),&GraphNode::set_resizeable);
+ ObjectTypeDB::bind_method(_MD("is_resizeable"),&GraphNode::is_resizeable);
+
ObjectTypeDB::bind_method(_MD("get_connection_output_count"),&GraphNode::get_connection_output_count);
ObjectTypeDB::bind_method(_MD("get_connection_input_count"),&GraphNode::get_connection_input_count);
@@ -675,6 +771,7 @@ void GraphNode::_bind_methods() {
ADD_SIGNAL(MethodInfo("dragged",PropertyInfo(Variant::VECTOR2,"from"),PropertyInfo(Variant::VECTOR2,"to")));
ADD_SIGNAL(MethodInfo("raise_request"));
ADD_SIGNAL(MethodInfo("close_request"));
+ ADD_SIGNAL(MethodInfo("resize_request",PropertyInfo(Variant::VECTOR2,"new_minsize")));
BIND_CONSTANT( OVERLAY_DISABLED );
BIND_CONSTANT( OVERLAY_BREAKPOINT );
@@ -688,4 +785,7 @@ GraphNode::GraphNode() {
connpos_dirty=true;
set_stop_mouse(false);
modulate=Color(1,1,1,1);
+ comment=false;
+ resizeable=false;
+ resizing=false;
}
diff --git a/scene/gui/graph_node.h b/scene/gui/graph_node.h
index e87fb15b93..cbfd34f556 100644
--- a/scene/gui/graph_node.h
+++ b/scene/gui/graph_node.h
@@ -60,6 +60,12 @@ private:
String title;
bool show_close;
Vector2 offset;
+ bool comment;
+ bool resizeable;
+
+ bool resizing;
+ Vector2 resizing_from;
+ Vector2 resizing_from_size;
Rect2 close_rect;
@@ -87,6 +93,9 @@ private:
Overlay overlay;
Color modulate;
+
+ bool has_point(const Point2& p_point) const;
+
protected:
@@ -144,8 +153,16 @@ public:
void set_overlay(Overlay p_overlay);
Overlay get_overlay() const;
+ void set_comment(bool p_enable);
+ bool is_comment() const;
+
+ void set_resizeable(bool p_enable);
+ bool is_resizeable() const;
+
virtual Size2 get_minimum_size() const;
+ bool is_resizing() const { return resizing; }
+
GraphNode();
};
diff --git a/scene/gui/item_list.cpp b/scene/gui/item_list.cpp
index 105d919338..63902ef815 100644
--- a/scene/gui/item_list.cpp
+++ b/scene/gui/item_list.cpp
@@ -40,6 +40,7 @@ void ItemList::add_item(const String& p_item,const Ref<Texture>& p_texture,bool
item.selectable=p_selectable;
item.selected=false;
item.disabled=false;
+ item.tooltip_enabled=true;
item.custom_bg=Color(0,0,0,0);
items.push_back(item);
@@ -57,6 +58,7 @@ void ItemList::add_icon_item(const Ref<Texture>& p_item,bool p_selectable){
item.selectable=p_selectable;
item.selected=false;
item.disabled=false;
+ item.tooltip_enabled=true;
item.custom_bg=Color(0,0,0,0);
items.push_back(item);
@@ -82,6 +84,16 @@ String ItemList::get_item_text(int p_idx) const{
}
+void ItemList::set_item_tooltip_enabled(int p_idx, const bool p_enabled) {
+ ERR_FAIL_INDEX(p_idx,items.size());
+ items[p_idx].tooltip_enabled = p_enabled;
+}
+
+bool ItemList::is_item_tooltip_enabled(int p_idx) const {
+ ERR_FAIL_INDEX_V(p_idx,items.size(), false);
+ return items[p_idx].tooltip_enabled;
+}
+
void ItemList::set_item_tooltip(int p_idx,const String& p_tooltip){
ERR_FAIL_INDEX(p_idx,items.size());
@@ -1198,6 +1210,9 @@ String ItemList::get_tooltip(const Point2& p_pos) const {
int closest = get_item_at_pos(p_pos);
if (closest!=-1) {
+ if (!items[closest].tooltip_enabled) {
+ return "";
+ }
if (items[closest].tooltip!="") {
return items[closest].tooltip;
}
@@ -1294,6 +1309,9 @@ void ItemList::_bind_methods(){
ObjectTypeDB::bind_method(_MD("set_item_custom_bg_color","idx","custom_bg_color"),&ItemList::set_item_custom_bg_color);
ObjectTypeDB::bind_method(_MD("get_item_custom_bg_color","idx"),&ItemList::get_item_custom_bg_color);
+ ObjectTypeDB::bind_method(_MD("set_item_tooltip_enabled","idx","enable"),&ItemList::set_item_tooltip_enabled);
+ ObjectTypeDB::bind_method(_MD("is_item_tooltip_enabled","idx"),&ItemList::is_item_tooltip_enabled);
+
ObjectTypeDB::bind_method(_MD("set_item_tooltip","idx","tooltip"),&ItemList::set_item_tooltip);
ObjectTypeDB::bind_method(_MD("get_item_tooltip","idx"),&ItemList::get_item_tooltip);
diff --git a/scene/gui/item_list.h b/scene/gui/item_list.h
index e1902d1c1f..91c74b5291 100644
--- a/scene/gui/item_list.h
+++ b/scene/gui/item_list.h
@@ -56,6 +56,7 @@ private:
bool selectable;
bool selected;
bool disabled;
+ bool tooltip_enabled;
Variant metadata;
String tooltip;
Color custom_bg;
@@ -135,6 +136,9 @@ public:
void set_item_tag_icon(int p_idx,const Ref<Texture>& p_tag_icon);
Ref<Texture> get_item_tag_icon(int p_idx) const;
+ void set_item_tooltip_enabled(int p_idx, const bool p_enabled);
+ bool is_item_tooltip_enabled(int p_idx) const;
+
void set_item_tooltip(int p_idx,const String& p_tooltip);
String get_item_tooltip(int p_idx) const;
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index fcea12fd6b..90a8af9238 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -193,8 +193,8 @@ void LineEdit::_input_event(InputEvent p_event) {
}
set_cursor_pos(0);
- emit_signal("text_changed",text);
- _change_notify("text");
+ _text_changed();
+
}
@@ -215,8 +215,7 @@ void LineEdit::_input_event(InputEvent p_event) {
selection_clear();
undo_text = text;
text = text.substr(0,cursor_pos);
- emit_signal("text_changed",text);
- _change_notify("text");
+ _text_changed();
}
} break;
@@ -475,9 +474,7 @@ void LineEdit::_input_event(InputEvent p_event) {
selection_delete();
CharType ucodestr[2]={(CharType)k.unicode,0};
append_at_cursor(ucodestr);
- emit_signal("text_changed",text);
- _change_notify("text");
-
+ _text_changed();
accept_event();
}
@@ -725,8 +722,7 @@ void LineEdit::paste_text() {
if(selection.enabled) selection_delete();
append_at_cursor(paste_buffer);
- emit_signal("text_changed",text);
- _change_notify("text");
+ _text_changed();
}
@@ -750,9 +746,7 @@ void LineEdit::undo() {
set_cursor_pos(old_cursor_pos);
}
- emit_signal("text_changed",text);
- _change_notify("text");
-
+ _text_changed();
}
void LineEdit::shift_selection_check_pre(bool p_shift) {
@@ -806,16 +800,6 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) {
pixel_ofs+=char_w;
if (pixel_ofs > p_x) { //found what we look for
-
-
- if ( (pixel_ofs-p_x) < (char_w >> 1 ) ) {
-
- ofs+=1;
- } else if ( (pixel_ofs-p_x) > (char_w >> 1 ) ) {
-
- ofs-=1;
- }
-
break;
}
@@ -891,8 +875,7 @@ void LineEdit::delete_char() {
// set_window_pos(cursor_pos-get_window_length());
}
- emit_signal("text_changed",text);
- _change_notify("text");
+ _text_changed();
}
void LineEdit::delete_text(int p_from_column, int p_to_column) {
@@ -924,8 +907,7 @@ void LineEdit::delete_text(int p_from_column, int p_to_column) {
window_pos=cursor_pos;
}
- emit_signal("text_changed",text);
- _change_notify("text");
+ _text_changed();
}
void LineEdit::set_text(String p_text) {
@@ -940,8 +922,7 @@ void LineEdit::set_text(String p_text) {
void LineEdit::clear() {
clear_internal();
- emit_signal("text_changed",text);
- _change_notify("text");
+ _text_changed();
}
String LineEdit::get_text() const {
@@ -1080,7 +1061,17 @@ Size2 LineEdit::get_minimum_size() const {
Size2 min=style->get_minimum_size();
min.height+=font->get_height();
- min.width+=get_constant("minimum_spaces")*font->get_char_size(' ').x;
+
+ //minimum size of text
+ int space_size = font->get_char_size(' ').x;
+ int mstext = get_constant("minimum_spaces")*space_size;
+
+ if (expand_to_text_length) {
+ mstext=MAX(mstext,font->get_string_size(text).x+space_size); //add a spce because some fonts are too exact
+ }
+
+ min.width+=mstext;
+
return min;
}
@@ -1236,6 +1227,29 @@ PopupMenu *LineEdit::get_menu() const {
}
#endif
+
+void LineEdit::set_expand_to_text_length(bool p_enabled) {
+
+ expand_to_text_length = p_enabled;
+ minimum_size_changed();
+}
+
+bool LineEdit::get_expand_to_text_length() const{
+
+ return expand_to_text_length;
+}
+
+
+void LineEdit::_text_changed() {
+
+ if (expand_to_text_length)
+ minimum_size_changed();
+
+ emit_signal("text_changed",text);
+ _change_notify("text");
+
+}
+
void LineEdit::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_toggle_draw_caret"),&LineEdit::_toggle_draw_caret);
@@ -1258,7 +1272,9 @@ void LineEdit::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_placeholder_alpha"),&LineEdit::get_placeholder_alpha);
ObjectTypeDB::bind_method(_MD("set_cursor_pos","pos"),&LineEdit::set_cursor_pos);
ObjectTypeDB::bind_method(_MD("get_cursor_pos"),&LineEdit::get_cursor_pos);
- ObjectTypeDB::bind_method(_MD("cursor_set_blink_enabled", "enable"),&LineEdit::cursor_set_blink_enabled);
+ ObjectTypeDB::bind_method(_MD("set_expand_to_text_length","enabled"),&LineEdit::set_expand_to_text_length);
+ ObjectTypeDB::bind_method(_MD("get_expand_to_text_length"),&LineEdit::get_expand_to_text_length);
+ ObjectTypeDB::bind_method(_MD("cursor_set_blink_enabled", "enabled"),&LineEdit::cursor_set_blink_enabled);
ObjectTypeDB::bind_method(_MD("cursor_get_blink_enabled"),&LineEdit::cursor_get_blink_enabled);
ObjectTypeDB::bind_method(_MD("cursor_set_blink_speed", "blink_speed"),&LineEdit::cursor_set_blink_speed);
ObjectTypeDB::bind_method(_MD("cursor_get_blink_speed"),&LineEdit::cursor_get_blink_speed);
@@ -1296,6 +1312,7 @@ void LineEdit::_bind_methods() {
ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "max_length" ), _SCS("set_max_length"),_SCS("get_max_length") );
ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "editable" ), _SCS("set_editable"),_SCS("is_editable") );
ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "secret" ), _SCS("set_secret"),_SCS("is_secret") );
+ ADD_PROPERTYNO( PropertyInfo( Variant::BOOL, "expand_to_len" ), _SCS("set_expand_to_text_length"),_SCS("get_expand_to_text_length") );
ADD_PROPERTY( PropertyInfo( Variant::INT,"focus_mode", PROPERTY_HINT_ENUM, "None,Click,All" ), _SCS("set_focus_mode"), _SCS("get_focus_mode") );
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "caret/caret_blink"), _SCS("cursor_set_blink_enabled"), _SCS("cursor_get_blink_enabled"));;
ADD_PROPERTYNZ(PropertyInfo(Variant::REAL, "caret/caret_blink_speed",PROPERTY_HINT_RANGE,"0.1,10,0.1"), _SCS("cursor_set_blink_speed"),_SCS("cursor_get_blink_speed") );
@@ -1337,7 +1354,7 @@ LineEdit::LineEdit() {
menu->add_separator();
menu->add_item(TTR("Undo"),MENU_UNDO,KEY_MASK_CMD|KEY_Z);
menu->connect("item_pressed",this,"menu_option");
-
+ expand_to_text_length=false;
}
diff --git a/scene/gui/line_edit.h b/scene/gui/line_edit.h
index 112e4ad55e..47d5706bbe 100644
--- a/scene/gui/line_edit.h
+++ b/scene/gui/line_edit.h
@@ -90,6 +90,11 @@ private:
} selection;
Timer *caret_blink_timer;
+
+
+ void _text_changed();
+ bool expand_to_text_length;
+
bool caret_blink_enabled;
bool draw_caret;
bool window_has_focus;
@@ -169,6 +174,9 @@ public:
virtual Size2 get_minimum_size() const;
+ void set_expand_to_text_length(bool p_len);
+ bool get_expand_to_text_length() const;
+
virtual bool is_text_field() const;
LineEdit();
~LineEdit();
diff --git a/scene/gui/slider.cpp b/scene/gui/slider.cpp
index d5d14ad649..3b9ca40bd8 100644
--- a/scene/gui/slider.cpp
+++ b/scene/gui/slider.cpp
@@ -47,12 +47,15 @@ void Slider::_input_event(InputEvent p_event) {
if (mb.button_index==BUTTON_LEFT) {
if (mb.pressed) {
+ Ref<Texture> grabber = get_icon(mouse_inside||has_focus()?"grabber_hilite":"grabber");
grab.pos=orientation==VERTICAL?mb.y:mb.x;
- double max = orientation==VERTICAL ? get_size().height : get_size().width ;
+ double grab_width = (double)grabber->get_size().width;
+ double grab_height = (double)grabber->get_size().height;
+ double max = orientation==VERTICAL ? get_size().height - grab_height : get_size().width - grab_width;
if (orientation==VERTICAL)
- set_unit_value( 1 - ((double)grab.pos / max) );
+ set_unit_value( 1 - (((double)grab.pos - (grab_height / 2.0)) / max) );
else
- set_unit_value((double)grab.pos / max);
+ set_unit_value(((double)grab.pos - (grab_width/2.0)) / max);
grab.active=true;
grab.uvalue=get_unit_value();
} else {
diff --git a/scene/gui/texture_progress.cpp b/scene/gui/texture_progress.cpp
index 923a35031c..2c576b6ba5 100644
--- a/scene/gui/texture_progress.cpp
+++ b/scene/gui/texture_progress.cpp
@@ -297,6 +297,7 @@ void TextureProgress::_bind_methods() {
TextureProgress::TextureProgress()
{
mode=FILL_LEFT_TO_RIGHT;
+ rad_init_angle=0;
rad_center_off=Point2();
rad_max_degrees=360;
}
diff --git a/scene/gui/tree.cpp b/scene/gui/tree.cpp
index 487f62ed44..20794b2faa 100644
--- a/scene/gui/tree.cpp
+++ b/scene/gui/tree.cpp
@@ -171,6 +171,21 @@ String TreeItem::get_text(int p_column) const {
}
+void TreeItem::set_suffix(int p_column,String p_suffix) {
+
+ ERR_FAIL_INDEX( p_column, cells.size() );
+ cells[p_column].suffix=p_suffix;
+
+ _changed_notify(p_column);
+
+}
+
+String TreeItem::get_suffix(int p_column) const {
+
+ ERR_FAIL_INDEX_V( p_column, cells.size(), "" );
+ return cells[p_column].suffix;
+
+}
void TreeItem::set_icon(int p_column,const Ref<Texture>& p_icon) {
@@ -927,8 +942,12 @@ void Tree::draw_item_rect(const TreeItem::Cell& p_cell,const Rect2i& p_rect,cons
Ref<Font> font = cache.font;
+ String text = p_cell.text;
+ if (p_cell.suffix!=String())
+ text+=" "+p_cell.suffix;
+
rect.pos.y+=Math::floor((rect.size.y-font->get_height())/2.0) +font->get_ascent();
- font->draw(ci,rect.pos,p_cell.text,p_color,rect.size.x);
+ font->draw(ci,rect.pos,text,p_color,rect.size.x);
}
@@ -1072,11 +1091,21 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2&
if (p_item->cells[i].selected && select_mode!=SELECT_ROW) {
Rect2i r(item_rect.pos,item_rect.size);
+ if (p_item->cells[i].text.size() > 0){
+ float icon_width = p_item->cells[i].get_icon_size().width;
+ r.pos.x += icon_width;
+ r.size.x -= icon_width;
+ }
//r.grow(cache.selected->get_margin(MARGIN_LEFT));
- if (has_focus())
+ if (has_focus()){
cache.selected_focus->draw(ci,r );
- else
+ p_item->set_meta("__focus_rect", Rect2(r.pos,r.size));
+ } else {
cache.selected->draw(ci,r );
+ }
+ if (text_editor->is_visible()){
+ text_editor->set_pos(get_global_pos() + r.pos);
+ }
}
if (p_item->cells[i].custom_bg_color) {
@@ -1165,6 +1194,9 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2&
String s = p_item->cells[i].text;
s=s.get_slicec(',',option);
+ if (p_item->cells[i].suffix!=String())
+ s+=" "+p_item->cells[i].suffix;
+
Ref<Texture> downarrow = cache.select_arrow;
font->draw(ci, text_pos, s, col,item_rect.size.x-downarrow->get_width() );
@@ -1181,6 +1213,10 @@ int Tree::draw_item(const Point2i& p_pos,const Point2& p_draw_ofs, const Size2&
String valtext = String::num( p_item->cells[i].val, Math::step_decimals( p_item->cells[i].step ) );
//String valtext = rtos( p_item->cells[i].val );
+
+ if (p_item->cells[i].suffix!=String())
+ valtext+=" "+p_item->cells[i].suffix;
+
font->draw( ci, text_pos, valtext, col, item_rect.size.x-updown->get_width());
if (!p_item->cells[i].editable)
@@ -2328,9 +2364,22 @@ void Tree::_input_event(InputEvent p_event) {
range_drag_enabled=false;
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
warp_mouse(range_drag_capture_pos);
- } else
- edit_selected();
+ } else {
+ if (delayed_text_editor) {
+ uint64_t diff = OS::get_singleton()->get_ticks_msec() - first_selection_time;
+ if (diff >= 400 && diff <= 800)
+ edit_selected();
+ // fast double click
+ else if (diff < 400) {
+ emit_signal("item_double_clicked");
+ }
+
+ first_selection_time = OS::get_singleton()->get_ticks_msec();
+ } else {
+ edit_selected();
+ }
+ }
pressing_for_editor=false;
}
@@ -2468,16 +2517,7 @@ bool Tree::edit_selected() {
if (!s->cells[col].editable)
return false;
- Rect2 rect;
- rect.pos.y = get_item_offset(s) - get_scroll().y;
-
- for(int i=0;i<col;i++) {
-
- rect.pos.x+=get_column_width(i);
- }
-
- rect.size.width=get_column_width(col);
- rect.size.height=compute_item_height(s)+cache.vseparation;
+ Rect2 rect = s->get_meta("__focus_rect");
popup_edited_item=s;
popup_edited_item_col=col;
@@ -2848,7 +2888,6 @@ void Tree::item_changed(int p_column,TreeItem *p_item) {
void Tree::item_selected(int p_column,TreeItem *p_item) {
-
if (select_mode==SELECT_MULTI) {
if (!p_item->cells[p_column].selectable)
@@ -2856,8 +2895,11 @@ void Tree::item_selected(int p_column,TreeItem *p_item) {
p_item->cells[p_column].selected=true;
//emit_signal("multi_selected",p_item,p_column,true); - NO this is for TreeItem::select
+ if (delayed_text_editor)
+ first_selection_time = OS::get_singleton()->get_ticks_msec();
} else {
+
select_single_item(p_item,root,p_column);
}
update();
@@ -3128,7 +3170,7 @@ void Tree::ensure_cursor_is_visible() {
int screenh=get_size().height-h_scroll->get_combined_minimum_size().height;
if (ofs+h>v_scroll->get_val()+screenh)
- v_scroll->set_val(ofs-screenh+h);
+ v_scroll->call_deferred("set_val", ofs-screenh+h);
else if (ofs < v_scroll->get_val())
v_scroll->set_val(ofs);
}
@@ -3503,6 +3545,16 @@ bool Tree::get_allow_rmb_select() const{
return allow_rmb_select;
}
+
+void Tree::set_delayed_text_editor(bool enabled) {
+ delayed_text_editor = enabled;
+}
+
+bool Tree::is_delayed_text_editor_enabled() const {
+ return delayed_text_editor;
+}
+
+
void Tree::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_range_click_timeout"),&Tree::_range_click_timeout);
@@ -3556,6 +3608,9 @@ void Tree::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_allow_rmb_select","allow"),&Tree::set_allow_rmb_select);
ObjectTypeDB::bind_method(_MD("get_allow_rmb_select"),&Tree::get_allow_rmb_select);
+ ObjectTypeDB::bind_method(_MD("set_delayed_text_editor","enable"),&Tree::set_delayed_text_editor);
+ ObjectTypeDB::bind_method(_MD("is_delayed_text_editor_enabled"),&Tree::is_delayed_text_editor_enabled);
+
ObjectTypeDB::bind_method(_MD("set_single_select_cell_editing_only_when_already_selected","enable"),&Tree::set_single_select_cell_editing_only_when_already_selected);
ObjectTypeDB::bind_method(_MD("get_single_select_cell_editing_only_when_already_selected"),&Tree::get_single_select_cell_editing_only_when_already_selected);
@@ -3566,6 +3621,7 @@ void Tree::_bind_methods() {
ADD_SIGNAL( MethodInfo("item_rmb_selected",PropertyInfo(Variant::VECTOR2,"pos")));
ADD_SIGNAL( MethodInfo("empty_tree_rmb_selected",PropertyInfo(Variant::VECTOR2,"pos")));
ADD_SIGNAL( MethodInfo("item_edited"));
+ ADD_SIGNAL( MethodInfo("item_double_clicked"));
ADD_SIGNAL( MethodInfo("item_collapsed",PropertyInfo(Variant::OBJECT,"item")));
//ADD_SIGNAL( MethodInfo("item_doubleclicked" ) );
ADD_SIGNAL( MethodInfo("button_pressed",PropertyInfo(Variant::OBJECT,"item"),PropertyInfo(Variant::INT,"column"),PropertyInfo(Variant::INT,"id")));
@@ -3669,6 +3725,9 @@ Tree::Tree() {
force_select_on_already_selected=false;
allow_rmb_select=false;
+
+ first_selection_time = 0;
+ delayed_text_editor = false;
}
diff --git a/scene/gui/tree.h b/scene/gui/tree.h
index f5100ab5b6..2124dce749 100644
--- a/scene/gui/tree.h
+++ b/scene/gui/tree.h
@@ -69,6 +69,7 @@ friend class Tree;
Ref<Texture> icon;
Rect2i icon_region;
String text;
+ String suffix;
double min,max,step,val;
int icon_max_w;
bool expr;
@@ -168,6 +169,9 @@ public:
void set_text(int p_column,String p_text);
String get_text(int p_column) const;
+ void set_suffix(int p_column,String p_suffix);
+ String get_suffix(int p_column) const;
+
void set_icon(int p_column,const Ref<Texture>& p_icon);
Ref<Texture> get_icon(int p_column) const;
@@ -433,6 +437,9 @@ friend class TreeItem;
float last_drag_time;
float time_since_motion;*/
+ bool delayed_text_editor;
+ uint64_t first_selection_time;
+
float drag_speed;
float drag_from;
float drag_accum;
@@ -527,6 +534,9 @@ public:
void set_value_evaluator(ValueEvaluator *p_evaluator);
+ void set_delayed_text_editor(bool enabled);
+ bool is_delayed_text_editor_enabled() const;
+
Tree();
~Tree();
diff --git a/scene/main/node.cpp b/scene/main/node.cpp
index 0c7d569334..1892240426 100644
--- a/scene/main/node.cpp
+++ b/scene/main/node.cpp
@@ -37,6 +37,7 @@
VARIANT_ENUM_CAST(Node::PauseMode);
VARIANT_ENUM_CAST(Node::NetworkMode);
+VARIANT_ENUM_CAST(Node::RPCMode);
@@ -494,41 +495,57 @@ bool Node::is_network_master() const {
return false;
}
-void Node::allow_remote_call(const StringName& p_method) {
- data.allowed_remote_calls.insert(p_method);
-}
-void Node::disallow_remote_call(const StringName& p_method){
+void Node::_propagate_network_owner(Node*p_owner) {
- data.allowed_remote_calls.erase(p_method);
+ if (data.network_mode!=NETWORK_MODE_INHERIT)
+ return;
+ data.network_owner=p_owner;
+ for(int i=0;i<data.children.size();i++) {
+ data.children[i]->_propagate_network_owner(p_owner);
+ }
}
-void Node::allow_remote_set(const StringName& p_property){
+/***** RPC CONFIG ********/
- data.allowed_remote_set.insert(p_property);
+void Node::rpc_config(const StringName& p_method,RPCMode p_mode) {
+ if (p_mode==RPC_MODE_DISABLED) {
+ data.rpc_methods.erase(p_method);
+ } else {
+ data.rpc_methods[p_method]=p_mode;
+ };
}
-void Node::disallow_remote_set(const StringName& p_property){
- data.allowed_remote_set.erase(p_property);
+void Node::rset_config(const StringName& p_property,RPCMode p_mode) {
+
+ if (p_mode==RPC_MODE_DISABLED) {
+ data.rpc_properties.erase(p_property);
+ } else {
+ data.rpc_properties[p_property]=p_mode;
+ };
}
+/***** RPC FUNCTIONS ********/
-void Node::_propagate_network_owner(Node*p_owner) {
+void Node::rpc(const StringName& p_method,VARIANT_ARG_DECLARE) {
- if (data.network_mode!=NETWORK_MODE_INHERIT)
- return;
- data.network_owner=p_owner;
- for(int i=0;i<data.children.size();i++) {
+ VARIANT_ARGPTRS;
- data.children[i]->_propagate_network_owner(p_owner);
+ int argc=0;
+ for(int i=0;i<VARIANT_ARG_MAX;i++) {
+ if (argptr[i]->get_type()==Variant::NIL)
+ break;
+ argc++;
}
+
+ rpcp(0,false,p_method,argptr,argc);
}
-void Node::remote_call_reliable(const StringName& p_method,VARIANT_ARG_DECLARE) {
+void Node::rpc_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_DECLARE) {
VARIANT_ARGPTRS;
@@ -539,16 +556,26 @@ void Node::remote_call_reliable(const StringName& p_method,VARIANT_ARG_DECLARE)
argc++;
}
- remote_call_reliablep(p_method,argptr,argc);
+ rpcp(p_peer_id,false,p_method,argptr,argc);
}
-void Node::remote_call_reliablep(const StringName& p_method,const Variant** p_arg,int p_argcount){
- ERR_FAIL_COND(!is_inside_tree());
- get_tree()->_remote_call(this,true,false,p_method,p_arg,p_argcount);
+void Node::rpc_unreliable(const StringName& p_method,VARIANT_ARG_DECLARE) {
+
+ VARIANT_ARGPTRS;
+
+ int argc=0;
+ for(int i=0;i<VARIANT_ARG_MAX;i++) {
+ if (argptr[i]->get_type()==Variant::NIL)
+ break;
+ argc++;
+ }
+
+ rpcp(0,true,p_method,argptr,argc);
}
-void Node::remote_call_unreliable(const StringName& p_method,VARIANT_ARG_DECLARE){
+
+void Node::rpc_unreliable_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_DECLARE) {
VARIANT_ARGPTRS;
@@ -559,35 +586,67 @@ void Node::remote_call_unreliable(const StringName& p_method,VARIANT_ARG_DECLARE
argc++;
}
- remote_call_unreliablep(p_method,argptr,argc);
-
+ rpcp(p_peer_id,true,p_method,argptr,argc);
}
-void Node::remote_call_unreliablep(const StringName& p_method,const Variant** p_arg,int p_argcount){
- ERR_FAIL_COND(!is_inside_tree());
+Variant Node::_rpc_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
- get_tree()->_remote_call(this,false,false,p_method,p_arg,p_argcount);
-}
+ if (p_argcount<1) {
+ r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
+ r_error.argument=1;
+ return Variant();
+ }
-void Node::remote_set_reliable(const StringName& p_property,const Variant& p_value) {
+ if (p_args[0]->get_type()!=Variant::STRING) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::STRING;
+ return Variant();
+ }
+ StringName method = *p_args[0];
- ERR_FAIL_COND(!is_inside_tree());
- const Variant *ptr=&p_value;
+ rpcp(0,false,method,&p_args[1],p_argcount-1);
- get_tree()->_remote_call(this,true,true,p_property,&ptr,1);
+ r_error.error=Variant::CallError::CALL_OK;
+ return Variant();
}
-void Node::remote_set_unreliable(const StringName& p_property,const Variant& p_value){
- ERR_FAIL_COND(!is_inside_tree());
- const Variant *ptr=&p_value;
+Variant Node::_rpc_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
+
+ if (p_argcount<2) {
+ r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
+ r_error.argument=2;
+ return Variant();
+ }
- get_tree()->_remote_call(this,false,true,p_property,&ptr,1);
+ if (p_args[0]->get_type()!=Variant::INT) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::INT;
+ return Variant();
+ }
+
+ if (p_args[1]->get_type()!=Variant::STRING) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=1;
+ r_error.expected=Variant::STRING;
+ return Variant();
+ }
+
+ int peer_id = *p_args[0];
+ StringName method = *p_args[1];
+
+ rpcp(peer_id,false,method,&p_args[2],p_argcount-2);
+
+ r_error.error=Variant::CallError::CALL_OK;
+ return Variant();
}
-Variant Node::_remote_call_reliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
+
+Variant Node::_rpc_unreliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
if (p_argcount<1) {
r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
@@ -604,12 +663,46 @@ Variant Node::_remote_call_reliable_bind(const Variant** p_args, int p_argcount,
StringName method = *p_args[0];
- remote_call_reliablep(method,&p_args[1],p_argcount-1);
+ rpcp(0,true,method,&p_args[1],p_argcount-1);
+ r_error.error=Variant::CallError::CALL_OK;
+ return Variant();
}
-Variant Node::_remote_call_unreliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
+Variant Node::_rpc_unreliable_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
+
+ if (p_argcount<2) {
+ r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
+ r_error.argument=2;
+ return Variant();
+ }
+
+ if (p_args[0]->get_type()!=Variant::INT) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=0;
+ r_error.expected=Variant::INT;
+ return Variant();
+ }
+
+ if (p_args[1]->get_type()!=Variant::STRING) {
+ r_error.error=Variant::CallError::CALL_ERROR_INVALID_ARGUMENT;
+ r_error.argument=1;
+ r_error.expected=Variant::STRING;
+ return Variant();
+ }
+
+ int peer_id = *p_args[0];
+ StringName method = *p_args[1];
+
+ rpcp(peer_id,true,method,&p_args[2],p_argcount-2);
+
+ r_error.error=Variant::CallError::CALL_OK;
+ return Variant();
+}
+
+#if 0
+Variant Node::_rpc_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error) {
if (p_argcount<1) {
r_error.error=Variant::CallError::CALL_ERROR_TOO_FEW_ARGUMENTS;
@@ -626,8 +719,356 @@ Variant Node::_remote_call_unreliable_bind(const Variant** p_args, int p_argcoun
StringName method = *p_args[0];
- remote_call_unreliablep(method,&p_args[1],p_argcount-1);
+ rpcp(method,&p_args[1],p_argcount-1);
+ r_error.error=Variant::CallError::CALL_OK;
+ return Variant();
+}
+
+#endif
+void Node::rpcp(int p_peer_id,bool p_unreliable,const StringName& p_method,const Variant** p_arg,int p_argcount) {
+
+ ERR_FAIL_COND(!is_inside_tree());
+
+ bool skip_rpc=false;
+
+ if (p_peer_id==0 || p_peer_id==get_tree()->get_network_unique_id() || (p_peer_id<0 && p_peer_id!=-get_tree()->get_network_unique_id())) {
+ //check that send mode can use local call
+
+
+ bool call_local=false;
+
+
+
+ Map<StringName,RPCMode>::Element *E = data.rpc_methods.find(p_method);
+ if (E) {
+
+ switch(E->get()) {
+
+ case RPC_MODE_DISABLED: {
+ //do nothing
+ } break;
+ case RPC_MODE_REMOTE: {
+ //do nothing also, no need to call local
+ } break;
+ case RPC_MODE_SYNC: {
+ //call it, sync always results in call
+ call_local=true;
+ } break;
+ case RPC_MODE_MASTER: {
+ call_local=is_network_master();
+ if (call_local) {
+ skip_rpc=true; //no other master so..
+ }
+ } break;
+ case RPC_MODE_SLAVE: {
+ call_local=!is_network_master();
+ } break;
+
+ }
+ }
+
+
+ if (call_local) {
+ Variant::CallError ce;
+ call(p_method,p_arg,p_argcount,ce);
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ String error = Variant::get_call_error_text(this,p_method,p_arg,p_argcount,ce);
+ error="rpc() aborted in local call: - "+error;
+ ERR_PRINTS(error);
+ return;
+ }
+ } else if (get_script_instance()){
+ //attempt with script
+ ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rpc_mode(p_method);
+
+ switch(rpc_mode) {
+
+ case ScriptInstance::RPC_MODE_DISABLED: {
+ //do nothing
+ } break;
+ case ScriptInstance::RPC_MODE_REMOTE: {
+ //do nothing also, no need to call local
+ } break;
+ case ScriptInstance::RPC_MODE_SYNC: {
+ //call it, sync always results in call
+ call_local=true;
+ } break;
+ case ScriptInstance::RPC_MODE_MASTER: {
+ call_local=is_network_master();
+ if (call_local) {
+ skip_rpc=true; //no other master so..
+ }
+ } break;
+ case ScriptInstance::RPC_MODE_SLAVE: {
+ call_local=!is_network_master();
+ } break;
+ }
+
+ if (call_local) {
+ Variant::CallError ce;
+ ce.error=Variant::CallError::CALL_OK;
+ get_script_instance()->call(p_method,p_arg,p_argcount,ce);
+ if (ce.error!=Variant::CallError::CALL_OK) {
+ String error = Variant::get_call_error_text(this,p_method,p_arg,p_argcount,ce);
+ error="rpc() aborted in script local call: - "+error;
+ ERR_PRINTS(error);
+ return;
+ }
+ }
+ }
+ }
+
+ if (skip_rpc)
+ return;
+
+
+ get_tree()->_rpc(this,p_peer_id,p_unreliable,false,p_method,p_arg,p_argcount);
+
+}
+
+
+/******** RSET *********/
+
+
+void Node::rsetp(int p_peer_id,bool p_unreliable,const StringName& p_property,const Variant& p_value) {
+
+ ERR_FAIL_COND(!is_inside_tree());
+
+ bool skip_rset=false;
+
+ if (p_peer_id==0 || p_peer_id==get_tree()->get_network_unique_id() || (p_peer_id<0 && p_peer_id!=-get_tree()->get_network_unique_id())) {
+ //check that send mode can use local call
+
+
+ bool set_local=false;
+
+ Map<StringName,RPCMode>::Element *E = data.rpc_properties.find(p_property);
+ if (E) {
+
+ switch(E->get()) {
+
+ case RPC_MODE_DISABLED: {
+ //do nothing
+ } break;
+ case RPC_MODE_REMOTE: {
+ //do nothing also, no need to call local
+ } break;
+ case RPC_MODE_SYNC: {
+ //call it, sync always results in call
+ set_local=true;
+ } break;
+ case RPC_MODE_MASTER: {
+ set_local=is_network_master();
+ if (set_local) {
+ skip_rset=true;
+ }
+
+ } break;
+ case RPC_MODE_SLAVE: {
+ set_local=!is_network_master();
+ } break;
+
+ }
+ }
+
+
+ if (set_local) {
+ bool valid;
+ set(p_property,p_value,&valid);
+
+ if (!valid) {
+ String error="rset() aborted in local set, property not found: - "+String(p_property);
+ ERR_PRINTS(error);
+ return;
+ }
+ } else if (get_script_instance()){
+ //attempt with script
+ ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rset_mode(p_property);
+
+ switch(rpc_mode) {
+
+ case ScriptInstance::RPC_MODE_DISABLED: {
+ //do nothing
+ } break;
+ case ScriptInstance::RPC_MODE_REMOTE: {
+ //do nothing also, no need to call local
+ } break;
+ case ScriptInstance::RPC_MODE_SYNC: {
+ //call it, sync always results in call
+ set_local=true;
+ } break;
+ case ScriptInstance::RPC_MODE_MASTER: {
+ set_local=is_network_master();
+ if (set_local) {
+ skip_rset=true;
+ }
+ } break;
+ case ScriptInstance::RPC_MODE_SLAVE: {
+ set_local=!is_network_master();
+ } break;
+ }
+
+ if (set_local) {
+
+ bool valid = get_script_instance()->set(p_property,p_value);
+
+ if (!valid) {
+ String error="rset() aborted in local script set, property not found: - "+String(p_property);
+ ERR_PRINTS(error);
+ return;
+ }
+ }
+
+ }
+ }
+
+ if (skip_rset)
+ return;
+
+ const Variant*vptr = &p_value;
+
+ get_tree()->_rpc(this,p_peer_id,p_unreliable,true,p_property,&vptr,1);
+
+}
+
+
+
+void Node::rset(const StringName& p_property,const Variant& p_value) {
+
+ rsetp(0,false,p_property,p_value);
+
+}
+
+void Node::rset_id(int p_peer_id,const StringName& p_property,const Variant& p_value) {
+
+ rsetp(p_peer_id,false,p_property,p_value);
+
+}
+
+void Node::rset_unreliable(const StringName& p_property,const Variant& p_value) {
+
+ rsetp(0,true,p_property,p_value);
+
+}
+
+void Node::rset_unreliable_id(int p_peer_id,const StringName& p_property,const Variant& p_value) {
+
+ rsetp(p_peer_id,true,p_property,p_value);
+
+}
+
+//////////// end of rpc
+
+bool Node::can_call_rpc(const StringName& p_method) const {
+
+ const Map<StringName,RPCMode>::Element *E = data.rpc_methods.find(p_method);
+ if (E) {
+
+ switch(E->get()) {
+
+ case RPC_MODE_DISABLED: {
+ return false;
+ } break;
+ case RPC_MODE_REMOTE: {
+ return true;
+ } break;
+ case RPC_MODE_SYNC: {
+ return true;
+ } break;
+ case RPC_MODE_MASTER: {
+ return is_network_master();
+ } break;
+ case RPC_MODE_SLAVE: {
+ return !is_network_master();
+ } break;
+ }
+ }
+
+
+ if (get_script_instance()){
+ //attempt with script
+ ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rpc_mode(p_method);
+
+ switch(rpc_mode) {
+
+ case ScriptInstance::RPC_MODE_DISABLED: {
+ return false;
+ } break;
+ case ScriptInstance::RPC_MODE_REMOTE: {
+ return true;
+ } break;
+ case ScriptInstance::RPC_MODE_SYNC: {
+ return true;
+ } break;
+ case ScriptInstance::RPC_MODE_MASTER: {
+ return is_network_master();
+ } break;
+ case ScriptInstance::RPC_MODE_SLAVE: {
+ return !is_network_master();
+ } break;
+ }
+
+ }
+
+ ERR_PRINTS("RPC on unauthorized method attempted: "+String(p_method)+" on base: "+String(Variant(this)));
+ return false;
+}
+
+bool Node::can_call_rset(const StringName& p_property) const {
+
+ const Map<StringName,RPCMode>::Element *E = data.rpc_properties.find(p_property);
+ if (E) {
+
+ switch(E->get()) {
+
+ case RPC_MODE_DISABLED: {
+ return false;
+ } break;
+ case RPC_MODE_REMOTE: {
+ return true;
+ } break;
+ case RPC_MODE_SYNC: {
+ return true;
+ } break;
+ case RPC_MODE_MASTER: {
+ return is_network_master();
+ } break;
+ case RPC_MODE_SLAVE: {
+ return !is_network_master();
+ } break;
+ }
+ }
+
+
+ if (get_script_instance()){
+ //attempt with script
+ ScriptInstance::RPCMode rpc_mode = get_script_instance()->get_rset_mode(p_property);
+
+ switch(rpc_mode) {
+
+ case ScriptInstance::RPC_MODE_DISABLED: {
+ return false;
+ } break;
+ case ScriptInstance::RPC_MODE_REMOTE: {
+ return true;
+ } break;
+ case ScriptInstance::RPC_MODE_SYNC: {
+ return true;
+ } break;
+ case ScriptInstance::RPC_MODE_MASTER: {
+ return is_network_master();
+ } break;
+ case ScriptInstance::RPC_MODE_SLAVE: {
+ return !is_network_master();
+ } break;
+ }
+
+ }
+
+ ERR_PRINTS("RSET on unauthorized property attempted: "+String(p_property)+" on base: "+String(Variant(this)));
+
+ return false;
}
@@ -2444,11 +2885,9 @@ void Node::_bind_methods() {
ObjectTypeDB::bind_method(_MD("is_network_master"),&Node::is_network_master);
- ObjectTypeDB::bind_method(_MD("allow_remote_call","method"),&Node::allow_remote_call);
- ObjectTypeDB::bind_method(_MD("disallow_remote_call","method"),&Node::disallow_remote_call);
+ ObjectTypeDB::bind_method(_MD("rpc_config","method","mode"),&Node::rpc_config);
+ ObjectTypeDB::bind_method(_MD("rset_config","property","mode"),&Node::rset_config);
- ObjectTypeDB::bind_method(_MD("allow_remote_set","method"),&Node::allow_remote_set);
- ObjectTypeDB::bind_method(_MD("disallow_remote_set","method"),&Node::disallow_remote_set);
#ifdef TOOLS_ENABLED
ObjectTypeDB::bind_method(_MD("_set_import_path","import_path"),&Node::set_import_path);
@@ -2459,19 +2898,29 @@ void Node::_bind_methods() {
{
MethodInfo mi;
- mi.name="remote_call_reliable";
+
mi.arguments.push_back( PropertyInfo( Variant::STRING, "method"));
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"remote_call_reliable",&Node::_remote_call_reliable_bind,mi);
+ mi.name="rpc";
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc",&Node::_rpc_bind,mi);
+ mi.name="rpc_unreliable";
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc_unreliable",&Node::_rpc_unreliable_bind,mi);
+
+ mi.arguments.push_front( PropertyInfo( Variant::INT, "peer_id") );
+
+ mi.name="rpc_id";
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc_id",&Node::_rpc_id_bind,mi);
+ mi.name="rpc_unreliable_id";
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"rpc_unreliable_id",&Node::_rpc_unreliable_id_bind,mi);
- mi.name="remote_call_unreliable";
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"remote_call_unreliable",&Node::_remote_call_unreliable_bind,mi);
}
- ObjectTypeDB::bind_method(_MD("remote_set_reliable","property","value:Variant"),&Node::remote_set_reliable);
- ObjectTypeDB::bind_method(_MD("remote_set_unreliable","property","value:Variant"),&Node::remote_set_unreliable);
+ ObjectTypeDB::bind_method(_MD("rset","property","value:Variant"),&Node::rset);
+ ObjectTypeDB::bind_method(_MD("rset_id","peer_id","property","value:Variant"),&Node::rset_id);
+ ObjectTypeDB::bind_method(_MD("rset_unreliable","property","value:Variant"),&Node::rset_unreliable);
+ ObjectTypeDB::bind_method(_MD("rset_unreliable_id","peer_id","property","value:Variant"),&Node::rset_unreliable_id);
BIND_CONSTANT( NOTIFICATION_ENTER_TREE );
@@ -2491,7 +2940,15 @@ void Node::_bind_methods() {
BIND_CONSTANT( NOTIFICATION_PATH_CHANGED);
+ BIND_CONSTANT( NETWORK_MODE_INHERIT );
+ BIND_CONSTANT( NETWORK_MODE_MASTER );
+ BIND_CONSTANT( NETWORK_MODE_SLAVE );
+ BIND_CONSTANT( RPC_MODE_DISABLED );
+ BIND_CONSTANT( RPC_MODE_REMOTE );
+ BIND_CONSTANT( RPC_MODE_SYNC );
+ BIND_CONSTANT( RPC_MODE_MASTER );
+ BIND_CONSTANT( RPC_MODE_SLAVE );
BIND_CONSTANT( PAUSE_MODE_INHERIT );
BIND_CONSTANT( PAUSE_MODE_STOP );
@@ -2506,7 +2963,6 @@ void Node::_bind_methods() {
//ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/input" ), _SCS("set_process_input"),_SCS("is_processing_input" ) );
//ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "process/unhandled_input" ), _SCS("set_process_unhandled_input"),_SCS("is_processing_unhandled_input" ) );
ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "process/pause_mode",PROPERTY_HINT_ENUM,"Inherit,Stop,Process" ), _SCS("set_pause_mode"),_SCS("get_pause_mode" ) );
- ADD_PROPERTYNZ( PropertyInfo( Variant::INT, "process/network_mode",PROPERTY_HINT_ENUM,"Inherit,Master,Slave" ), _SCS("set_network_mode"),_SCS("get_network_mode" ) );
ADD_PROPERTYNZ( PropertyInfo( Variant::BOOL, "editor/display_folded",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_NOEDITOR ), _SCS("set_display_folded"),_SCS("is_displayed_folded" ) );
BIND_VMETHOD( MethodInfo("_process",PropertyInfo(Variant::REAL,"delta")) );
diff --git a/scene/main/node.h b/scene/main/node.h
index 761725286e..3568da2ab0 100644
--- a/scene/main/node.h
+++ b/scene/main/node.h
@@ -60,6 +60,15 @@ public:
NETWORK_MODE_SLAVE
};
+ enum RPCMode {
+
+ RPC_MODE_DISABLED, //no rpc for this method, calls to this will be blocked (default)
+ RPC_MODE_REMOTE, // using rpc() on it will call method / set property in all other peers
+ RPC_MODE_SYNC, // using rpc() on it will call method / set property in all other peers and locally
+ RPC_MODE_MASTER, // usinc rpc() on it will call method on wherever the master is, be it local or remote
+ RPC_MODE_SLAVE, // usinc rpc() on it will call method for all slaves, be it local or remote
+ };
+
struct Comparator {
bool operator()(const Node* p_a, const Node* p_b) const { return p_b->is_greater_than(p_a); }
@@ -75,6 +84,7 @@ private:
};
+
struct Data {
String filename;
@@ -108,8 +118,8 @@ private:
NetworkMode network_mode;
Node *network_owner;
- Set<StringName> allowed_remote_calls;
- Set<StringName> allowed_remote_set;
+ Map<StringName,RPCMode> rpc_methods;
+ Map<StringName,RPCMode> rpc_properties;
// variables used to properly sort the node when processing, ignored otherwise
@@ -160,8 +170,10 @@ private:
Array _get_children() const;
Array _get_groups() const;
- Variant _remote_call_reliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
- Variant _remote_call_unreliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
+ Variant _rpc_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
+ Variant _rpc_unreliable_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
+ Variant _rpc_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
+ Variant _rpc_unreliable_id_bind(const Variant** p_args, int p_argcount, Variant::CallError& r_error);
friend class SceneTree;
@@ -358,20 +370,25 @@ public:
NetworkMode get_network_mode() const;
bool is_network_master() const;
- void allow_remote_call(const StringName& p_method);
- void disallow_remote_call(const StringName& p_method);
+ void rpc_config(const StringName& p_method,RPCMode p_mode); // config a local method for RPC
+ void rset_config(const StringName& p_property,RPCMode p_mode); // config a local property for RPC
+
+ void rpc(const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode
+ void rpc_unreliable(const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode
+ void rpc_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode
+ void rpc_unreliable_id(int p_peer_id,const StringName& p_method,VARIANT_ARG_LIST); //rpc call, honors RPCMode
- void allow_remote_set(const StringName& p_property);
- void disallow_remote_set(const StringName& p_property);
+ void rpcp(int p_peer_id,bool p_unreliable,const StringName& p_method,const Variant** p_arg,int p_argcount);
- void remote_call_reliable(const StringName& p_method,VARIANT_ARG_DECLARE);
- void remote_call_reliablep(const StringName& p_method,const Variant** p_arg,int p_argcount);
+ void rset(const StringName& p_property, const Variant& p_value); //remote set call, honors RPCMode
+ void rset_unreliable(const StringName& p_property,const Variant& p_value); //remote set call, honors RPCMode
+ void rset_id(int p_peer_id,const StringName& p_property,const Variant& p_value); //remote set call, honors RPCMode
+ void rset_unreliable_id(int p_peer_id,const StringName& p_property,const Variant& p_value); //remote set call, honors RPCMode
- void remote_call_unreliable(const StringName& p_method,VARIANT_ARG_DECLARE);
- void remote_call_unreliablep(const StringName& p_method,const Variant** p_arg,int p_argcount);
+ void rsetp(int p_peer_id,bool p_unreliable,const StringName& p_property,const Variant& p_value);
- void remote_set_reliable(const StringName& p_property,const Variant& p_value);
- void remote_set_unreliable(const StringName& p_property,const Variant& p_value);
+ bool can_call_rpc(const StringName& p_method) const;
+ bool can_call_rset(const StringName& p_property) const;
Node();
diff --git a/scene/main/scene_main_loop.cpp b/scene/main/scene_main_loop.cpp
index 6af2b9b169..e3472c074a 100644
--- a/scene/main/scene_main_loop.cpp
+++ b/scene/main/scene_main_loop.cpp
@@ -44,7 +44,7 @@
#include "scene/resources/packed_scene.h"
#include "scene/resources/material.h"
#include "scene/resources/mesh.h"
-
+#include "io/marshalls.h"
void SceneTreeTimer::_bind_methods() {
@@ -1657,25 +1657,45 @@ Ref<SceneTreeTimer> SceneTree::create_timer(float p_delay_sec) {
return stt;
}
-void SceneTree::_network_peer_connected(const StringName& p_id) {
+void SceneTree::_network_peer_connected(int p_id) {
connected_peers.insert(p_id);
path_get_cache.insert(p_id,PathGetCache());
+
+
emit_signal("network_peer_connected",p_id);
}
-void SceneTree::_network_peer_disconnected(const StringName& p_id) {
+void SceneTree::_network_peer_disconnected(int p_id) {
connected_peers.erase(p_id);
path_get_cache.erase(p_id); //I no longer need your cache, sorry
emit_signal("network_peer_disconnected",p_id);
}
+void SceneTree::_connected_to_server() {
+
+ emit_signal("connected_to_server");
+}
+
+void SceneTree::_connection_failed() {
+
+ emit_signal("connection_failed");
+}
+
+void SceneTree::_server_disconnected() {
+
+ emit_signal("server_disconnected");
+}
+
void SceneTree::set_network_peer(const Ref<NetworkedMultiplayerPeer>& p_network_peer) {
if (network_peer.is_valid()) {
network_peer->disconnect("peer_connected",this,"_network_peer_connected");
network_peer->disconnect("peer_disconnected",this,"_network_peer_disconnected");
+ network_peer->disconnect("connection_succeeded",this,"_connected_to_server");
+ network_peer->disconnect("connection_failed",this,"_connection_failed");
+ network_peer->disconnect("server_disconnected",this,"_server_disconnected");
connected_peers.clear();
path_get_cache.clear();
path_send_cache.clear();
@@ -1690,6 +1710,9 @@ void SceneTree::set_network_peer(const Ref<NetworkedMultiplayerPeer>& p_network_
if (network_peer.is_valid()) {
network_peer->connect("peer_connected",this,"_network_peer_connected");
network_peer->connect("peer_disconnected",this,"_network_peer_disconnected");
+ network_peer->connect("connection_succeeded",this,"_connected_to_server");
+ network_peer->connect("connection_failed",this,"_connection_failed");
+ network_peer->connect("server_disconnected",this,"_server_disconnected");
}
}
@@ -1700,7 +1723,27 @@ bool SceneTree::is_network_server() const {
}
-void SceneTree::_remote_call(Node* p_from, bool p_reliable, bool p_set, const StringName& p_name, const Variant** p_arg, int p_argcount) {
+int SceneTree::get_network_unique_id() const {
+
+ ERR_FAIL_COND_V(!network_peer.is_valid(),0);
+ return network_peer->get_unique_id();
+}
+
+void SceneTree::set_refuse_new_network_connections(bool p_refuse) {
+ ERR_FAIL_COND(!network_peer.is_valid());
+ network_peer->set_refuse_new_connections(p_refuse);
+}
+
+bool SceneTree::is_refusing_new_network_connections() const {
+
+ ERR_FAIL_COND_V(!network_peer.is_valid(),false);
+
+ return network_peer->is_refusing_new_connections();
+
+}
+
+
+void SceneTree::_rpc(Node* p_from,int p_to,bool p_unreliable,bool p_set,const StringName& p_name,const Variant** p_arg,int p_argcount) {
if (network_peer.is_null()) {
ERR_EXPLAIN("Attempt to remote call/set when networking is not active in SceneTree.");
@@ -1717,28 +1760,26 @@ void SceneTree::_remote_call(Node* p_from, bool p_reliable, bool p_set, const St
ERR_FAIL();
}
- NodePath from_path = p_from->get_path();
- ERR_FAIL_COND(from_path.is_empty());
+ if (p_argcount>255) {
+ ERR_EXPLAIN("Too many arguments >255.");
+ ERR_FAIL();
+ }
- //create base packet
- Array message;
+ if (p_to!=0 && !connected_peers.has(ABS(p_to))) {
+ if (p_to==get_network_unique_id()) {
+ ERR_EXPLAIN("Attempt to remote call/set yourself! unique ID: "+itos(get_network_unique_id()));
+ } else {
+ ERR_EXPLAIN("Attempt to remote call unexisting ID: "+itos(p_to));
- message.resize(3+p_argcount); //alloc size for args
+ }
- //set message type
- if (p_set) {
- message[0]=NETWORK_COMMAND_REMOTE_SET;
- } else {
- message[0]=NETWORK_COMMAND_REMOTE_CALL;
+ ERR_FAIL();
}
- //set message name
- message[2]=p_name;
+ NodePath from_path = p_from->get_path();
+ ERR_FAIL_COND(from_path.is_empty());
+
- //set message args
- for(int i=0;i<p_argcount;i++) {
- message[3+i]=*p_arg[i];
- }
//see if the path is cached
PathSentCache *psc = path_send_cache.getptr(from_path);
@@ -1750,14 +1791,67 @@ void SceneTree::_remote_call(Node* p_from, bool p_reliable, bool p_set, const St
}
+
+ //create base packet, lots of harcode because it must be tight
+
+ int ofs=0;
+
+#define MAKE_ROOM(m_amount) if (packet_cache.size() < m_amount) packet_cache.resize(m_amount);
+
+ //encode type
+ MAKE_ROOM(1);
+ packet_cache[0]=p_set ? NETWORK_COMMAND_REMOTE_SET : NETWORK_COMMAND_REMOTE_CALL;
+ ofs+=1;
+
+ //encode ID
+ MAKE_ROOM(ofs+4);
+ encode_uint32(psc->id,&packet_cache[ofs]);
+ ofs+=4;
+
+ //encode function name
+ CharString name = String(p_name).utf8();
+ int len = encode_cstring(name.get_data(),NULL);
+ MAKE_ROOM(ofs+len);
+ encode_cstring(name.get_data(),&packet_cache[ofs]);
+ ofs+=len;
+
+ if (p_set) {
+ //set argument
+ Error err = encode_variant(*p_arg[0],NULL,len);
+ ERR_FAIL_COND(err!=OK);
+ MAKE_ROOM(ofs+len);
+ encode_variant(*p_arg[0],&packet_cache[ofs],len);
+ ofs+=len;
+
+ } else {
+ //call arguments
+ MAKE_ROOM(ofs+1);
+ packet_cache[ofs]=p_argcount;
+ ofs+=1;
+ for(int i=0;i<p_argcount;i++) {
+ Error err = encode_variant(*p_arg[i],NULL,len);
+ ERR_FAIL_COND(err!=OK);
+ MAKE_ROOM(ofs+len);
+ encode_variant(*p_arg[i],&packet_cache[ofs],len);
+ ofs+=len;
+ }
+
+ }
+
//see if all peers have cached path (is so, call can be fast)
bool has_all_peers=true;
- List<StringName> peers_to_add; //if one is missing, take note to add it
+ List<int> peers_to_add; //if one is missing, take note to add it
- for (Set<StringName>::Element *E=connected_peers.front();E;E=E->next()) {
+ for (Set<int>::Element *E=connected_peers.front();E;E=E->next()) {
- Map<StringName,bool>::Element *F = psc->confirmed_peers.find(E->get());
+ if (p_to<0 && E->get()==-p_to)
+ continue; //continue, excluded
+
+ if (p_to>0 && E->get()!=p_to)
+ continue; //continue, not for this peer
+
+ Map<int,bool>::Element *F = psc->confirmed_peers.find(E->get());
if (!F || F->get()==false) {
//path was not cached, or was cached but is unconfirmed
@@ -1767,87 +1861,114 @@ void SceneTree::_remote_call(Node* p_from, bool p_reliable, bool p_set, const St
}
has_all_peers=false;
- break;
}
}
//those that need to be added, send a message for this
- for (List<StringName>::Element *E=peers_to_add.front();E;E=E->next()) {
+ for (List<int>::Element *E=peers_to_add.front();E;E=E->next()) {
+
+ //encode function name
+ CharString pname = String(from_path).utf8();
+ int len = encode_cstring(pname.get_data(),NULL);
- Array add_path_message;
- add_path_message.resize(3);
- add_path_message[0]=NETWORK_COMMAND_SIMPLIFY_PATH;
- add_path_message[1]=from_path;
- add_path_message[2]=psc->id;
+ Vector<uint8_t> packet;
+
+ packet.resize(1+4+len);
+ packet[0]=NETWORK_COMMAND_SIMPLIFY_PATH;
+ encode_uint32(psc->id,&packet[1]);
+ encode_cstring(pname.get_data(),&packet[5]);
network_peer->set_target_peer(E->get()); //to all of you
- network_peer->set_transfer_mode(NetworkedMultiplayerPeer::TRANSFER_MODE_ORDERED);
- network_peer->put_var(add_path_message); //a message with love
+ network_peer->set_transfer_mode(NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE);
+ network_peer->put_packet(packet.ptr(),packet.size());
psc->confirmed_peers.insert(E->get(),false); //insert into confirmed, but as false since it was not confirmed
}
//take chance and set transfer mode, since all send methods will use it
- network_peer->set_transfer_mode(p_reliable ? NetworkedMultiplayerPeer::TRANSFER_MODE_ORDERED : NetworkedMultiplayerPeer::TRANSFER_MODE_UNRELIABLE);
+ network_peer->set_transfer_mode(p_unreliable ? NetworkedMultiplayerPeer::TRANSFER_MODE_UNRELIABLE : NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE);
if (has_all_peers) {
//they all have verified paths, so send fast
- message[1]=psc->id;
-
- network_peer->set_target_peer(StringName()); //to all of you
- network_peer->put_var(message); //a message with love
+ network_peer->set_target_peer(p_to); //to all of you
+ network_peer->put_packet(packet_cache.ptr(),ofs); //a message with love
} else {
//not all verified path, so send one by one
- for (Set<StringName>::Element *E=connected_peers.front();E;E=E->next()) {
- Map<StringName,bool>::Element *F = psc->confirmed_peers.find(E->get());
+ //apend path at the end, since we will need it for some packets
+ CharString pname = String(from_path).utf8();
+ int path_len = encode_cstring(pname.get_data(),NULL);
+ MAKE_ROOM(ofs+path_len);
+ encode_cstring(pname.get_data(),&packet_cache[ofs]);
+
+
+ for (Set<int>::Element *E=connected_peers.front();E;E=E->next()) {
+
+ if (p_to<0 && E->get()==-p_to)
+ continue; //continue, excluded
+
+ if (p_to>0 && E->get()!=p_to)
+ continue; //continue, not for this peer
+
+ Map<int,bool>::Element *F = psc->confirmed_peers.find(E->get());
ERR_CONTINUE(!F);//should never happen
network_peer->set_target_peer(E->get()); //to this one specifically
if (F->get()==true) {
//this one confirmed path, so use id
- message[1]=psc->id;
+ encode_uint32(psc->id,&packet_cache[1]);
+ network_peer->put_packet(packet_cache.ptr(),ofs);
} else {
//this one did not confirm path yet, so use entire path (sorry!)
- message[1]=from_path;
+ encode_uint32(0x80000000|ofs,&packet_cache[1]); //offset to path and flag
+ network_peer->put_packet(packet_cache.ptr(),ofs+path_len);
}
- network_peer->put_var(message);
}
}
}
-void SceneTree::_network_process_packet(const StringName& p_from,const Array& p_packet) {
+void SceneTree::_network_process_packet(int p_from, const uint8_t* p_packet, int p_packet_len) {
- ERR_FAIL_COND(p_packet.empty());
+ ERR_FAIL_COND(p_packet_len<5);
- int packet_type = p_packet[0];
+ uint8_t packet_type = p_packet[0];
switch(packet_type) {
case NETWORK_COMMAND_REMOTE_CALL:
case NETWORK_COMMAND_REMOTE_SET: {
- ERR_FAIL_COND(p_packet.size()<3);
- Variant target = p_packet[1];
- Node* node=NULL;
+ ERR_FAIL_COND(p_packet_len<5);
+ uint32_t target = decode_uint32(&p_packet[1]);
+
+
+ Node *node=NULL;
+
+ if (target&0x80000000) {
+
+ int ofs = target&0x7FFFFFFF;
+ ERR_FAIL_COND(ofs>=p_packet_len);
+
+ String paths;
+ paths.parse_utf8((const char*)&p_packet[ofs],p_packet_len-ofs);
+
+ NodePath np = paths;
- if (target.get_type()==Variant::NODE_PATH) {
- NodePath np = target;
node = get_root()->get_node(np);
if (node==NULL) {
ERR_EXPLAIN("Failed to get path from RPC: "+String(np));
ERR_FAIL_COND(node==NULL);
}
- } else if (target.get_type()==Variant::INT) {
+ } else {
int id = target;
- Map<StringName,PathGetCache>::Element *E=path_get_cache.find(p_from);
+ Map<int,PathGetCache>::Element *E=path_get_cache.find(p_from);
ERR_FAIL_COND(!E);
Map<int,PathGetCache::NodeInfo>::Element *F=E->get().nodes.find(id);
@@ -1863,23 +1984,51 @@ void SceneTree::_network_process_packet(const StringName& p_from,const Array& p_
}
- } else {
- ERR_FAIL();
}
- StringName name = p_packet[2];
+ ERR_FAIL_COND(p_packet_len<6);
+
+ //detect cstring end
+ int len_end=5;
+ for(;len_end<p_packet_len;len_end++) {
+ if (p_packet[len_end]==0) {
+ break;
+ }
+ }
+
+ ERR_FAIL_COND(len_end>=p_packet_len);
+
+ StringName name = String::utf8((const char*)&p_packet[5]);
+
+
+
if (packet_type==NETWORK_COMMAND_REMOTE_CALL) {
- int argc = p_packet.size()-3;
+ if (!node->can_call_rpc(name))
+ return;
+
+ int ofs = len_end+1;
+
+ ERR_FAIL_COND(ofs>=p_packet_len);
+
+ int argc = p_packet[ofs];
Vector<Variant> args;
Vector<const Variant*> argp;
args.resize(argc);
argp.resize(argc);
+ ofs++;
+
for(int i=0;i<argc;i++) {
- args[i]=p_packet[3+i];
- argp[i]=&args[i];
+
+ ERR_FAIL_COND(ofs>=p_packet_len);
+ int vlen;
+ Error err = decode_variant(args[i],&p_packet[ofs],p_packet_len-ofs,&vlen);
+ ERR_FAIL_COND(err!=OK);
+ //args[i]=p_packet[3+i];
+ argp[i]=&args[i];
+ ofs+=vlen;
}
Variant::CallError ce;
@@ -1887,14 +2036,22 @@ void SceneTree::_network_process_packet(const StringName& p_from,const Array& p_
node->call(name,argp.ptr(),argc,ce);
if (ce.error!=Variant::CallError::CALL_OK) {
String error = Variant::get_call_error_text(node,name,argp.ptr(),argc,ce);
+ error="RPC - "+error;
ERR_PRINTS(error);
}
} else {
+ if (!node->can_call_rset(name))
+ return;
+
+ int ofs = len_end+1;
+
+ ERR_FAIL_COND(ofs>=p_packet_len);
+
+ Variant value;
+ decode_variant(value,&p_packet[ofs],p_packet_len-ofs);
- ERR_FAIL_COND(p_packet.size()!=4);
- Variant value = p_packet[3];
bool valid;
node->set(name,value,&valid);
@@ -1907,9 +2064,13 @@ void SceneTree::_network_process_packet(const StringName& p_from,const Array& p_
} break;
case NETWORK_COMMAND_SIMPLIFY_PATH: {
- ERR_FAIL_COND(p_packet.size()!=3);
- NodePath path = p_packet[1];
- int id = p_packet[2];
+ ERR_FAIL_COND(p_packet_len<5);
+ int id = decode_uint32(&p_packet[1]);
+
+ String paths;
+ paths.parse_utf8((const char*)&p_packet[5],p_packet_len-5);
+
+ NodePath path = paths;
if (!path_get_cache.has(p_from)) {
path_get_cache[p_from]=PathGetCache();
@@ -1921,24 +2082,36 @@ void SceneTree::_network_process_packet(const StringName& p_from,const Array& p_
path_get_cache[p_from].nodes[id]=ni;
- network_peer->set_transfer_mode(NetworkedMultiplayerPeer::TRANSFER_MODE_ORDERED);
- network_peer->set_target_peer(p_from);
- Array message;
- message.resize(2);
- message[0]=NETWORK_COMMAND_CONFIRM_PATH;
- message[1]=path;
+ {
+ //send ack
+
+ //encode path
+ CharString pname = String(path).utf8();
+ int len = encode_cstring(pname.get_data(),NULL);
- network_peer->put_var(message);
+ Vector<uint8_t> packet;
+
+ packet.resize(1+len);
+ packet[0]=NETWORK_COMMAND_CONFIRM_PATH;
+ encode_cstring(pname.get_data(),&packet[1]);
+
+ network_peer->set_transfer_mode(NetworkedMultiplayerPeer::TRANSFER_MODE_RELIABLE);
+ network_peer->set_target_peer(p_from);
+ network_peer->put_packet(packet.ptr(),packet.size());
+ }
} break;
case NETWORK_COMMAND_CONFIRM_PATH: {
- ERR_FAIL_COND(p_packet.size()!=2);
- NodePath path = p_packet[1];
+
+ String paths;
+ paths.parse_utf8((const char*)&p_packet[1],p_packet_len-1);
+
+ NodePath path = paths;
PathSentCache *psc = path_send_cache.getptr(path);
ERR_FAIL_COND(!psc);
- Map<StringName,bool>::Element *E=psc->confirmed_peers.find(p_from);
+ Map<int,bool>::Element *E=psc->confirmed_peers.find(p_from);
ERR_FAIL_COND(!E);
E->get()=true;
} break;
@@ -1948,25 +2121,30 @@ void SceneTree::_network_process_packet(const StringName& p_from,const Array& p_
void SceneTree::_network_poll() {
- if (!network_peer.is_valid())
+ if (!network_peer.is_valid() || network_peer->get_connection_status()==NetworkedMultiplayerPeer::CONNECTION_DISCONNECTED)
return;
network_peer->poll();
+ if (!network_peer.is_valid()) //it's possible that polling might have resulted in a disconnection, so check here
+ return;
+
while(network_peer->get_available_packet_count()) {
- StringName sender = network_peer->get_packet_peer();
- Variant packet;
- Error err = network_peer->get_var(packet);
+ int sender = network_peer->get_packet_peer();
+ const uint8_t *packet;
+ int len;
+
+ Error err = network_peer->get_packet(&packet,len);
if (err!=OK) {
ERR_PRINT("Error getting packet!");
}
- if (packet.get_type()!=Variant::ARRAY) {
- ERR_PRINT("Error getting packet! (not an array)");
- }
+ _network_process_packet(sender,packet,len);
- _network_process_packet(sender,packet);
+ if (!network_peer.is_valid()) {
+ break; //it's also possible that a packet or RPC caused a disconnection, so also check here
+ }
}
@@ -2022,13 +2200,9 @@ void SceneTree::_bind_methods() {
mi.arguments.push_back( PropertyInfo( Variant::INT, "flags"));
mi.arguments.push_back( PropertyInfo( Variant::STRING, "group"));
mi.arguments.push_back( PropertyInfo( Variant::STRING, "method"));
- Vector<Variant> defargs;
- for(int i=0;i<VARIANT_ARG_MAX;i++) {
- mi.arguments.push_back( PropertyInfo( Variant::NIL, "arg"+itos(i)));
- defargs.push_back(Variant());
- }
- ObjectTypeDB::bind_native_method(METHOD_FLAGS_DEFAULT,"call_group",&SceneTree::_call_group,mi,defargs);
+
+ ObjectTypeDB::bind_vararg_method(METHOD_FLAGS_DEFAULT,"call_group",&SceneTree::_call_group,mi);
ObjectTypeDB::bind_method(_MD("set_current_scene","child_node:Node"),&SceneTree::set_current_scene);
ObjectTypeDB::bind_method(_MD("get_current_scene:Node"),&SceneTree::get_current_scene);
@@ -2042,9 +2216,15 @@ void SceneTree::_bind_methods() {
ObjectTypeDB::bind_method(_MD("set_network_peer","peer:NetworkedMultiplayerPeer"),&SceneTree::set_network_peer);
- ObjectTypeDB::bind_method(_MD("is_network_server","is_network_server"),&SceneTree::is_network_server);
+ ObjectTypeDB::bind_method(_MD("is_network_server"),&SceneTree::is_network_server);
+ ObjectTypeDB::bind_method(_MD("get_network_unique_id"),&SceneTree::get_network_unique_id);
+ ObjectTypeDB::bind_method(_MD("set_refuse_new_network_connections","refuse"),&SceneTree::set_refuse_new_network_connections);
+ ObjectTypeDB::bind_method(_MD("is_refusing_new_network_connections"),&SceneTree::is_refusing_new_network_connections);
ObjectTypeDB::bind_method(_MD("_network_peer_connected"),&SceneTree::_network_peer_connected);
ObjectTypeDB::bind_method(_MD("_network_peer_disconnected"),&SceneTree::_network_peer_disconnected);
+ ObjectTypeDB::bind_method(_MD("_connected_to_server"),&SceneTree::_connected_to_server);
+ ObjectTypeDB::bind_method(_MD("_connection_failed"),&SceneTree::_connection_failed);
+ ObjectTypeDB::bind_method(_MD("_server_disconnected"),&SceneTree::_server_disconnected);
ADD_SIGNAL( MethodInfo("tree_changed") );
ADD_SIGNAL( MethodInfo("node_removed",PropertyInfo( Variant::OBJECT, "node") ) );
@@ -2055,8 +2235,11 @@ void SceneTree::_bind_methods() {
ADD_SIGNAL( MethodInfo("fixed_frame"));
ADD_SIGNAL( MethodInfo("files_dropped",PropertyInfo(Variant::STRING_ARRAY,"files"),PropertyInfo(Variant::INT,"screen")) );
- ADD_SIGNAL( MethodInfo("network_peer_connected",PropertyInfo(Variant::STRING,"id")));
- ADD_SIGNAL( MethodInfo("network_peer_disconnected",PropertyInfo(Variant::STRING,"id")));
+ ADD_SIGNAL( MethodInfo("network_peer_connected",PropertyInfo(Variant::INT,"id")));
+ ADD_SIGNAL( MethodInfo("network_peer_disconnected",PropertyInfo(Variant::INT,"id")));
+ ADD_SIGNAL( MethodInfo("connected_to_server"));
+ ADD_SIGNAL( MethodInfo("connection_failed"));
+ ADD_SIGNAL( MethodInfo("server_disconnected"));
BIND_CONSTANT( GROUP_CALL_DEFAULT );
BIND_CONSTANT( GROUP_CALL_REVERSE );
diff --git a/scene/main/scene_main_loop.h b/scene/main/scene_main_loop.h
index f67dae01be..1c0f88862c 100644
--- a/scene/main/scene_main_loop.h
+++ b/scene/main/scene_main_loop.h
@@ -188,13 +188,17 @@ private:
Ref<NetworkedMultiplayerPeer> network_peer;
- Set<StringName> connected_peers;
- void _network_peer_connected(const StringName& p_id);
- void _network_peer_disconnected(const StringName& p_id);
+ Set<int> connected_peers;
+ void _network_peer_connected(int p_id);
+ void _network_peer_disconnected(int p_id);
+
+ void _connected_to_server();
+ void _connection_failed();
+ void _server_disconnected();
//path sent caches
struct PathSentCache {
- Map<StringName,bool> confirmed_peers;
+ Map<int,bool> confirmed_peers;
int id;
};
@@ -211,9 +215,11 @@ private:
Map<int,NodeInfo> nodes;
};
- Map<StringName,PathGetCache> path_get_cache;
+ Map<int,PathGetCache> path_get_cache;
+
+ Vector<uint8_t> packet_cache;
- void _network_process_packet(const StringName &p_from, const Array& p_packet);
+ void _network_process_packet(int p_from, const uint8_t *p_packet, int p_packet_len);
void _network_poll();
static SceneTree *singleton;
@@ -221,7 +227,8 @@ friend class Node;
- void _remote_call(Node* p_from,bool p_reliable,bool p_set,const StringName& p_name,const Variant** p_arg,int p_argcount);
+
+ void _rpc(Node* p_from,int p_to,bool p_unreliable,bool p_set,const StringName& p_name,const Variant** p_arg,int p_argcount);
void tree_changed();
void node_removed(Node *p_node);
@@ -418,6 +425,10 @@ public:
void set_network_peer(const Ref<NetworkedMultiplayerPeer>& p_network_peer);
bool is_network_server() const;
+ int get_network_unique_id() const;
+
+ void set_refuse_new_network_connections(bool p_refuse);
+ bool is_refusing_new_network_connections() const;
SceneTree();
~SceneTree();
diff --git a/scene/resources/default_theme/default_theme.cpp b/scene/resources/default_theme/default_theme.cpp
index 2033599307..03f28bef08 100644
--- a/scene/resources/default_theme/default_theme.cpp
+++ b/scene/resources/default_theme/default_theme.cpp
@@ -627,6 +627,8 @@ void fill_default_theme(Ref<Theme>& t,const Ref<Font> & default_font,const Ref<F
// GraphNode
Ref<StyleBoxTexture> graphsb = make_stylebox(graph_node_png,6,24,6,5,16,24,16,5);
+ Ref<StyleBoxTexture> graphsbcomment = make_stylebox(graph_node_comment_png,6,24,6,5,16,24,16,5);
+ Ref<StyleBoxTexture> graphsbcommentselected = make_stylebox(graph_node_comment_focus_png,6,24,6,5,16,24,16,5);
Ref<StyleBoxTexture> graphsbselected = make_stylebox(graph_node_selected_png,6,24,6,5,16,24,16,5);
Ref<StyleBoxTexture> graphsbdefault = make_stylebox(graph_node_default_png,4,4,4,4,6,4,4,4);
Ref<StyleBoxTexture> graphsbdeffocus = make_stylebox(graph_node_default_focus_png,4,4,4,4,6,4,4,4);
@@ -639,11 +641,14 @@ void fill_default_theme(Ref<Theme>& t,const Ref<Font> & default_font,const Ref<F
t->set_stylebox("selectedframe","GraphNode", graphsbselected );
t->set_stylebox("defaultframe", "GraphNode", graphsbdefault );
t->set_stylebox("defaultfocus", "GraphNode", graphsbdeffocus );
+ t->set_stylebox("comment", "GraphNode", graphsbcomment );
+ t->set_stylebox("commentfocus", "GraphNode", graphsbcommentselected );
t->set_stylebox("breakpoint", "GraphNode", graph_bpoint );
t->set_stylebox("position", "GraphNode", graph_position );
t->set_constant("separation","GraphNode", 1 *scale);
t->set_icon("port","GraphNode", make_icon( graph_port_png ) );
t->set_icon("close","GraphNode", make_icon( graph_node_close_png ) );
+ t->set_icon("resizer","GraphNode", make_icon( window_resizer_png ) );
t->set_font("title_font","GraphNode", default_font );
t->set_color("title_color","GraphNode", Color(0,0,0,1));
t->set_constant("title_offset","GraphNode", 20 *scale);
@@ -930,6 +935,8 @@ void fill_default_theme(Ref<Theme>& t,const Ref<Font> & default_font,const Ref<F
t->set_stylebox("bg","GraphEdit", make_stylebox( tree_bg_png,4,4,4,5) );
t->set_color("grid_minor","GraphEdit", Color(1,1,1,0.05) );
t->set_color("grid_major","GraphEdit", Color(1,1,1,0.2) );
+ t->set_constant("bezier_len_pos","GraphEdit", 80*scale );
+ t->set_constant("bezier_len_neg","GraphEdit", 160*scale );
diff --git a/scene/resources/default_theme/graph_node.png b/scene/resources/default_theme/graph_node.png
index ed0b6a6cd2..d4b4dd3c1f 100644
--- a/scene/resources/default_theme/graph_node.png
+++ b/scene/resources/default_theme/graph_node.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node_comment.png b/scene/resources/default_theme/graph_node_comment.png
new file mode 100644
index 0000000000..f2d6daa259
--- /dev/null
+++ b/scene/resources/default_theme/graph_node_comment.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node_comment_focus.png b/scene/resources/default_theme/graph_node_comment_focus.png
new file mode 100644
index 0000000000..a4b7b5a618
--- /dev/null
+++ b/scene/resources/default_theme/graph_node_comment_focus.png
Binary files differ
diff --git a/scene/resources/default_theme/graph_node_selected.png b/scene/resources/default_theme/graph_node_selected.png
index 33c4d06128..f76c9703dd 100644
--- a/scene/resources/default_theme/graph_node_selected.png
+++ b/scene/resources/default_theme/graph_node_selected.png
Binary files differ
diff --git a/scene/resources/default_theme/theme_data.h b/scene/resources/default_theme/theme_data.h
index d62ca07c38..73c801483f 100644
--- a/scene/resources/default_theme/theme_data.h
+++ b/scene/resources/default_theme/theme_data.h
@@ -100,7 +100,7 @@ static const unsigned char full_panel_bg_png[]={
static const unsigned char graph_node_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x7,0x1d,0x1,0x8,0x10,0x1e,0x6f,0x12,0x2b,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x2,0x6a,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0xbb,0x6e,0x13,0x51,0x10,0x86,0xbf,0xf1,0x2e,0xb1,0x83,0x85,0x63,0x5,0x10,0xe2,0x22,0xa5,0x0,0x1a,0x24,0x90,0x22,0x9e,0x81,0x2,0xd1,0x53,0xf1,0x2,0x20,0xa,0x1a,0xa,0xa0,0x44,0xd0,0xd0,0x20,0x81,0xe0,0x5,0xa8,0xe8,0x11,0x5,0xcf,0x80,0x22,0x81,0x42,0x3,0x14,0x91,0xb8,0x4,0x85,0x58,0x8e,0x21,0x78,0xd7,0xd9,0x73,0x86,0xe2,0x9c,0xdd,0xec,0xae,0xd7,0xce,0x85,0xe,0xed,0x34,0xbb,0x3a,0x3e,0xf3,0xcd,0xcc,0x3f,0x63,0x69,0x47,0xd8,0x36,0x1,0x1a,0x40,0xe0,0x9f,0x42,0xd1,0x14,0xb0,0x80,0xf1,0x4f,0x25,0x77,0xa9,0x1,0x1c,0x4,0xe6,0x81,0xa3,0x40,0x7,0x38,0x50,0x2,0x6c,0x1,0x3,0x60,0xd,0xe8,0x1,0x7f,0x0,0x9b,0x46,0x6d,0x3,0x67,0xe6,0xe,0x75,0xaf,0xb7,0x9a,0xad,0xcb,0x33,0x33,0xcd,0x53,0x54,0xd8,0x68,0x14,0x7f,0x89,0xe2,0xe8,0xf5,0xc6,0xaf,0xfe,0x73,0xe0,0x13,0xb0,0x29,0x3e,0xd2,0xc2,0x7c,0xf7,0xf0,0xe3,0xd3,0xb,0x67,0xaf,0x3c,0xb8,0xfb,0x88,0xd9,0x4e,0xab,0xca,0x9f,0xe1,0x20,0xe2,0xde,0xc3,0xdb,0x7c,0x5e,0xf9,0xf8,0xaa,0xd7,0x5f,0xbf,0x5,0xac,0x8,0xd0,0x2,0x16,0x8f,0x1f,0x3b,0xf9,0xe6,0xc5,0xb3,0x97,0xed,0x24,0xb1,0x24,0xa3,0xa4,0x12,0x10,0xce,0x84,0x84,0x61,0x83,0x6b,0x37,0xae,0x6e,0x7e,0xff,0xf1,0xf5,0x12,0xb0,0x14,0x7a,0x1d,0xda,0x61,0x10,0xb6,0x87,0xbf,0x63,0x10,0x75,0x47,0xa,0x2a,0x79,0x85,0x95,0x51,0xbc,0xc5,0x28,0x86,0x30,0x8,0xdb,0xbe,0x6c,0x49,0x1,0x1,0x80,0x51,0xeb,0xfc,0x9d,0xc0,0x4e,0x6b,0xf,0xd1,0xfc,0xb9,0xb3,0x20,0x5,0x68,0xfa,0x8b,0x5a,0x8b,0xaa,0x80,0x28,0x82,0xa0,0x28,0xa2,0x92,0x73,0xd3,0xb1,0xde,0x86,0x85,0x46,0x5b,0x45,0x51,0x50,0x45,0xc4,0x95,0x61,0x53,0x27,0x71,0x61,0x74,0x1a,0xc0,0xaa,0xcd,0x6e,0xa8,0x64,0x2f,0xee,0x5d,0x29,0x8a,0x32,0x39,0x3,0x5f,0xb6,0x2f,0x4c,0x45,0x73,0x5a,0xd8,0x31,0x48,0x1,0x60,0xac,0x2d,0xf1,0x5,0x51,0x75,0x45,0x68,0x5a,0xbf,0x4e,0xcf,0x60,0xfb,0x82,0x2b,0x5a,0x73,0x4e,0xb6,0xe2,0xf,0x52,0x2,0xd8,0x82,0xe2,0x14,0x50,0x54,0xc4,0x2f,0x8b,0x68,0xad,0x1f,0x99,0x54,0x79,0x41,0xdd,0x0,0xf8,0xb6,0x82,0x88,0x4e,0xeb,0x82,0x66,0x89,0xaa,0x3b,0xc8,0x52,0x48,0x41,0x56,0x76,0xcc,0x60,0x7b,0x74,0x75,0xac,0x1a,0x49,0x47,0x72,0x72,0x6,0xe2,0xe7,0x56,0x45,0xfd,0x5d,0xc9,0x44,0x28,0x40,0x2b,0x45,0x34,0xea,0x7,0xa8,0x14,0xc9,0x92,0x75,0x64,0x7,0x11,0x8d,0x8f,0x98,0x9b,0x87,0xf2,0xf4,0x4d,0xd5,0x40,0xd5,0xc9,0x97,0xf,0xa3,0x5a,0x74,0x9c,0x36,0x89,0xf7,0x9f,0xdc,0x61,0xaf,0x96,0x1,0x92,0x2d,0xc3,0xe2,0xf9,0x8b,0xbb,0x72,0x5a,0x7a,0xff,0xb6,0x3a,0x83,0x8d,0x41,0x7f,0xcf,0x19,0x34,0xf8,0x47,0xab,0x1,0x35,0xa0,0x6,0xd4,0x80,0x1a,0x50,0x3,0x6a,0xc0,0x7f,0x9,0x90,0x8a,0x4f,0xe0,0x3d,0x67,0x60,0xf7,0xe1,0x6b,0x53,0x80,0x5,0x22,0x63,0x4c,0x6c,0x93,0x5d,0x78,0x25,0x60,0x8c,0x89,0x81,0x8,0xb0,0xd,0xbf,0xca,0xae,0x47,0xf1,0x70,0x79,0xad,0xb7,0xca,0x34,0x88,0x4d,0x60,0xad,0xb7,0x4a,0x14,0xf,0x97,0x81,0x75,0xc0,0xa4,0x9b,0xeb,0x1c,0x70,0xa1,0xd3,0xee,0x3e,0x6d,0x35,0x67,0xcf,0x5,0x41,0x50,0x29,0xae,0x31,0xc6,0x46,0xf1,0xf0,0xc3,0x60,0xb3,0x7f,0x13,0x78,0x7,0x6c,0x48,0x6e,0x85,0xeb,0x0,0x27,0x80,0x23,0x40,0x73,0xc2,0xf2,0x1d,0x3,0x3f,0x81,0x6f,0x7e,0x8f,0x36,0x52,0x12,0x34,0x4c,0xf7,0xc1,0x9,0x55,0xa8,0x2f,0x39,0xd9,0xa7,0xf0,0xe3,0xf6,0x17,0x4c,0x97,0x1d,0x24,0x5b,0x8,0x8b,0x95,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x17,0xd,0x5,0x12,0xa1,0x38,0x83,0x9b,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x2,0x74,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0x3d,0x6f,0xd3,0x60,0x10,0xc7,0x7f,0x17,0x9b,0x26,0x25,0x22,0xad,0xa,0x8,0xf1,0x52,0x75,0x0,0x16,0x24,0x90,0x2a,0x96,0x7c,0x1,0x6,0xc4,0xce,0xc4,0x17,0x0,0x31,0xb0,0x30,0x0,0x23,0x82,0x85,0x5,0x9,0x4,0x5f,0x80,0x89,0x1d,0x31,0xf0,0x5,0x58,0x50,0x25,0x50,0x59,0x80,0xa1,0xe2,0xad,0x28,0x34,0x4a,0x3,0x25,0x76,0xea,0xe7,0x39,0x6,0x3f,0x76,0x6d,0xc7,0x49,0x5f,0xd8,0x90,0x6f,0xb1,0xf5,0xe4,0xb9,0xdf,0xdd,0xfd,0xef,0x22,0xf9,0x84,0x2d,0x13,0xa0,0x6,0x78,0xee,0x29,0xe4,0x4d,0x1,0xb,0x18,0xf7,0x54,0x32,0x97,0x6a,0xc0,0x7e,0x60,0xe,0x38,0xc,0xb4,0x80,0x7d,0x5,0xc0,0x26,0xd0,0x7,0x3a,0x40,0x17,0xf8,0x3,0xd8,0x24,0x6a,0x13,0x38,0x35,0x73,0x60,0xf6,0x6a,0xa3,0xde,0xb8,0x38,0x35,0x55,0x3f,0x41,0x89,0xd,0x87,0xe1,0x97,0x20,0xc,0x5e,0xae,0xff,0xea,0x3d,0x5,0x3e,0x2,0x1b,0xe2,0x22,0x2d,0xcc,0xcd,0x1e,0x7c,0x78,0x72,0xe1,0xf4,0xa5,0x7b,0xb7,0x1f,0x7c,0x9e,0x6e,0x35,0xca,0xfc,0x19,0xf4,0x3,0xee,0xdc,0xbf,0x39,0xff,0x69,0xe5,0xc3,0x8b,0x6e,0x6f,0xed,0x6,0xb0,0x22,0x40,0x3,0x58,0x3c,0x7a,0xe4,0xf8,0xab,0x67,0x4f,0x9e,0x77,0xa3,0xc8,0x12,0xd,0xa3,0x52,0x80,0x3f,0xe5,0xe3,0xfb,0x35,0xae,0x5c,0xbb,0x3c,0xf7,0xfd,0xc7,0xd7,0xb,0xc0,0x92,0xef,0x74,0x68,0xfa,0x9e,0xdf,0x1c,0xfc,0xe,0xbb,0x88,0xc6,0x47,0xa,0x2a,0x59,0x85,0x95,0x61,0xb8,0xc9,0x30,0x4,0xdf,0xf3,0x9b,0xae,0x6c,0x49,0x0,0x1e,0x80,0x51,0x1b,0xfb,0xc7,0x2,0xc7,0x5a,0x3b,0x88,0x66,0xcf,0x63,0xf3,0x12,0x80,0x26,0xbf,0xa8,0xb5,0xa8,0xa,0x88,0x22,0x8,0x8a,0x22,0x2a,0x19,0x37,0x1d,0xe9,0xad,0x9f,0x6b,0xb4,0x55,0x14,0x5,0x55,0x44,0xe2,0x32,0x6c,0xe2,0x24,0x71,0x18,0x9d,0x4,0xb0,0x6a,0xd3,0x1b,0x2a,0xe9,0x4b,0xfc,0xae,0xe4,0x45,0x19,0x9f,0x81,0x2b,0xdb,0x15,0xa6,0xa2,0x19,0x2d,0xec,0x8,0x24,0x7,0x30,0xd6,0x16,0xf8,0x82,0xa8,0xc6,0x45,0x68,0x52,0xbf,0x4e,0xce,0x60,0xeb,0x42,0x5c,0xb4,0x66,0x9c,0x6c,0xc9,0x1f,0xa4,0x0,0xb0,0x39,0xc5,0xc9,0xa1,0x28,0x89,0x5f,0x14,0xd1,0x5a,0x37,0x32,0x89,0xf2,0x82,0xc6,0x3,0xe0,0xda,0xa,0x22,0x3a,0xa9,0xb,0x9a,0x26,0xaa,0xf1,0x41,0x9a,0x42,0x2,0xb2,0xb2,0x6d,0x6,0x5b,0xa3,0xab,0x23,0xd5,0x48,0x32,0x92,0xe3,0x33,0x10,0x37,0xb7,0x2a,0xea,0xee,0x4a,0x2a,0x42,0xe,0x5a,0x2a,0xa2,0x51,0x37,0x40,0x85,0x48,0x96,0xb4,0x23,0xdb,0x88,0x68,0x5c,0xc4,0xcc,0x3c,0x14,0xa7,0x6f,0xa2,0x6,0xaa,0xb1,0x7c,0xd9,0x30,0xaa,0x79,0xc7,0x49,0x93,0x78,0xf7,0xd1,0xad,0x79,0x76,0x69,0x29,0x20,0xda,0x34,0x2c,0x9e,0x3d,0xff,0x7a,0x27,0x4e,0x4b,0xef,0xde,0xb4,0x4b,0x33,0x58,0xef,0xf7,0x76,0x9b,0x0,0x35,0xfe,0xd1,0x2a,0x40,0x5,0xa8,0x0,0x15,0xa0,0x2,0x54,0x80,0xa,0xf0,0x5f,0x2,0xa4,0xe4,0x13,0x78,0xd7,0x19,0xd8,0x3d,0xf8,0xda,0x4,0x60,0x81,0xc0,0x18,0x13,0xda,0x68,0x7,0x5e,0x11,0x18,0x63,0x42,0x20,0x0,0x6c,0xcd,0xad,0xb2,0x6b,0x41,0x38,0x58,0xee,0x74,0x57,0xdb,0x93,0x20,0x36,0x82,0x4e,0x77,0xb5,0x1d,0x84,0x83,0x65,0x60,0xd,0x30,0xc9,0xe6,0x3a,0x3,0x9c,0x6b,0x35,0x67,0x1f,0x37,0xea,0xd3,0x67,0x3c,0xcf,0x2b,0x15,0xd7,0x18,0x63,0x83,0x70,0xf0,0xbe,0xbf,0xd1,0xbb,0xe,0xbc,0x5,0xd6,0x25,0xb3,0xc2,0xb5,0x80,0x63,0xc0,0x21,0xa0,0x3e,0x66,0xf9,0xe,0x81,0x9f,0xc0,0x37,0xb7,0x47,0x1b,0x29,0x8,0xea,0x27,0xfb,0xe0,0x98,0x2a,0xd4,0x95,0x1c,0xed,0x51,0xf8,0x51,0xfb,0xb,0x1,0xbe,0x20,0x9f,0x90,0x81,0x17,0xaa,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
};
@@ -114,6 +114,16 @@ static const unsigned char graph_node_close_png[]={
};
+static const unsigned char graph_node_comment_png[]={
+0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x19,0x11,0x2a,0x1d,0xd6,0x78,0x8b,0x40,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x1,0x74,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0xbf,0x4e,0xc2,0x50,0x14,0xc6,0x7f,0x6d,0x91,0x56,0x1b,0x90,0x80,0x2c,0x44,0xc2,0xa0,0x2e,0xe,0x3e,0x3,0x89,0x93,0xf1,0x1d,0x4c,0x18,0x4d,0x1c,0x7c,0xb,0x57,0x7,0x13,0x47,0x13,0x77,0x46,0xe3,0xc4,0x4b,0x98,0x60,0x4c,0xd4,0x81,0x60,0x58,0x94,0xff,0x22,0x2d,0xd0,0xd6,0xe5,0xde,0x88,0x8,0x2,0x35,0x6e,0xf7,0x5b,0x6e,0x9a,0x9c,0xef,0x77,0xee,0x39,0x37,0x1d,0x3e,0x8d,0x2f,0x69,0x80,0xe,0x18,0xe2,0xd4,0xf8,0xae,0x0,0xf0,0x1,0x4f,0x9c,0x1,0x63,0x45,0x3a,0xb0,0x6,0x24,0x81,0x34,0x10,0x7,0x56,0x26,0x0,0x43,0xa0,0x3,0xbc,0x2,0xd,0xe0,0x3,0xf0,0x65,0x57,0x1b,0xd8,0x5e,0x8f,0x25,0x8e,0x2d,0xd3,0x3a,0x88,0x46,0xcd,0x4d,0xa6,0x68,0x30,0x70,0x5f,0x1c,0xd7,0xb9,0x6d,0x77,0x5b,0x97,0xc0,0x13,0xd0,0xd3,0x44,0xa7,0x5c,0x32,0x91,0x3a,0xdf,0xca,0xed,0x1c,0x16,0x52,0xdd,0x2a,0xbf,0xe8,0xaa,0x1e,0xcb,0x3e,0x57,0x1e,0x6f,0x1a,0xad,0xfa,0x29,0x50,0x91,0x33,0xa7,0x4d,0xd3,0xca,0xcf,0x33,0x3,0x14,0x52,0xdd,0xaa,0x69,0x5a,0x79,0x31,0xaa,0x21,0x97,0x65,0x47,0x8c,0x88,0xcd,0x82,0x12,0xb5,0x36,0xa0,0x49,0x80,0xc1,0xf2,0x32,0x24,0x20,0x90,0x4f,0x12,0x46,0x3a,0x7f,0x94,0x2,0x28,0x80,0x2,0x88,0x5f,0x7b,0xfc,0xe3,0xec,0xe1,0x3d,0x1b,0x1a,0x30,0x1a,0x7a,0x1c,0x65,0xd8,0x5f,0xc4,0x74,0x5d,0xa3,0xa4,0x5e,0x41,0x1,0x14,0x40,0x1,0x14,0x40,0x1,0x14,0x40,0x1,0xfe,0x15,0xa0,0x4d,0xc9,0x88,0x4b,0xdf,0xc0,0xf,0xe1,0xf5,0x25,0xc0,0x7,0x1c,0xcf,0xf3,0xdc,0x45,0x9d,0xa2,0xd6,0x1,0x7c,0x5d,0x44,0xd9,0xba,0xe3,0xf6,0xcb,0xc5,0xa6,0x5d,0x9a,0x67,0x2e,0x36,0xed,0x92,0xe3,0xf6,0xcb,0x40,0x1d,0xf0,0x64,0x72,0x5d,0x7,0xf6,0xe2,0x76,0xe2,0xc2,0x32,0x57,0x77,0xd,0xc3,0xd0,0x67,0x74,0xf6,0x1d,0xb7,0x7f,0xdf,0xe9,0xb5,0x4e,0x80,0x3b,0xa0,0xad,0x8d,0x45,0xb8,0x38,0x90,0x1,0x36,0x0,0x73,0x46,0xf8,0x76,0x81,0x37,0xa0,0x26,0x72,0xb4,0xa7,0x4d,0x2c,0x34,0x22,0xf3,0xe0,0x8c,0x9,0x2,0x31,0xf2,0x28,0xe4,0xe2,0x7f,0xea,0x13,0x64,0x47,0x6c,0x83,0x36,0x6d,0xd2,0x40,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+
+static const unsigned char graph_node_comment_focus_png[]={
+0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x6,0x62,0x4b,0x47,0x44,0x0,0x0,0x0,0x0,0x0,0x0,0xf9,0x43,0xbb,0x7f,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x9,0x2,0xe,0x16,0x22,0xbe,0xef,0xc2,0xe1,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x1,0x4a,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0xd7,0xbf,0x4b,0xdb,0x41,0x1c,0xc6,0xf1,0xd7,0x37,0x51,0x4,0x3,0xa,0xa2,0x20,0xd2,0xe2,0xe2,0x64,0x41,0xdc,0xdc,0xac,0xe0,0x54,0xdc,0xb2,0xe6,0x2f,0x10,0x1a,0xf0,0x4f,0x11,0x22,0xf8,0x17,0x64,0xcd,0x26,0x9d,0x1c,0x74,0x73,0x13,0x21,0x4e,0x2e,0xa5,0xa5,0x14,0xac,0x82,0x82,0x62,0xd0,0x7c,0xd3,0xa1,0x77,0x18,0x35,0xfe,0x48,0xa4,0xdb,0x3d,0x70,0xdc,0xf2,0x79,0xde,0x77,0xf7,0x39,0x38,0xee,0xc9,0xdc,0x2b,0x43,0x1,0xc5,0x30,0x67,0x1e,0xaa,0x83,0x1c,0xed,0x30,0x77,0x74,0x15,0x15,0x30,0x8a,0x9,0x4c,0x61,0xc,0xc3,0x8f,0x0,0xb7,0xb8,0xc4,0x29,0xce,0x71,0x8d,0x3c,0xae,0x5a,0xc2,0x5c,0xa3,0x5a,0x59,0xc7,0x17,0x7c,0xd0,0x5b,0x3f,0xf1,0xad,0x5c,0xab,0x6f,0xe3,0x4,0x57,0x59,0x58,0x69,0xb6,0x51,0xad,0x6c,0x62,0xed,0x77,0xf3,0xf0,0x87,0x17,0x34,0xfd,0x69,0xf1,0x23,0x76,0xca,0xb5,0xfa,0x6,0xbe,0xc7,0x33,0x4f,0x61,0xe5,0x35,0x33,0x84,0x9a,0x95,0xe0,0x29,0xc6,0x66,0x95,0xc2,0x78,0xab,0x62,0x7d,0x16,0x1,0x45,0xfd,0xab,0x18,0x1,0x9d,0x78,0x25,0x83,0xa8,0xe0,0x9d,0x4a,0x80,0x4,0x48,0x80,0x7f,0x1a,0xea,0xf1,0xda,0xc,0xe,0x38,0xd8,0xdf,0x5b,0x7d,0x8b,0x69,0x69,0xf9,0xf3,0x6e,0xba,0x85,0x4,0x48,0x80,0x4,0x48,0x80,0x4,0x48,0x80,0x4,0xf8,0xaf,0x80,0xac,0x47,0x46,0xec,0x7b,0x7,0xf9,0x0,0xde,0x3c,0x2,0x72,0xdc,0xa0,0xd5,0x87,0xb9,0x15,0x3c,0x79,0x21,0x44,0xd9,0x33,0x34,0xbb,0x3f,0x4f,0xaf,0x7c,0xb0,0x9a,0xc1,0xd3,0x8e,0xc9,0x75,0x1c,0xb,0x8d,0x6a,0x65,0xb,0xf3,0x2f,0x34,0x37,0xc7,0x71,0xb9,0x56,0xff,0x8a,0x23,0x5c,0x64,0x5d,0x11,0x6e,0xc,0x33,0x98,0xc4,0xc8,0x33,0xe1,0xbb,0x85,0x3f,0xf8,0x15,0x72,0x74,0x3b,0x7b,0xd4,0xd0,0xa1,0x98,0x7,0x9f,0xd9,0x41,0x27,0x1c,0xf9,0x6e,0xc0,0xc6,0x3f,0xd5,0x5f,0x9d,0x54,0x4e,0x15,0xfd,0xeb,0xb4,0x4f,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+
static const unsigned char graph_node_default_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,0x3,0x0,0x0,0x0,0x28,0x2d,0xf,0x53,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,0x39,0x50,0x4c,0x54,0x45,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x12,0x19,0xe,0xb,0x10,0xe,0xb,0x10,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x16,0x12,0x19,0x0,0x0,0x0,0x19,0x15,0x1c,0x24,0x1e,0x27,0x16,0x12,0x19,0xff,0xff,0xff,0x2b,0x4d,0xfd,0x66,0x0,0x0,0x0,0xf,0x74,0x52,0x4e,0x53,0x0,0x46,0x47,0x3f,0x2b,0x11,0x3,0xfd,0xd3,0xcd,0x2a,0x73,0x45,0xf8,0x3d,0x3f,0x57,0xda,0x84,0x0,0x0,0x0,0x1,0x62,0x4b,0x47,0x44,0x12,0x7b,0xbc,0x6c,0x0,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x6,0x16,0x12,0x2b,0x4,0x4e,0x1d,0x2,0xaf,0x0,0x0,0x0,0x38,0x49,0x44,0x41,0x54,0x18,0xd3,0x63,0x60,0x64,0x2,0x2,0x46,0x8,0xc9,0xcc,0xc2,0xca,0xc6,0xc0,0x8f,0x4,0xd8,0x39,0x98,0x59,0x19,0x50,0x80,0x0,0x27,0x17,0xaa,0x0,0x83,0x20,0x37,0x9a,0x0,0x3f,0xd3,0xc0,0x8,0xf0,0xa0,0x9,0xf0,0xf2,0x61,0x3a,0x1d,0xc3,0x73,0xe8,0xde,0x7,0x0,0x89,0x4d,0x2,0xf2,0x16,0xd3,0x74,0x45,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
};
@@ -130,7 +140,7 @@ static const unsigned char graph_node_position_png[]={
static const unsigned char graph_node_selected_png[]={
-0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x6,0xc,0x29,0x12,0x71,0x6e,0xb2,0xf8,0x0,0x0,0x3,0x37,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0x4f,0x88,0xdc,0x74,0x14,0xc7,0xbf,0xef,0x97,0x7f,0x9b,0xcc,0xee,0xec,0x64,0x64,0x76,0x5,0xd1,0xd5,0xc2,0x6e,0x41,0x8f,0xbd,0xef,0x49,0x7a,0x10,0xa,0xeb,0x61,0xa1,0xb5,0x16,0xc4,0xa3,0x87,0xbd,0xb9,0x17,0x8f,0x5e,0xa4,0xc7,0x16,0xbc,0x8,0xa2,0xdb,0x16,0xf,0x7b,0xb0,0x50,0x28,0x54,0x7a,0xea,0xdd,0xa3,0x82,0x16,0x14,0x5,0xc1,0xd9,0xe9,0x4e,0x32,0x3b,0xc9,0x64,0x26,0xbf,0xe4,0xf7,0x3c,0x24,0xd9,0x26,0x99,0x35,0x73,0xf0,0x26,0xf3,0x60,0x66,0x12,0xe6,0xbd,0xcf,0xf7,0xbd,0xef,0xef,0x17,0xc8,0x8f,0x98,0x99,0x0,0x88,0x47,0x8f,0x7e,0xb4,0x92,0xa1,0x67,0xf,0xcf,0x6,0x96,0x62,0x25,0xa4,0x8c,0x9,0xa5,0x30,0xc,0x93,0x5,0x9,0xd5,0x6d,0xf7,0x66,0x7a,0xd7,0x8d,0xae,0x5d,0xbb,0x32,0x3,0xa0,0x88,0x99,0xb5,0x87,0xdf,0x3c,0x5c,0x1b,0x85,0x93,0xd7,0x86,0xbe,0x7f,0x69,0x34,0xf2,0x36,0x83,0x30,0x70,0xe2,0x38,0xd6,0xcb,0x0,0xd3,0x34,0x93,0xd5,0xd6,0xea,0x64,0x7d,0xdd,0xed,0x77,0x3b,0x9d,0xdf,0xd6,0x5b,0xce,0x5f,0x7b,0x1f,0xed,0x8d,0xe9,0xe8,0xe8,0x49,0x2b,0x1e,0xf6,0xdf,0xf2,0x46,0xc3,0xdd,0xf7,0x6f,0xec,0xde,0x31,0x2d,0x5d,0x43,0x43,0xc4,0xb3,0x24,0xfd,0xfe,0xbb,0x67,0x7,0xee,0x7a,0xf7,0x99,0xd9,0xdd,0xfc,0x5d,0x48,0xcf,0x77,0xfa,0x2f,0x4e,0x76,0xf6,0xae,0xef,0xde,0x65,0x66,0x6d,0x7a,0xda,0x46,0x12,0xb8,0x48,0xc3,0x6e,0xe5,0x93,0x4,0x2e,0xa6,0xa7,0x6d,0x30,0xb3,0xb6,0x77,0x7d,0xf7,0x6e,0xff,0xc5,0xc9,0x8e,0xf4,0x7c,0x47,0x8f,0x93,0xc8,0xc,0x83,0xf1,0x86,0xb5,0xa2,0x8b,0x99,0xb7,0x6,0x12,0x84,0x44,0x2a,0x50,0x4d,0x99,0x1,0x90,0x20,0x20,0xea,0xc2,0x72,0xc7,0x22,0xc,0xc6,0x1b,0xb1,0x1b,0x99,0x42,0xb1,0x12,0x93,0x68,0x62,0x3,0x40,0x2a,0x19,0xcc,0x79,0xb1,0xaa,0x56,0x13,0x18,0xcc,0x8c,0x34,0x61,0x0,0xc0,0x24,0x9a,0xd8,0x8a,0x95,0x10,0x52,0x4a,0x4a,0x91,0x12,0x0,0x30,0x65,0xba,0xcc,0xc,0x88,0x5c,0x16,0x0,0x8,0x60,0x5,0x80,0x19,0xe0,0x2c,0x27,0x45,0x4a,0x52,0x4a,0xd2,0xd,0xc3,0x60,0xa4,0x79,0xa2,0x62,0x30,0x8,0x20,0xc6,0xf9,0xc,0x39,0x84,0x99,0x2b,0xbf,0x45,0x4d,0x65,0xa9,0x98,0x19,0x20,0x2,0xc0,0x28,0xf2,0xea,0xc1,0xb5,0x3f,0xf4,0xda,0xbf,0x60,0x95,0x27,0x10,0x97,0xdc,0x2b,0x75,0xd3,0x4,0xe0,0x4c,0xbb,0x7c,0x93,0x15,0xab,0x97,0x90,0x7a,0x67,0x15,0x80,0x52,0xa5,0xd9,0x73,0xf7,0x88,0x73,0x5f,0x98,0x41,0x8b,0x47,0x28,0x4b,0x50,0xa9,0x9f,0xec,0x5b,0x2d,0xea,0x0,0xac,0xc0,0xaa,0x66,0xff,0xbc,0x8b,0xd,0x1e,0xe4,0x73,0xe7,0x4d,0x23,0xdf,0x3e,0xc5,0x30,0xd9,0x55,0x53,0x7,0x19,0x40,0xe5,0x85,0x25,0x35,0x7a,0x39,0xbb,0x6a,0x6,0xa8,0xac,0xbe,0xa2,0x5d,0x56,0xa5,0xc5,0xcb,0x48,0xc5,0x7e,0xa0,0x62,0x33,0x51,0xe1,0x67,0xfe,0x3c,0x34,0x75,0xa0,0xb2,0xc2,0x39,0x25,0x85,0xf3,0x15,0xa9,0x5b,0x3b,0xbf,0x95,0xb9,0xfe,0x28,0x36,0xc7,0xbc,0x89,0x75,0x8d,0x92,0x91,0xb5,0x8b,0x79,0xc0,0x67,0x9f,0x7f,0x8a,0x9f,0x7f,0xfd,0xa9,0x51,0xf1,0xed,0x9d,0x77,0xf0,0xd5,0xb7,0x5f,0x5c,0xc,0xb8,0xb4,0xb5,0xd,0x4d,0x18,0x8d,0x80,0xad,0xd7,0xdf,0xfc,0xf7,0xe,0xc2,0x30,0xc0,0xe8,0xcc,0x6f,0x4,0x84,0x61,0x50,0xb9,0x17,0xf8,0x8f,0xb1,0x4,0x2c,0x1,0x4b,0xc0,0x12,0xb0,0x4,0x2c,0x1,0x4b,0xc0,0xff,0xf,0x20,0xa5,0x24,0x68,0x17,0xbe,0xfe,0x5c,0x1c,0x45,0x8e,0x56,0xea,0x40,0x83,0xc6,0x0,0x60,0xe8,0xfa,0xc2,0xfa,0x22,0xa7,0xa8,0x11,0x96,0x69,0xa5,0x96,0x69,0xc6,0x0,0xe0,0xd8,0xab,0xb,0x1,0x45,0x8e,0x65,0x9a,0xb1,0x65,0x5a,0xa9,0x6e,0xea,0x76,0xbc,0x62,0x3b,0x83,0xd9,0x54,0xf2,0xc1,0xe1,0x7,0x74,0xe7,0x36,0x61,0x12,0x8d,0x21,0x93,0xa4,0x72,0xe8,0x32,0x74,0x1d,0x8e,0xbd,0x86,0x83,0xc3,0x1b,0x98,0x4d,0x25,0xaf,0xd8,0xce,0xc0,0xd4,0xed,0x98,0x8e,0x8e,0x9e,0xb4,0x4e,0xff,0x7c,0xbe,0xed,0x9f,0x79,0xef,0x7e,0xf8,0xf1,0x7b,0xb7,0x2d,0xdb,0x68,0x74,0x62,0x16,0x49,0xbe,0xff,0xf5,0xe3,0xc3,0x4e,0xdb,0x7d,0xfa,0xca,0x1b,0xdb,0xcf,0x89,0x99,0xb5,0x7,0x5f,0x3e,0x68,0xf,0x3c,0x7f,0xcb,0xf3,0xfd,0xcb,0x93,0x28,0xdc,0x90,0x52,0x1a,0x4a,0x55,0xdf,0x56,0x85,0x10,0x30,0xc,0x43,0x3a,0x76,0xeb,0xc4,0xed,0x74,0x7e,0xe9,0xb9,0x9d,0x3f,0x6e,0x7e,0x72,0xf3,0x8c,0x8a,0xd3,0xfb,0xbd,0x7b,0x3f,0xac,0x4,0x7f,0xf7,0x5b,0x52,0xcd,0x4c,0x66,0x75,0xe1,0xf2,0x12,0x9,0x65,0x8,0x2b,0x5e,0x7d,0x75,0x33,0xbc,0x75,0xeb,0xea,0x14,0xc0,0xf9,0xf1,0x4,0xcc,0x4c,0xc7,0xc7,0xc7,0xa2,0xd7,0xeb,0x35,0x8e,0x30,0x18,0xc,0x78,0x7f,0x7f,0x5f,0x11,0x65,0xc7,0xba,0x7f,0x0,0xff,0xc4,0xaa,0x19,0xfd,0xaf,0x1e,0xb7,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x40,0x8,0x6,0x0,0x0,0x0,0x13,0x7d,0xf7,0x96,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x17,0xd,0x4,0x3b,0xfa,0x91,0x2a,0xb6,0x0,0x0,0x3,0x44,0x49,0x44,0x41,0x54,0x58,0xc3,0xed,0x97,0x3f,0x68,0xdc,0x76,0x14,0xc7,0xbf,0xef,0xa7,0x9f,0x7e,0x3a,0xdd,0x39,0xf6,0xdd,0x95,0xb3,0x3,0xc1,0x75,0x1b,0x70,0xa,0xe9,0x98,0x25,0x93,0x87,0x52,0x3a,0x4,0x2,0xce,0xe0,0xd2,0x34,0x35,0x94,0x8e,0x1d,0xbc,0xd5,0x4b,0xc7,0x2e,0x25,0x63,0x2,0x5d,0xa,0xa5,0xb1,0x1b,0x2,0xf5,0xd0,0x40,0xa0,0x90,0x10,0x3a,0x64,0xca,0x92,0x31,0x81,0x24,0xd0,0xd2,0x9a,0x40,0x2f,0x17,0xdf,0x1f,0xfb,0x74,0xf2,0xe9,0x27,0xfd,0x5e,0x7,0x49,0xb6,0x4e,0xe7,0xea,0x86,0x6e,0xe5,0x1e,0xdc,0x49,0x42,0xef,0x7d,0xde,0xf7,0x7d,0xf5,0x13,0xe8,0x47,0xcc,0x4c,0x0,0xc4,0xbd,0x7b,0x4f,0x9c,0xb0,0xdd,0x71,0xdb,0xfb,0x2d,0xc7,0xb0,0x11,0x5a,0x7,0x84,0x4c,0xd8,0xb6,0x62,0x41,0xc2,0xd4,0x67,0x1b,0x43,0x59,0xaf,0xf9,0x97,0x2f,0x5f,0x18,0x2,0x30,0xc4,0xcc,0xd6,0xdd,0x1f,0xef,0x9e,0xea,0x79,0x83,0x33,0xed,0x6e,0xf7,0x6c,0xaf,0xd7,0x59,0xe8,0x7b,0xfd,0x72,0x10,0x4,0x32,0xb,0x50,0x4a,0x85,0x33,0x95,0x99,0xc1,0xdc,0x5c,0xad,0x59,0xaf,0x56,0x7f,0x9f,0xab,0x94,0x5f,0xad,0x7e,0xbe,0x7a,0x40,0x5b,0x5b,0xf7,0x2b,0x41,0xbb,0xf9,0x6e,0xa7,0xd7,0x5e,0xb9,0x72,0x75,0xe5,0x86,0x72,0xa4,0x85,0x82,0x8,0x86,0x61,0xf4,0xcb,0x9d,0x47,0x1b,0xb5,0xb9,0xfa,0x23,0x55,0x5f,0xf8,0x43,0xea,0x4e,0xb7,0xdc,0x7c,0xf3,0xfa,0xdc,0xc7,0xeb,0x1f,0xdc,0x64,0x66,0x71,0xb8,0x37,0xbb,0x2b,0x1d,0xb,0x44,0x23,0x13,0x80,0x99,0x11,0xe,0x23,0x50,0x65,0x6f,0x71,0xf5,0x93,0x95,0x9b,0x3f,0x6f,0xff,0xb6,0x76,0x9a,0x9c,0xa6,0x8,0x42,0x5f,0x79,0xfd,0x83,0x79,0xa7,0x24,0x5,0xfc,0xfa,0x2e,0x9,0x42,0xa8,0xd,0xc2,0x20,0x1a,0xfd,0x69,0x3,0x12,0x4,0xf8,0xf5,0x5d,0xa7,0x24,0x85,0xd7,0x3f,0x98,0xf,0x42,0x5f,0x9,0xc3,0x46,0xc,0xfc,0x81,0xb,0x0,0x91,0x66,0x30,0x1b,0x10,0x0,0x98,0x6c,0x7b,0x80,0xc0,0x60,0x66,0x44,0x21,0x3,0x0,0x6,0xfe,0xc0,0x35,0x6c,0x84,0xd0,0x5a,0x53,0x84,0x88,0x0,0x80,0x13,0xd9,0xcc,0xc,0x88,0xb8,0x10,0x0,0x40,0x0,0x1b,0x0,0xcc,0x0,0xc7,0x39,0x11,0x22,0xd2,0x5a,0x93,0xb4,0x6d,0x9b,0x11,0x25,0x89,0x86,0xc1,0x20,0x80,0x18,0xa0,0xe3,0xee,0x47,0xd0,0xcc,0x31,0xad,0x91,0x79,0xa3,0x40,0x4,0x80,0x91,0xe6,0xe5,0x83,0x73,0x37,0x64,0xee,0x2e,0xd8,0x24,0x9,0xc4,0xc7,0xa,0xb2,0x6a,0x8a,0x0,0x1c,0xf7,0xce,0x5e,0xc4,0xc5,0xe6,0x18,0x92,0x57,0x36,0x2,0x30,0x26,0x33,0x7b,0xe2,0x1e,0x71,0xe2,0xb,0x33,0x68,0xf2,0x8,0xd9,0x16,0x94,0xd1,0x13,0xff,0x9b,0x49,0xa,0xc0,0x6,0x6c,0x72,0xf6,0x8f,0xbb,0x58,0xe0,0x41,0x32,0x77,0x22,0x1a,0xc9,0xf2,0x49,0x87,0x89,0xcf,0x8a,0x14,0xc4,0x0,0x93,0x14,0x66,0xba,0xd1,0xf1,0xec,0xa6,0x18,0x60,0xe2,0xfa,0x91,0xde,0xd9,0xae,0x34,0xf9,0x31,0x52,0xba,0x1e,0x28,0x5d,0x4c,0x94,0xfa,0x99,0xbc,0xf,0x45,0xa,0x4c,0x5c,0x38,0xd6,0xc9,0xe0,0xe8,0x89,0xe4,0xad,0x1d,0x5f,0xca,0x9c,0x7f,0x15,0x8b,0x63,0xdc,0xc4,0x7c,0x8f,0x8c,0x91,0xb9,0x93,0x71,0xc0,0xd7,0xdf,0x7c,0xf5,0xea,0xd9,0x8b,0xa7,0x85,0x1d,0xcf,0x9f,0x7b,0x1f,0xdf,0xdf,0xfa,0x76,0xf1,0x44,0xc0,0xd9,0xa5,0x65,0x58,0xc2,0x2e,0x4,0x2c,0x2d,0xbe,0xf3,0xef,0xa,0x3c,0xaf,0x8f,0xde,0x7e,0xb7,0x10,0xe0,0x79,0xfd,0x91,0x6b,0x81,0xff,0x18,0x53,0xc0,0x14,0x30,0x5,0x4c,0x1,0x53,0xc0,0x14,0x30,0x5,0xfc,0xff,0x0,0x5a,0x6b,0x82,0x75,0xe2,0xe7,0xcf,0xc9,0x91,0xe6,0x58,0x19,0x5,0x16,0x2c,0x6,0x0,0x5b,0xca,0x89,0xf5,0x69,0x4e,0x5a,0x23,0x1c,0xe5,0x44,0x8e,0x52,0x1,0x0,0x94,0xdd,0x99,0x89,0x80,0x34,0xc7,0x51,0x2a,0x70,0x94,0x13,0x49,0x25,0xdd,0xa0,0xe4,0x96,0x5b,0xc3,0x43,0xcd,0x1b,0x9b,0x9f,0x5e,0xbc,0x71,0x9d,0x1e,0xf,0xfc,0x3,0xe8,0x30,0x1c,0xd9,0x74,0xd9,0x52,0xa2,0xec,0x9e,0xc2,0xc6,0xe6,0xd5,0x8b,0xc3,0x43,0xcd,0x25,0xb7,0xdc,0x52,0xd2,0xd,0x68,0x6b,0xeb,0x7e,0x65,0xef,0xaf,0x97,0xcb,0xdd,0xfd,0xce,0x87,0x9f,0x7d,0x71,0xe9,0xba,0xe3,0xda,0x85,0x4e,0xc,0x7d,0xcd,0x3f,0xfd,0xf0,0xeb,0x66,0x75,0xb6,0xf6,0xf0,0xad,0xb7,0x97,0x5f,0x12,0x33,0x5b,0xb7,0xbf,0xbb,0x3d,0xdb,0xea,0x74,0x97,0x3a,0xdd,0xee,0x7b,0x3,0xdf,0x9b,0xd7,0x5a,0xdb,0xc6,0x8c,0x7e,0xad,0xa,0x21,0x60,0xdb,0xb6,0x2e,0xbb,0x95,0xd7,0xb5,0x6a,0xf5,0x79,0xa3,0x56,0xfd,0xf3,0xda,0x97,0xd7,0xf6,0x29,0xdd,0xbd,0x6f,0x6f,0x3f,0x28,0xf5,0xff,0x6e,0x56,0xb4,0x19,0x2a,0x66,0x73,0xe2,0xe3,0x25,0x12,0xc6,0x16,0x4e,0x30,0x73,0x7a,0xc1,0x5b,0x5f,0xff,0xe8,0x10,0xc0,0xd1,0xf6,0x4,0xcc,0x4c,0x3b,0x3b,0x3b,0xa2,0xd1,0x68,0x14,0x8e,0xd0,0x6a,0xb5,0x78,0x6d,0x6d,0xcd,0x10,0xc5,0xdb,0xba,0x7f,0x0,0xb2,0x1f,0xaf,0x82,0x62,0x7a,0x69,0xbb,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
};
@@ -544,6 +554,11 @@ static const unsigned char vsplitter_png[]={
};
+static const unsigned char window_resizer_png[]={
+0x89,0x50,0x4e,0x47,0xd,0xa,0x1a,0xa,0x0,0x0,0x0,0xd,0x49,0x48,0x44,0x52,0x0,0x0,0x0,0x10,0x0,0x0,0x0,0x10,0x8,0x6,0x0,0x0,0x0,0x1f,0xf3,0xff,0x61,0x0,0x0,0x0,0x9,0x70,0x48,0x59,0x73,0x0,0x0,0xb,0x13,0x0,0x0,0xb,0x13,0x1,0x0,0x9a,0x9c,0x18,0x0,0x0,0x0,0x7,0x74,0x49,0x4d,0x45,0x7,0xe0,0x8,0x19,0x11,0x33,0x13,0xaa,0xc0,0xf,0x5f,0x0,0x0,0x0,0x19,0x74,0x45,0x58,0x74,0x43,0x6f,0x6d,0x6d,0x65,0x6e,0x74,0x0,0x43,0x72,0x65,0x61,0x74,0x65,0x64,0x20,0x77,0x69,0x74,0x68,0x20,0x47,0x49,0x4d,0x50,0x57,0x81,0xe,0x17,0x0,0x0,0x0,0x2f,0x49,0x44,0x41,0x54,0x38,0xcb,0x63,0x60,0x18,0x5,0x24,0x81,0x17,0x2f,0x5e,0xf4,0xa3,0x8b,0x31,0x91,0xa2,0xb9,0xb9,0xb9,0x99,0x7c,0x9b,0xb3,0xb3,0xb3,0xfb,0x87,0x81,0x66,0x6c,0x81,0x48,0x92,0x66,0xa2,0x5c,0x43,0x91,0xe6,0x11,0xa,0x0,0x73,0x5b,0x34,0x19,0x10,0xa0,0xb6,0x7d,0x0,0x0,0x0,0x0,0x49,0x45,0x4e,0x44,0xae,0x42,0x60,0x82
+};
+
+
diff --git a/scene/resources/default_theme/window_resizer.png b/scene/resources/default_theme/window_resizer.png
new file mode 100644
index 0000000000..ed51968c4e
--- /dev/null
+++ b/scene/resources/default_theme/window_resizer.png
Binary files differ
diff --git a/scene/resources/scene_format_text.cpp b/scene/resources/scene_format_text.cpp
index 7bb9ca90ae..615c092dad 100644
--- a/scene/resources/scene_format_text.cpp
+++ b/scene/resources/scene_format_text.cpp
@@ -1289,6 +1289,10 @@ Error ResourceFormatSaverTextInstance::save(const String &p_path,const RES& p_re
}
internal_resources[res]=idx;
+#ifdef TOOLS_ENABLED
+ res->set_edited(false);
+#endif
+
}
diff --git a/servers/physics_2d/physics_2d_server_sw.cpp b/servers/physics_2d/physics_2d_server_sw.cpp
index 54cd929c2f..8e92a475ab 100644
--- a/servers/physics_2d/physics_2d_server_sw.cpp
+++ b/servers/physics_2d/physics_2d_server_sw.cpp
@@ -1016,14 +1016,14 @@ void Physics2DServerSW::body_set_pickable(RID p_body,bool p_pickable) {
}
-bool Physics2DServerSW::body_test_motion(RID p_body,const Vector2& p_motion,float p_margin,MotionResult *r_result) {
+bool Physics2DServerSW::body_test_motion(RID p_body, const Matrix32 &p_from, const Vector2& p_motion, float p_margin, MotionResult *r_result) {
Body2DSW *body = body_owner.get(p_body);
ERR_FAIL_COND_V(!body,false);
ERR_FAIL_COND_V(!body->get_space(),false);
ERR_FAIL_COND_V(body->get_space()->is_locked(),false);
- return body->get_space()->test_body_motion(body,p_motion,p_margin,r_result);
+ return body->get_space()->test_body_motion(body,p_from,p_motion,p_margin,r_result);
}
diff --git a/servers/physics_2d/physics_2d_server_sw.h b/servers/physics_2d/physics_2d_server_sw.h
index d557688b91..1dc735289a 100644
--- a/servers/physics_2d/physics_2d_server_sw.h
+++ b/servers/physics_2d/physics_2d_server_sw.h
@@ -236,7 +236,7 @@ public:
virtual void body_set_pickable(RID p_body,bool p_pickable);
- virtual bool body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL);
+ virtual bool body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL);
/* JOINT API */
diff --git a/servers/physics_2d/physics_2d_server_wrap_mt.h b/servers/physics_2d/physics_2d_server_wrap_mt.h
index fd98da2d9c..57da958f9a 100644
--- a/servers/physics_2d/physics_2d_server_wrap_mt.h
+++ b/servers/physics_2d/physics_2d_server_wrap_mt.h
@@ -266,10 +266,10 @@ public:
FUNC2(body_set_pickable,RID,bool);
- bool body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL) {
+ bool body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL) {
ERR_FAIL_COND_V(main_thread!=Thread::get_caller_ID(),false);
- return physics_2d_server->body_test_motion(p_body,p_motion,p_margin,r_result);
+ return physics_2d_server->body_test_motion(p_body,p_from,p_motion,p_margin,r_result);
}
/* JOINT API */
diff --git a/servers/physics_2d/space_2d_sw.cpp b/servers/physics_2d/space_2d_sw.cpp
index 5fde6f567b..d0dcee7763 100644
--- a/servers/physics_2d/space_2d_sw.cpp
+++ b/servers/physics_2d/space_2d_sw.cpp
@@ -589,7 +589,7 @@ int Space2DSW::_cull_aabb_for_body(Body2DSW *p_body,const Rect2& p_aabb) {
return amount;
}
-bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p_margin,Physics2DServer::MotionResult *r_result) {
+bool Space2DSW::test_body_motion(Body2DSW *p_body, const Matrix32 &p_from, const Vector2&p_motion, float p_margin, Physics2DServer::MotionResult *r_result) {
//give me back regular physics engine logic
//this is madness
@@ -598,6 +598,11 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p
//this took about a week to get right..
//but is it right? who knows at this point..
+ if (r_result) {
+ r_result->collider_id=0;
+ r_result->collider_shape=0;
+
+ }
Rect2 body_aabb;
for(int i=0;i<p_body->get_shape_count();i++) {
@@ -610,8 +615,7 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p
body_aabb=body_aabb.grow(p_margin);
-
- Matrix32 body_transform = p_body->get_transform();
+ Matrix32 body_transform = p_from;
{
//STEP 1, FREE BODY IF STUCK
@@ -681,6 +685,17 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p
Vector2 a = sr[i*2+0];
Vector2 b = sr[i*2+1];
+#if 0
+ Vector2 rel = b-a;
+ float d = rel.length();
+ if (d==0)
+ continue;
+
+ Vector2 n = rel/d;
+ float traveled = n.dot(recover_motion);
+ a+=n*traveled;
+
+#endif
// float d = a.distance_to(b);
//if (d<margin)
@@ -833,8 +848,9 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p
collided=false;
if (r_result) {
- r_result->motion=p_motion+(body_transform.elements[2]-p_body->get_transform().elements[2]);
- r_result->remainder=Vector2();
+ r_result->motion=p_motion;
+ r_result->remainder=Vector2();
+ r_result->motion+=(body_transform.elements[2]-p_from.elements[2]);
}
} else {
@@ -895,16 +911,19 @@ bool Space2DSW::test_body_motion(Body2DSW *p_body,const Vector2&p_motion,float p
Vector2 rel_vec = r_result->collision_point-body->get_transform().get_origin();
r_result->collider_velocity = Vector2(-body->get_angular_velocity() * rel_vec.y, body->get_angular_velocity() * rel_vec.x) + body->get_linear_velocity();
- r_result->motion=safe*p_motion+(body_transform.elements[2]-p_body->get_transform().elements[2]);
+ r_result->motion=safe*p_motion;
r_result->remainder=p_motion - safe * p_motion;
+ r_result->motion+=(body_transform.elements[2]-p_from.elements[2]);
+
}
collided=true;
} else {
if (r_result) {
- r_result->motion=p_motion+(body_transform.elements[2]-p_body->get_transform().elements[2]);
+ r_result->motion=p_motion;
r_result->remainder=Vector2();
+ r_result->motion+=(body_transform.elements[2]-p_from.elements[2]);
}
collided=false;
diff --git a/servers/physics_2d/space_2d_sw.h b/servers/physics_2d/space_2d_sw.h
index f8e1f32838..f58e8c3fe7 100644
--- a/servers/physics_2d/space_2d_sw.h
+++ b/servers/physics_2d/space_2d_sw.h
@@ -184,7 +184,7 @@ public:
int get_collision_pairs() const { return collision_pairs; }
- bool test_body_motion(Body2DSW *p_body, const Vector2&p_motion, float p_margin, Physics2DServer::MotionResult *r_result);
+ bool test_body_motion(Body2DSW *p_body, const Matrix32 &p_from, const Vector2&p_motion, float p_margin, Physics2DServer::MotionResult *r_result);
void set_debug_contacts(int p_amount) { contact_debug.resize(p_amount); }
diff --git a/servers/physics_2d_server.cpp b/servers/physics_2d_server.cpp
index e41461c11f..a77b13eb21 100644
--- a/servers/physics_2d_server.cpp
+++ b/servers/physics_2d_server.cpp
@@ -493,12 +493,12 @@ Physics2DTestMotionResult::Physics2DTestMotionResult(){
-bool Physics2DServer::_body_test_motion(RID p_body,const Vector2& p_motion,float p_margin,const Ref<Physics2DTestMotionResult>& p_result) {
+bool Physics2DServer::_body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin,const Ref<Physics2DTestMotionResult>& p_result) {
MotionResult *r=NULL;
if (p_result.is_valid())
r=p_result->get_result_ptr();
- return body_test_motion(p_body,p_motion,p_margin,r);
+ return body_test_motion(p_body,p_from,p_motion,p_margin,r);
}
void Physics2DServer::_bind_methods() {
@@ -619,7 +619,7 @@ void Physics2DServer::_bind_methods() {
ObjectTypeDB::bind_method(_MD("body_set_force_integration_callback","body","receiver","method","userdata"),&Physics2DServer::body_set_force_integration_callback,DEFVAL(Variant()));
- ObjectTypeDB::bind_method(_MD("body_test_motion","body","motion","margin","result:Physics2DTestMotionResult"),&Physics2DServer::_body_test_motion,DEFVAL(0.08),DEFVAL(Variant()));
+ ObjectTypeDB::bind_method(_MD("body_test_motion","body","from","motion","margin","result:Physics2DTestMotionResult"),&Physics2DServer::_body_test_motion,DEFVAL(0.08),DEFVAL(Variant()));
/* JOINT API */
diff --git a/servers/physics_2d_server.h b/servers/physics_2d_server.h
index 53c5a9ecc0..10707e9314 100644
--- a/servers/physics_2d_server.h
+++ b/servers/physics_2d_server.h
@@ -238,7 +238,7 @@ class Physics2DServer : public Object {
static Physics2DServer * singleton;
- virtual bool _body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.08,const Ref<Physics2DTestMotionResult>& p_result=Ref<Physics2DTestMotionResult>());
+ virtual bool _body_test_motion(RID p_body, const Matrix32 &p_from, const Vector2& p_motion, float p_margin=0.08, const Ref<Physics2DTestMotionResult>& p_result=Ref<Physics2DTestMotionResult>());
protected:
static void _bind_methods();
@@ -497,7 +497,7 @@ public:
Variant collider_metadata;
};
- virtual bool body_test_motion(RID p_body,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL)=0;
+ virtual bool body_test_motion(RID p_body,const Matrix32& p_from,const Vector2& p_motion,float p_margin=0.001,MotionResult *r_result=NULL)=0;
/* JOINT API */
diff --git a/servers/visual/rasterizer.h b/servers/visual/rasterizer.h
index 50ec6792cc..8cc567072f 100644
--- a/servers/visual/rasterizer.h
+++ b/servers/visual/rasterizer.h
@@ -685,6 +685,7 @@ public:
Point2 from,to;
Color color;
float width;
+ bool antialiased;
CommandLine() { type = TYPE_LINE; }
};
@@ -948,7 +949,7 @@ public:
virtual void canvas_begin_rect(const Matrix32& p_transform)=0;
virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect)=0;
virtual void canvas_end_rect()=0;
- virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width)=0;
+ virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased)=0;
virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate)=0;
virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1))=0;
virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width)=0;
diff --git a/servers/visual/rasterizer_dummy.cpp b/servers/visual/rasterizer_dummy.cpp
index 0e71d224d5..edbdc2fe23 100644
--- a/servers/visual/rasterizer_dummy.cpp
+++ b/servers/visual/rasterizer_dummy.cpp
@@ -1615,7 +1615,7 @@ void RasterizerDummy::canvas_end_rect() {
}
-void RasterizerDummy::canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) {
+void RasterizerDummy::canvas_draw_line(const Point2& p_from, const Point2& p_to, const Color& p_color, float p_width, bool p_antialiased) {
diff --git a/servers/visual/rasterizer_dummy.h b/servers/visual/rasterizer_dummy.h
index ac320e55f9..cac36eb6fc 100644
--- a/servers/visual/rasterizer_dummy.h
+++ b/servers/visual/rasterizer_dummy.h
@@ -706,7 +706,7 @@ public:
virtual void canvas_begin_rect(const Matrix32& p_transform);
virtual void canvas_set_clip(bool p_clip, const Rect2& p_rect);
virtual void canvas_end_rect();
- virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width);
+ virtual void canvas_draw_line(const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased);
virtual void canvas_draw_rect(const Rect2& p_rect, int p_flags, const Rect2& p_source,RID p_texture,const Color& p_modulate);
virtual void canvas_draw_style_box(const Rect2& p_rect, const Rect2& p_src_region, RID p_texture,const float *p_margins, bool p_draw_center=true,const Color& p_modulate=Color(1,1,1));
virtual void canvas_draw_primitive(const Vector<Point2>& p_points, const Vector<Color>& p_colors,const Vector<Point2>& p_uvs, RID p_texture,float p_width);
diff --git a/servers/visual/visual_server_raster.cpp b/servers/visual/visual_server_raster.cpp
index d89ea887fa..f7614ac080 100644
--- a/servers/visual/visual_server_raster.cpp
+++ b/servers/visual/visual_server_raster.cpp
@@ -3629,7 +3629,7 @@ float VisualServerRaster::canvas_item_get_self_opacity(RID p_item, float p_self_
}
-void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width) {
+void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width,bool p_antialiased) {
VS_CHANGED;
CanvasItem *canvas_item = canvas_item_owner.get( p_item );
ERR_FAIL_COND(!canvas_item);
@@ -3640,6 +3640,7 @@ void VisualServerRaster::canvas_item_add_line(RID p_item, const Point2& p_from,
line->from=p_from;
line->to=p_to;
line->width=p_width;
+ line->antialiased=p_antialiased;
canvas_item->rect_dirty=true;
diff --git a/servers/visual/visual_server_raster.h b/servers/visual/visual_server_raster.h
index 228a4a7c44..496820f4a8 100644
--- a/servers/visual/visual_server_raster.h
+++ b/servers/visual/visual_server_raster.h
@@ -1168,7 +1168,7 @@ public:
virtual void canvas_item_attach_viewport(RID p_item, RID p_viewport);
- virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0);
+ virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to, const Color& p_color, float p_width=1.0, bool p_antialiased=false);
virtual void canvas_item_add_rect(RID p_item, const Rect2& p_rect, const Color& p_color);
virtual void canvas_item_add_circle(RID p_item, const Point2& p_pos, float p_radius,const Color& p_color);
virtual void canvas_item_add_texture_rect(RID p_item, const Rect2& p_rect, RID p_texture,bool p_tile=false,const Color& p_modulate=Color(1,1,1),bool p_transpose=false);
diff --git a/servers/visual/visual_server_wrap_mt.h b/servers/visual/visual_server_wrap_mt.h
index 8c39b0bea1..b4e374dd6f 100644
--- a/servers/visual/visual_server_wrap_mt.h
+++ b/servers/visual/visual_server_wrap_mt.h
@@ -602,7 +602,7 @@ public:
FUNC2(canvas_item_attach_viewport,RID, RID );
- FUNC5(canvas_item_add_line,RID, const Point2& , const Point2& ,const Color& ,float );
+ FUNC6(canvas_item_add_line,RID, const Point2& , const Point2& ,const Color& ,float,bool);
FUNC3(canvas_item_add_rect,RID, const Rect2& , const Color& );
FUNC4(canvas_item_add_circle,RID, const Point2& , float ,const Color& );
FUNC6(canvas_item_add_texture_rect,RID, const Rect2& , RID ,bool ,const Color&,bool );
diff --git a/servers/visual_server.cpp b/servers/visual_server.cpp
index 9ec02f5071..f69580254c 100644
--- a/servers/visual_server.cpp
+++ b/servers/visual_server.cpp
@@ -532,7 +532,7 @@ void VisualServer::_bind_methods() {
ObjectTypeDB::bind_method(_MD("canvas_item_get_self_opacity"),&VisualServer::canvas_item_get_self_opacity);
ObjectTypeDB::bind_method(_MD("canvas_item_set_z"),&VisualServer::canvas_item_set_z);
- ObjectTypeDB::bind_method(_MD("canvas_item_add_line"),&VisualServer::canvas_item_add_line, DEFVAL(1.0));
+ ObjectTypeDB::bind_method(_MD("canvas_item_add_line"),&VisualServer::canvas_item_add_line, DEFVAL(1.0), DEFVAL(false));
ObjectTypeDB::bind_method(_MD("canvas_item_add_rect"),&VisualServer::canvas_item_add_rect);
ObjectTypeDB::bind_method(_MD("canvas_item_add_texture_rect"),&VisualServer::canvas_item_add_texture_rect, DEFVAL(Color(1,1,1)), DEFVAL(false));
ObjectTypeDB::bind_method(_MD("canvas_item_add_texture_rect_region"),&VisualServer::canvas_item_add_texture_rect_region, DEFVAL(Color(1,1,1)), DEFVAL(false));
diff --git a/servers/visual_server.h b/servers/visual_server.h
index 64318dfd72..2f3d8371f6 100644
--- a/servers/visual_server.h
+++ b/servers/visual_server.h
@@ -1020,7 +1020,7 @@ public:
virtual void canvas_item_set_on_top(RID p_item, bool p_on_top)=0;
virtual bool canvas_item_is_on_top(RID p_item) const=0;
- virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0)=0;
+ virtual void canvas_item_add_line(RID p_item, const Point2& p_from, const Point2& p_to,const Color& p_color,float p_width=1.0,bool p_antialiased=false)=0;
virtual void canvas_item_add_rect(RID p_item, const Rect2& p_rect, const Color& p_color)=0;
virtual void canvas_item_add_circle(RID p_item, const Point2& p_pos, float p_radius,const Color& p_color)=0;
virtual void canvas_item_add_texture_rect(RID p_item, const Rect2& p_rect, RID p_texture,bool p_tile=false,const Color& p_modulate=Color(1,1,1),bool p_transpose=false)=0;
diff --git a/tools/SCsub b/tools/SCsub
index f6c14a13fb..aaebab724a 100644
--- a/tools/SCsub
+++ b/tools/SCsub
@@ -115,10 +115,7 @@ if (env["tools"]!="no"):
env.Command('#tools/editor/builtin_fonts.h',flist,make_fonts_header)
SConscript('editor/SCsub');
- #SConscript('scintilla/SCsub');
SConscript('collada/SCsub');
- SConscript('docdump/SCsub');
- #SConscript('freetype/SCsub');
SConscript('doc/SCsub')
SConscript('pck/SCsub')
diff --git a/tools/addheader/files b/tools/addheader/files
deleted file mode 100644
index 7b0968236c..0000000000
--- a/tools/addheader/files
+++ /dev/null
@@ -1,158 +0,0 @@
-./scene/*.h
-./scene/*.cpp
-./scene/io/*.h
-./scene/io/*.cpp
-./scene/main/*.h
-./scene/main/*.cpp
-./scene/resources/*.h
-./scene/resources/*.cpp
-./scene/gui/*.h
-./scene/gui/*.cpp
-./scene/audio/*.h
-./scene/audio/*.cpp
-./scene/3d/*.h
-./scene/3d/*.cpp
-./scene/2d/*.h
-./scene/2d/*.cpp
-./scene/animation/*.h
-./scene/animation/*.cpp
-./bin/tests/*.h
-./bin/tests/*.cpp
-./main/*.h
-./main/*.cpp
-./modules/gridmap/*.h
-./modules/gridmap/*.cpp
-./servers/*.h
-./servers/*.cpp
-./servers/physics_2d/*.h
-./servers/physics_2d/*.cpp
-./servers/physics/*.h
-./servers/physics/*.cpp
-./servers/visual/*.h
-./servers/visual/*.cpp
-./servers/spatial_sound_2d/*.h
-./servers/spatial_sound_2d/*.cpp
-./servers/audio/*.h
-./servers/audio/*.cpp
-./tools/doc/doc_data.h
-./tools/doc/doc_data.cpp
-./tools/collada/collada.h
-./tools/collada/collada.cpp
-./tools/editor/*.h
-./tools/editor/*.cpp
-./tools/editor/plugins/*.h
-./tools/editor/plugins/*.cpp
-./tools/editor/io_plugins/*.h
-./tools/editor/io_plugins/*.cpp
-./tools/docdump/doc_dump.h
-./tools/docdump/doc_dump.cpp
-./core/*.h
-./core/*.cpp
-./core/io/object_format_binary.h
-./core/io/file_access_buffered_fa.h
-./core/io/file_access_buffered.h
-./core/io/resource_saver.h
-./core/io/file_access_compressed.cpp
-./core/io/object_format_xml.cpp
-./core/io/http_client.h
-./core/io/object_format_xml.h
-./core/io/compression.h
-./core/io/ip_address.h
-./core/io/file_access_pack.h
-./core/io/ip.h
-./core/io/tcp_server.h
-./core/io/tcp_server.cpp
-./core/io/packet_peer.cpp
-./core/io/marshalls.h
-./core/io/stream_peer.cpp
-./core/io/resource_loader.cpp
-./core/io/stream_peer_tcp.h
-./core/io/stream_peer_tcp.cpp
-./core/io/translation_loader_po.h
-./core/io/zip_io.h
-./core/io/ip_address.cpp
-./core/io/object_saver_base.cpp
-./core/io/object_loader.cpp
-./core/io/xml_parser.h
-./core/io/file_access_network.cpp
-./core/io/resource_loader.h
-./core/io/packet_peer.h
-./core/io/stream_peer.h
-./core/io/marshalls.cpp
-./core/io/config_file.h
-./core/io/ip.cpp
-./core/io/file_access_zip.cpp
-./core/io/resource_format_binary.h
-./core/io/image_loader.h
-./core/io/file_access_zip.h
-./core/io/http_client.cpp
-./core/io/file_access_memory.h
-./core/io/xml_parser.cpp
-./core/io/object_saver_base.h
-./core/io/object_saver.cpp
-./core/io/compression.cpp
-./core/io/resource_format_xml.cpp
-./core/io/object_format_binary.cpp
-./core/io/file_access_compressed.h
-./core/io/json.h
-./core/io/file_access_pack.cpp
-./core/io/resource_format_binary.cpp
-./core/io/object_loader.h
-./core/io/object_saver.h
-./core/io/json.cpp
-./core/io/file_access_network.h
-./core/io/resource_saver.cpp
-./core/io/file_access_memory.cpp
-./core/io/image_loader.cpp
-./core/io/resource_format_xml.h
-./core/io/file_access_buffered.cpp
-./core/io/config_file.cpp
-./core/io/translation_loader_po.cpp
-./core/os/*.h
-./core/os/*.cpp
-./core/math/*.h
-./core/math/*.cpp
-./script/gdscript/*.h
-./script/gdscript/*.cpp
-./script/multiscript/multi_script.cpp
-./script/multiscript/multi_script.h
-./script/register_script_types.h
-./platform/android/*.h
-./platform/android/*.cpp
-./platform/android/java/src/com/android/godot/*.java
-./platform/server/*.h
-./platform/server/*.cpp
-./platform/bb10/*.h
-./platform/bb10/*.cpp
-./platform/javascript/*.h
-./platform/javascript/*.cpp
-./platform/javascript/export/export.h
-./platform/javascript/export/export.cpp
-./platform/iphone/*.h
-./platform/iphone/*.cpp
-./platform/iphone/*.mm
-./platform/windows/*.h
-./platform/windows/*.cpp
-./platform/osx/*.h
-./platform/osx/*.cpp
-./platform/osx/*.mm
-./platform/x11/*.h
-./platform/x11/*.cpp
-./drivers/unix/*.h
-./drivers/unix/*.cpp
-./drivers/gles2/*.h
-./drivers/gles2/*.cpp
-./drivers/chibi/*.h
-./drivers/chibi/*.cpp
-./drivers/png/resource_saver_png.cpp
-./drivers/png/image_loader_png.cpp
-./drivers/png/image_loader_png.h
-./drivers/vorbis/audio_stream_ogg_vorbis.h
-./drivers/vorbis/audio_stream_ogg_vorbis.cpp
-./drivers/gl_context/context_gl.h
-./drivers/gles1/*.h
-./drivers/gles1/*.cpp
-./drivers/windows/*.h
-./drivers/windows/*.cpp
-./drivers/alsa/audio_driver_alsa.h
-./drivers/alsa/audio_driver_alsa.cpp
diff --git a/tools/addheader/header.txt b/tools/addheader/header.txt
deleted file mode 100644
index e4efb2dcfc..0000000000
--- a/tools/addheader/header.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-/*************************************************/
-/* $filename */
-/*************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/*************************************************/
-/* Source code within this file is: */
-/* (c) 2007-2016 Juan Linietsky, Ariel Manzur */
-/* All Rights Reserved. */
-/*************************************************/
-
-
diff --git a/tools/buildstuff/zlib_freetype231_jpeg_libpng-bin-win32-vs81.zip b/tools/buildstuff/zlib_freetype231_jpeg_libpng-bin-win32-vs81.zip
deleted file mode 100644
index 4adf30ea29..0000000000
--- a/tools/buildstuff/zlib_freetype231_jpeg_libpng-bin-win32-vs81.zip
+++ /dev/null
Binary files differ
diff --git a/tools/docker/Dockerfile b/tools/dist/docker/Dockerfile
index 428de9d1a7..428de9d1a7 100644
--- a/tools/docker/Dockerfile
+++ b/tools/dist/docker/Dockerfile
diff --git a/tools/docker/README.md b/tools/dist/docker/README.md
index 7f10b46ad8..7f10b46ad8 100644
--- a/tools/docker/README.md
+++ b/tools/dist/docker/README.md
diff --git a/tools/docker/scripts/install-android-tools b/tools/dist/docker/scripts/install-android-tools
index 8a617d9942..8a617d9942 100644
--- a/tools/docker/scripts/install-android-tools
+++ b/tools/dist/docker/scripts/install-android-tools
diff --git a/tools/html_fs/godot.html b/tools/dist/html_fs/godot.html
index c354826e1f..c354826e1f 100644
--- a/tools/html_fs/godot.html
+++ b/tools/dist/html_fs/godot.html
diff --git a/tools/html_fs/godotfs.js b/tools/dist/html_fs/godotfs.js
index 2c59344cf5..2c59344cf5 100644
--- a/tools/html_fs/godotfs.js
+++ b/tools/dist/html_fs/godotfs.js
diff --git a/platform/iphone/xcode/godot_xcode/data.pck b/tools/dist/ios_xcode/godot_xcode/data.pck
index e69de29bb2..e69de29bb2 100644
--- a/platform/iphone/xcode/godot_xcode/data.pck
+++ b/tools/dist/ios_xcode/godot_xcode/data.pck
diff --git a/platform/iphone/xcode/godot_xcode/godot_debug.iphone b/tools/dist/ios_xcode/godot_xcode/godot_debug.iphone
index e69de29bb2..e69de29bb2 100755
--- a/platform/iphone/xcode/godot_xcode/godot_debug.iphone
+++ b/tools/dist/ios_xcode/godot_xcode/godot_debug.iphone
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj
index bdba8488c8..bdba8488c8 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.pbxproj
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 3c9ba38bbe..3c9ba38bbe 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png
index 1d5e472665..1d5e472665 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-568h@2x~iphone.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h.png
index b13a399c83..b13a399c83 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h@2x.png
index b51598fed0..b51598fed0 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-667h@2x.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-667h@2x.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h.png
index 8c44edbccd..8c44edbccd 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h@3x.png
index 33847ac136..33847ac136 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-736h@3x.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-736h@3x.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape-736h.png
index 2a025b745b..2a025b745b 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape-736h.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape-736h.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png
index 7099f3e18d..7099f3e18d 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape@2x~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png
index 4a761c339a..4a761c339a 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Landscape~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png
index b09cf21186..b09cf21186 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait@2x~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png
index fa698eb70c..fa698eb70c 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default-Portrait~ipad.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default@2x~iphone.png
index ddf2861f4d..ddf2861f4d 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default@2x~iphone.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default@2x~iphone.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default~iphone.png
index c485a33b03..c485a33b03 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Default~iphone.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Default~iphone.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json
index a458b67873..a458b67873 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Contents.json
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png
index 165f4423b3..165f4423b3 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-100.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png
index 2e205e920c..2e205e920c 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-114.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png
index 6245f83f48..6245f83f48 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-120.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png
index 7b24e01bc6..7b24e01bc6 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-144.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png
index 344b470fa3..344b470fa3 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-152.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png
index 0dcebbc3f2..0dcebbc3f2 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-180.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png
index 9ae94e9aaf..9ae94e9aaf 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-29.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png
index 569f24df91..569f24df91 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-40.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png
index 9e69ed3121..9e69ed3121 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-50.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png
index b970fa3067..b970fa3067 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-57.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png
index 6097a6c73b..6097a6c73b 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-58.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png
index 21b9622eb6..21b9622eb6 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-60.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png
index 34dea8e6ad..34dea8e6ad 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-72.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png
index f72eb0b345..f72eb0b345 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-76.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png
index 793c9b1f5f..793c9b1f5f 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/Icon-80.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png
index 7cd0e054ab..7cd0e054ab 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-167.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png
index e9b2429754..e9b2429754 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/icon-87.png
Binary files differ
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes
index e328a62cb6..e328a62cb6 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/Images.xcassets/AppIcon.appiconset/sizes
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings b/tools/dist/ios_xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings
index 477b28ff8f..477b28ff8f 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/en.lproj/InfoPlist.strings
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist b/tools/dist/ios_xcode/godot_xcode/godot_ios/godot_ios-Info.plist
index f97b0fca36..f97b0fca36 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/godot_ios-Info.plist
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/godot_ios-Info.plist
diff --git a/platform/iphone/xcode/godot_xcode/godot_ios/main.m b/tools/dist/ios_xcode/godot_xcode/godot_ios/main.m
index 3e4ea5e129..3e4ea5e129 100644
--- a/platform/iphone/xcode/godot_xcode/godot_ios/main.m
+++ b/tools/dist/ios_xcode/godot_xcode/godot_ios/main.m
diff --git a/platform/iphone/xcode/godot_xcode/godot_opt.iphone b/tools/dist/ios_xcode/godot_xcode/godot_opt.iphone
index e69de29bb2..e69de29bb2 100755
--- a/platform/iphone/xcode/godot_xcode/godot_opt.iphone
+++ b/tools/dist/ios_xcode/godot_xcode/godot_opt.iphone
diff --git a/tools/osx_template.app/Contents/Info.plist b/tools/dist/osx_template.app/Contents/Info.plist
index 5146c875bc..5146c875bc 100755
--- a/tools/osx_template.app/Contents/Info.plist
+++ b/tools/dist/osx_template.app/Contents/Info.plist
diff --git a/tools/Godot.app/Contents/PkgInfo b/tools/dist/osx_template.app/Contents/PkgInfo
index 6f749b0f37..6f749b0f37 100644
--- a/tools/Godot.app/Contents/PkgInfo
+++ b/tools/dist/osx_template.app/Contents/PkgInfo
diff --git a/tools/osx_template.app/Contents/Resources/icon.icns b/tools/dist/osx_template.app/Contents/Resources/icon.icns
index 375f61437d..375f61437d 100644
--- a/tools/osx_template.app/Contents/Resources/icon.icns
+++ b/tools/dist/osx_template.app/Contents/Resources/icon.icns
Binary files differ
diff --git a/tools/Godot.app/Contents/Info.plist b/tools/dist/osx_tools.app/Contents/Info.plist
index 2a3e727133..2a3e727133 100755
--- a/tools/Godot.app/Contents/Info.plist
+++ b/tools/dist/osx_tools.app/Contents/Info.plist
diff --git a/tools/osx_template.app/Contents/PkgInfo b/tools/dist/osx_tools.app/Contents/PkgInfo
index 6f749b0f37..6f749b0f37 100644
--- a/tools/osx_template.app/Contents/PkgInfo
+++ b/tools/dist/osx_tools.app/Contents/PkgInfo
diff --git a/tools/Godot.app/Contents/Resources/Godot.icns b/tools/dist/osx_tools.app/Contents/Resources/Godot.icns
index 375f61437d..375f61437d 100644
--- a/tools/Godot.app/Contents/Resources/Godot.icns
+++ b/tools/dist/osx_tools.app/Contents/Resources/Godot.icns
Binary files differ
diff --git a/tools/doc/doc_data.cpp b/tools/doc/doc_data.cpp
index 398267937b..4a8fdfb215 100644
--- a/tools/doc/doc_data.cpp
+++ b/tools/doc/doc_data.cpp
@@ -198,6 +198,11 @@ void DocData::generate(bool p_basic_types) {
if (method.qualifiers!="")
method.qualifiers+=" ";
method.qualifiers+="const";
+
+ } else if (E->get().flags&METHOD_FLAG_VARARG) {
+ if (method.qualifiers!="")
+ method.qualifiers+=" ";
+ method.qualifiers+="vararg";
}
for(int i=-1;i<E->get().arguments.size();i++) {
@@ -276,14 +281,9 @@ void DocData::generate(bool p_basic_types) {
default_arg_text=Variant::get_type_name(default_arg.get_type())+"("+default_arg_text+")";
break;
- case Variant::VECTOR2: // 5
- case Variant::RECT2:
- case Variant::VECTOR3:
- case Variant::PLANE:
- case Variant::QUAT:
case Variant::_AABB: //sorry naming convention fail :( not like it's used often // 10
- case Variant::MATRIX3:
case Variant::COLOR:
+ case Variant::PLANE:
case Variant::RAW_ARRAY:
case Variant::INT_ARRAY:
case Variant::REAL_ARRAY:
@@ -293,7 +293,18 @@ void DocData::generate(bool p_basic_types) {
case Variant::COLOR_ARRAY:
default_arg_text=Variant::get_type_name(default_arg.get_type())+"("+default_arg_text+")";
break;
+ case Variant::VECTOR2: // 5
+ case Variant::RECT2:
+ case Variant::VECTOR3:
+ case Variant::QUAT:
+ case Variant::MATRIX3:
+ default_arg_text=Variant::get_type_name(default_arg.get_type())+default_arg_text;
+ break;
case Variant::OBJECT:
+ if (default_arg.is_zero()) {
+ default_arg_text="NULL";
+ break;
+ }
case Variant::INPUT_EVENT:
case Variant::DICTIONARY: // 20
case Variant::ARRAY:
diff --git a/tools/docdump/doc_dump.cpp b/tools/doc/doc_dump.cpp
index fbf13f9e8f..fbf13f9e8f 100644
--- a/tools/docdump/doc_dump.cpp
+++ b/tools/doc/doc_dump.cpp
diff --git a/tools/docdump/doc_dump.h b/tools/doc/doc_dump.h
index 372f5e0969..372f5e0969 100644
--- a/tools/docdump/doc_dump.h
+++ b/tools/doc/doc_dump.h
diff --git a/tools/docdump/SCsub b/tools/docdump/SCsub
deleted file mode 100644
index 34524f10ef..0000000000
--- a/tools/docdump/SCsub
+++ /dev/null
@@ -1,5 +0,0 @@
-Import('env')
-
-env.add_source_files(env.tool_sources,"*.cpp")
-
-Export('env')
diff --git a/tools/editor/animation_editor.cpp b/tools/editor/animation_editor.cpp
index aa0156b0c0..2f67df1fc3 100644
--- a/tools/editor/animation_editor.cpp
+++ b/tools/editor/animation_editor.cpp
@@ -316,7 +316,7 @@ public:
int existing = animation->track_find_key(track,new_time,true);
setting=true;
- undo_redo->create_action(TTR("Move Add Key"),false);
+ undo_redo->create_action(TTR("Move Add Key"),UndoRedo::MERGE_ENDS);
Variant val = animation->track_get_key_value(track,key);
float trans = animation->track_get_key_transition(track,key);
@@ -344,7 +344,7 @@ public:
float val = p_value;
float prev_val = animation->track_get_key_transition(track,key);
setting=true;
- undo_redo->create_action(TTR("Anim Change Transition"),true);
+ undo_redo->create_action(TTR("Anim Change Transition"),UndoRedo::MERGE_ENDS);
undo_redo->add_do_method(animation.ptr(),"track_set_key_transition",track,key,val);
undo_redo->add_undo_method(animation.ptr(),"track_set_key_transition",track,key,prev_val);
undo_redo->add_do_method(this,"_update_obj",animation);
@@ -387,7 +387,7 @@ public:
}
setting=true;
- undo_redo->create_action(TTR("Anim Change Value"),true);
+ undo_redo->create_action(TTR("Anim Change Value"),UndoRedo::MERGE_ENDS);
Variant prev = animation->track_get_key_value(track,key);
undo_redo->add_do_method(animation.ptr(),"track_set_key_value",track,key,value);
undo_redo->add_undo_method(animation.ptr(),"track_set_key_value",track,key,prev);
@@ -463,7 +463,11 @@ public:
}
}
- undo_redo->create_action(TTR("Anim Change Call"),mergeable);
+ if (mergeable)
+ undo_redo->create_action(TTR("Anim Change Call"),UndoRedo::MERGE_ENDS);
+ else
+ undo_redo->create_action(TTR("Anim Change Call"));
+
Variant prev = animation->track_get_key_value(track,key);
setting=true;
undo_redo->add_do_method(animation.ptr(),"track_set_key_value",track,key,d_new);
@@ -1715,9 +1719,9 @@ void AnimationKeyEditor::_curve_transition_changed(float p_what) {
if (selection.size()==0)
return;
if (selection.size()==1)
- undo_redo->create_action(TTR("Edit Node Curve"),true);
+ undo_redo->create_action(TTR("Edit Node Curve"),UndoRedo::MERGE_ENDS);
else
- undo_redo->create_action(TTR("Edit Selection Curve"),true);
+ undo_redo->create_action(TTR("Edit Selection Curve"),UndoRedo::MERGE_ENDS);
for(Map<SelectedKey,KeyInfo>::Element *E=selection.front();E;E=E->next()) {
diff --git a/tools/editor/create_dialog.cpp b/tools/editor/create_dialog.cpp
index b0cdd79798..5aac8bff09 100644
--- a/tools/editor/create_dialog.cpp
+++ b/tools/editor/create_dialog.cpp
@@ -140,7 +140,7 @@ void CreateDialog::_update_search() {
search_options->clear();
-
+ help_bit->set_text("");
/*
TreeItem *root = search_options->create_item();
_parse_fs(EditorFileSystem::get_singleton()->get_filesystem());
@@ -336,11 +336,27 @@ String CreateDialog::get_base_type() const {
return base_type;
}
+void CreateDialog::_item_selected() {
+
+ TreeItem *item = search_options->get_selected();
+ if (!item)
+ return;
+
+ String name = item->get_text(0);
+
+ if (!EditorHelp::get_doc_data()->class_list.has(name))
+ return;
+
+ help_bit->set_text(EditorHelp::get_doc_data()->class_list[name].brief_description);
+
+}
+
void CreateDialog::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_text_changed"),&CreateDialog::_text_changed);
ObjectTypeDB::bind_method(_MD("_confirmed"),&CreateDialog::_confirmed);
ObjectTypeDB::bind_method(_MD("_sbox_input"),&CreateDialog::_sbox_input);
+ ObjectTypeDB::bind_method(_MD("_item_selected"),&CreateDialog::_item_selected);
ADD_SIGNAL(MethodInfo("create"));
@@ -364,9 +380,14 @@ CreateDialog::CreateDialog() {
register_text_enter(search_box);
set_hide_on_ok(false);
search_options->connect("item_activated",this,"_confirmed");
+ search_options->connect("cell_selected",this,"_item_selected");
// search_options->set_hide_root(true);
base_type="Object";
+ help_bit = memnew( EditorHelpBit );
+ vbc->add_margin_child(TTR("Description:"),help_bit);
+ help_bit->connect("request_hide",this,"_closed");
+
}
diff --git a/tools/editor/create_dialog.h b/tools/editor/create_dialog.h
index 8957479beb..41156b538a 100644
--- a/tools/editor/create_dialog.h
+++ b/tools/editor/create_dialog.h
@@ -34,6 +34,7 @@
#include "scene/gui/tree.h"
#include "scene/gui/line_edit.h"
#include "scene/gui/label.h"
+#include "editor_help.h"
/**
@author Juan Linietsky <reduzio@gmail.com>
*/
@@ -49,6 +50,10 @@ class CreateDialog : public ConfirmationDialog {
Tree *search_options;
String base_type;
+ EditorHelpBit *help_bit;
+
+ void _item_selected();
+
void _update_search();
void _sbox_input(const InputEvent& p_ie);
diff --git a/tools/editor/editor_data.cpp b/tools/editor/editor_data.cpp
index 8d3fd6c9c2..35ec1ebfcc 100644
--- a/tools/editor/editor_data.cpp
+++ b/tools/editor/editor_data.cpp
@@ -834,7 +834,7 @@ void EditorSelection::_node_removed(Node *p_node) {
void EditorSelection::add_node(Node *p_node) {
ERR_FAIL_NULL(p_node);
-
+ ERR_FAIL_COND(!p_node->is_inside_tree());
if (selection.has(p_node))
return;
diff --git a/tools/editor/editor_dir_dialog.cpp b/tools/editor/editor_dir_dialog.cpp
index f6ce7bf3f8..cf0732501e 100644
--- a/tools/editor/editor_dir_dialog.cpp
+++ b/tools/editor/editor_dir_dialog.cpp
@@ -143,7 +143,7 @@ void EditorDirDialog::set_current_path(const String& p_path) {
reload();
String p = p_path;
if (p.begins_with("res://"))
- p.replace_first("res://","");
+ p = p.replace_first("res://","");
Vector<String> dirs = p.split("/");
@@ -162,13 +162,13 @@ void EditorDirDialog::set_current_path(const String& p_path) {
ERR_FAIL_COND(!p);
String pp = p->get_metadata(0);
if (pp=="") {
+ p->set_metadata(0,String(r->get_metadata(0)).plus_file(d));
_update_dir(p);
- updating=true;
- p->set_collapsed(false);
- updating=false;
- _item_collapsed(p);
-
}
+ updating=true;
+ p->set_collapsed(false);
+ updating=false;
+ _item_collapsed(p);
r=p;
}
@@ -216,7 +216,7 @@ void EditorDirDialog::_make_dir_confirm() {
if (err!=OK) {
mkdirerr->popup_centered_minsize(Size2(250,80));
} else {
- reload();
+ set_current_path(dir.plus_file(makedirname->get_text()));
}
makedirname->set_text(""); // reset label
}
diff --git a/tools/editor/editor_help.cpp b/tools/editor/editor_help.cpp
index 4ab86ad512..4f83dc2f66 100644
--- a/tools/editor/editor_help.cpp
+++ b/tools/editor/editor_help.cpp
@@ -31,7 +31,7 @@
#include "editor_settings.h"
#include "os/keyboard.h"
#include "doc_data_compressed.h"
-
+#include "tools/editor/plugins/script_editor_plugin.h"
#include "os/keyboard.h"
@@ -882,6 +882,15 @@ Error EditorHelp::_goto_desc(const String& p_class,int p_vscr) {
class_desc->pop();
}
+ if (cd.methods[i].qualifiers.find("vararg")!=-1) {
+ class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
+ class_desc->add_text(",");
+ class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/symbol_color"));
+ class_desc->add_text(" ... ");
+ class_desc->pop();
+ class_desc->pop();
+ }
+
class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/symbol_color"));
class_desc->add_text(cd.methods[i].arguments.size()?" )":")");
class_desc->pop();
@@ -1256,16 +1265,20 @@ void EditorHelp::_help_callback(const String& p_topic) {
}
-void EditorHelp::_add_text(const String& p_bbcode) {
- /*class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
- class_desc->push_font( get_font("normal","Fonts") );
- class_desc->push_indent(1);*/
+static void _add_text_to_rt(const String& p_bbcode,RichTextLabel *p_rt) {
+
+ DocData *doc = EditorHelp::get_doc_data();
+ String base_path;
+
+ /*p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/text_color"));
+ p_rt->push_font( get_font("normal","Fonts") );
+ p_rt->push_indent(1);*/
int pos = 0;
- Ref<Font> doc_font = get_font("doc","EditorFonts");
- Ref<Font> doc_code_font = get_font("doc_source","EditorFonts");
+ Ref<Font> doc_font = p_rt->get_font("doc","EditorFonts");
+ Ref<Font> doc_code_font = p_rt->get_font("doc_source","EditorFonts");
String bbcode=p_bbcode.replace("\t"," ").replace("\r"," ").strip_edges();
@@ -1333,7 +1346,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
brk_pos=bbcode.length();
if (brk_pos > pos) {
- class_desc->add_text(bbcode.substr(pos,brk_pos-pos));
+ p_rt->add_text(bbcode.substr(pos,brk_pos-pos));
}
@@ -1344,7 +1357,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
if (brk_end==-1) {
//no close, add the rest
- class_desc->add_text(bbcode.substr(brk_pos,bbcode.length()-brk_pos));
+ p_rt->add_text(bbcode.substr(brk_pos,bbcode.length()-brk_pos));
break;
}
@@ -1362,7 +1375,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
}
if (!tag_ok) {
- class_desc->add_text("[");
+ p_rt->add_text("[");
pos++;
continue;
}
@@ -1370,32 +1383,32 @@ void EditorHelp::_add_text(const String& p_bbcode) {
tag_stack.pop_front();
pos=brk_end+1;
if (tag!="/img")
- class_desc->pop();
+ p_rt->pop();
} else if (tag.begins_with("method ")) {
String m = tag.substr(7,tag.length());
- class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
- class_desc->push_meta("@"+m);
- class_desc->add_text(m+"()");
- class_desc->pop();
- class_desc->pop();
+ p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
+ p_rt->push_meta("@"+m);
+ p_rt->add_text(m+"()");
+ p_rt->pop();
+ p_rt->pop();
pos=brk_end+1;
} else if (doc->class_list.has(tag)) {
- class_desc->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
- class_desc->push_meta("#"+tag);
- class_desc->add_text(tag);
- class_desc->pop();
- class_desc->pop();
+ p_rt->push_color(EditorSettings::get_singleton()->get("text_editor/keyword_color"));
+ p_rt->push_meta("#"+tag);
+ p_rt->add_text(tag);
+ p_rt->pop();
+ p_rt->pop();
pos=brk_end+1;
} else if (tag=="b") {
//use bold font
- class_desc->push_font(doc_code_font);
+ p_rt->push_font(doc_code_font);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="i") {
@@ -1406,37 +1419,37 @@ void EditorHelp::_add_text(const String& p_bbcode) {
text_color.r*=1.1;
text_color.g*=1.1;
text_color.b*=1.1;
- class_desc->push_color(text_color);
- //class_desc->push_font(get_font("italic","Fonts"));
+ p_rt->push_color(text_color);
+ //p_rt->push_font(get_font("italic","Fonts"));
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="code" || tag=="codeblock") {
//use monospace font
- class_desc->push_font(doc_code_font);
+ p_rt->push_font(doc_code_font);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="center") {
//use monospace font
- class_desc->push_align(RichTextLabel::ALIGN_CENTER);
+ p_rt->push_align(RichTextLabel::ALIGN_CENTER);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="br") {
//use monospace font
- class_desc->add_newline();
+ p_rt->add_newline();
pos=brk_end+1;
} else if (tag=="u") {
//use underline
- class_desc->push_underline();
+ p_rt->push_underline();
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag=="s") {
//use strikethrough (not supported underline instead)
- class_desc->push_underline();
+ p_rt->push_underline();
pos=brk_end+1;
tag_stack.push_front(tag);
@@ -1447,14 +1460,14 @@ void EditorHelp::_add_text(const String& p_bbcode) {
if (end==-1)
end=bbcode.length();
String url = bbcode.substr(brk_end+1,end-brk_end-1);
- class_desc->push_meta(url);
+ p_rt->push_meta(url);
pos=brk_end+1;
tag_stack.push_front(tag);
} else if (tag.begins_with("url=")) {
String url = tag.substr(4,tag.length());
- class_desc->push_meta(url);
+ p_rt->push_meta(url);
pos=brk_end+1;
tag_stack.push_front("url");
} else if (tag=="img") {
@@ -1467,7 +1480,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
Ref<Texture> texture = ResourceLoader::load(base_path+"/"+image,"Texture");
if (texture.is_valid())
- class_desc->add_image(texture);
+ p_rt->add_image(texture);
pos=end;
tag_stack.push_front(tag);
@@ -1515,7 +1528,7 @@ void EditorHelp::_add_text(const String& p_bbcode) {
- class_desc->push_color(color);
+ p_rt->push_color(color);
pos=brk_end+1;
tag_stack.push_front("color");
@@ -1526,9 +1539,9 @@ void EditorHelp::_add_text(const String& p_bbcode) {
Ref<Font> font = ResourceLoader::load(base_path+"/"+fnt,"Font");
if (font.is_valid())
- class_desc->push_font(font);
+ p_rt->push_font(font);
else {
- class_desc->push_font(doc_font);
+ p_rt->push_font(doc_font);
}
pos=brk_end+1;
@@ -1537,15 +1550,23 @@ void EditorHelp::_add_text(const String& p_bbcode) {
} else {
- class_desc->add_text("["); //ignore
+ p_rt->add_text("["); //ignore
pos=brk_pos+1;
}
}
- /*class_desc->pop();
- class_desc->pop();
- class_desc->pop();*/
+ /*p_rt->pop();
+ p_rt->pop();
+ p_rt->pop();*/
+
+}
+
+
+void EditorHelp::_add_text(const String& p_bbcode) {
+
+
+ _add_text_to_rt(p_bbcode,class_desc);
}
@@ -1703,3 +1724,71 @@ EditorHelp::~EditorHelp() {
}
+/////////////
+
+
+
+void EditorHelpBit::_go_to_help(String p_what) {
+
+ EditorNode::get_singleton()->set_visible_editor(EditorNode::EDITOR_SCRIPT);
+ ScriptEditor::get_singleton()->goto_help(p_what);
+ emit_signal("request_hide");
+}
+
+void EditorHelpBit::_meta_clicked(String p_select) {
+
+
+ // print_line("LINK: "+p_select);
+ if (p_select.begins_with("#")) {
+ //_goto_desc(p_select.substr(1,p_select.length()));
+ _go_to_help("class_name:"+p_select.substr(1,p_select.length()));
+ return;
+ } else if (p_select.begins_with("@")) {
+
+ String m = p_select.substr(1,p_select.length());
+
+ if (m.find(".")!=-1) {
+ //must go somewhere else
+
+ _go_to_help("class_method:"+m.get_slice(".",0)+":"+m.get_slice(".",0));
+ } else {
+//
+ // if (!method_line.has(m))
+ // return;
+ //class_desc->scroll_to_line(method_line[m]);
+ }
+
+ }
+
+
+}
+
+void EditorHelpBit::_bind_methods() {
+
+ ObjectTypeDB::bind_method("_meta_clicked",&EditorHelpBit::_meta_clicked);
+ ADD_SIGNAL(MethodInfo("request_hide"));
+}
+
+void EditorHelpBit::_notification(int p_what){
+
+ if (p_what==NOTIFICATION_ENTER_TREE) {
+ add_style_override("panel",get_stylebox("normal","TextEdit"));
+ }
+}
+
+
+void EditorHelpBit::set_text(const String& p_text) {
+
+ rich_text->clear();
+ _add_text_to_rt(p_text,rich_text);
+}
+
+EditorHelpBit::EditorHelpBit() {
+
+ rich_text = memnew( RichTextLabel );
+ add_child(rich_text);
+ rich_text->set_area_as_parent_rect(8*EDSCALE);
+ rich_text->connect("meta_clicked",this,"_meta_clicked");
+ set_custom_minimum_size(Size2(0,70*EDSCALE));
+
+}
diff --git a/tools/editor/editor_help.h b/tools/editor/editor_help.h
index c3d19894df..b0dc2809fe 100644
--- a/tools/editor/editor_help.h
+++ b/tools/editor/editor_help.h
@@ -200,6 +200,23 @@ public:
+class EditorHelpBit : public Panel {
+ OBJ_TYPE( EditorHelpBit, Panel);
+
+ RichTextLabel *rich_text;
+ void _go_to_help(String p_what);
+ void _meta_clicked(String p_what);
+
+
+protected:
+
+ static void _bind_methods();
+ void _notification(int p_what);
+public:
+
+ void set_text(const String& p_text);
+ EditorHelpBit();
+};
#endif // EDITOR_HELP_H
diff --git a/tools/editor/editor_node.cpp b/tools/editor/editor_node.cpp
index c37c0dc463..8496530db3 100644
--- a/tools/editor/editor_node.cpp
+++ b/tools/editor/editor_node.cpp
@@ -1673,7 +1673,7 @@ void EditorNode::_edit_current() {
if (main_plugin) {
- if (main_plugin!=editor_plugin_screen) {
+ if (main_plugin!=editor_plugin_screen && (!ScriptEditor::get_singleton() || !ScriptEditor::get_singleton()->is_visible() || ScriptEditor::get_singleton()->can_take_away_focus())) {
// update screen main_plugin
@@ -6180,7 +6180,7 @@ EditorNode::EditorNode() {
scenes_dock = memnew( FileSystemDock(this) );
scenes_dock->set_name(TTR("FileSystem"));
- scenes_dock->set_use_thumbnails(int(EditorSettings::get_singleton()->get("file_dialog/display_mode"))==EditorFileDialog::DISPLAY_THUMBNAILS);
+ scenes_dock->set_display_mode(int(EditorSettings::get_singleton()->get("filesystem_dock/display_mode")));
dock_slot[DOCK_SLOT_LEFT_UR]->add_child(scenes_dock);
//prop_pallete->add_child(scenes_dock);
scenes_dock->connect("open",this,"open_request");
diff --git a/tools/editor/editor_settings.cpp b/tools/editor/editor_settings.cpp
index 582462aa19..ad5cd86b4b 100644
--- a/tools/editor/editor_settings.cpp
+++ b/tools/editor/editor_settings.cpp
@@ -572,7 +572,10 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("scenetree_editor/draw_relationship_lines",false);
set("scenetree_editor/relationship_line_color",Color::html("464646"));
- set("gridmap_editor/pick_distance", 5000.0);
+ set("grid_map/pick_distance", 5000.0);
+
+ set("3d_editor/grid_color",Color(0,1,0,0.2));
+ hints["3d_editor/grid_color"]=PropertyInfo(Variant::COLOR,"3d_editor/grid_color", PROPERTY_HINT_NONE, "", PROPERTY_USAGE_DEFAULT|PROPERTY_USAGE_RESTART_IF_CHANGED);
set("3d_editor/default_fov",45.0);
set("3d_editor/default_z_near",0.1);
@@ -622,6 +625,11 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {
set("file_dialog/thumbnail_size", 64);
hints["file_dialog/thumbnail_size"]=PropertyInfo(Variant::INT,"file_dialog/thumbnail_size",PROPERTY_HINT_RANGE,"32,128,16");
+ set("filesystem_dock/display_mode", 0);
+ hints["filesystem_dock/display_mode"]=PropertyInfo(Variant::INT,"filesystem_dock/display_mode",PROPERTY_HINT_ENUM,"Thumbnails,List");
+ set("filesystem_dock/thumbnail_size", 64);
+ hints["filesystem_dock/thumbnail_size"]=PropertyInfo(Variant::INT,"filesystem_dock/thumbnail_size",PROPERTY_HINT_RANGE,"32,128,16");
+
set("animation/autorename_animation_tracks",true);
set("animation/confirm_insert_track",true);
@@ -731,6 +739,25 @@ void EditorSettings::notify_changes() {
}
+void EditorSettings::_add_property_info_bind(const Dictionary& p_info) {
+
+ ERR_FAIL_COND(!p_info.has("name"));
+ ERR_FAIL_COND(!p_info.has("type"));
+
+ PropertyInfo pinfo;
+ pinfo.name = p_info["name"];
+ ERR_FAIL_COND(!props.has(pinfo.name));
+ pinfo.type = Variant::Type(p_info["type"].operator int());
+ ERR_FAIL_INDEX(pinfo.type, Variant::VARIANT_MAX);
+
+ if (p_info.has("hint"))
+ pinfo.hint = PropertyHint(p_info["hint"].operator int());
+ if (p_info.has("hint_string"))
+ pinfo.hint_string = p_info["hint_string"];
+
+ add_property_hint(pinfo);
+}
+
void EditorSettings::add_property_hint(const PropertyInfo& p_hint) {
_THREAD_SAFE_METHOD_
@@ -1001,6 +1028,8 @@ void EditorSettings::_bind_methods() {
ObjectTypeDB::bind_method(_MD("get_settings_path"),&EditorSettings::get_settings_path);
ObjectTypeDB::bind_method(_MD("get_project_settings_path"),&EditorSettings::get_project_settings_path);
+ ObjectTypeDB::bind_method(_MD("add_property_info", "info"),&EditorSettings::_add_property_info_bind);
+
ObjectTypeDB::bind_method(_MD("set_favorite_dirs","dirs"),&EditorSettings::set_favorite_dirs);
ObjectTypeDB::bind_method(_MD("get_favorite_dirs"),&EditorSettings::get_favorite_dirs);
diff --git a/tools/editor/editor_settings.h b/tools/editor/editor_settings.h
index 937956a366..2a7d3bb4f0 100644
--- a/tools/editor/editor_settings.h
+++ b/tools/editor/editor_settings.h
@@ -104,6 +104,8 @@ private:
Map<String,Ref<ShortCut> > shortcuts;
+ void _add_property_info_bind(const Dictionary& p_info);
+
protected:
static void _bind_methods();
diff --git a/tools/editor/filesystem_dock.cpp b/tools/editor/filesystem_dock.cpp
index 378edd6667..8a94c6e340 100644
--- a/tools/editor/filesystem_dock.cpp
+++ b/tools/editor/filesystem_dock.cpp
@@ -146,8 +146,12 @@ void FileSystemDock::_notification(int p_what) {
//button_instance->set_icon( get_icon("Add","EditorIcons"));
//button_open->set_icon( get_icon("Folder","EditorIcons"));
button_back->set_icon( get_icon("Filesystem","EditorIcons"));
- display_mode->set_icon( get_icon("FileList","EditorIcons"));
- display_mode->connect("pressed",this,"_change_file_display");
+ if (display_mode == DISPLAY_THUMBNAILS) {
+ button_display_mode->set_icon(get_icon("FileList","EditorIcons"));
+ } else {
+ button_display_mode->set_icon(get_icon("FileThumbnail","EditorIcons"));
+ }
+ button_display_mode->connect("pressed",this,"_change_file_display");
//file_options->set_icon( get_icon("Tools","EditorIcons"));
files->connect("item_activated",this,"_select_file");
button_hist_next->connect("pressed",this,"_fw_history");
@@ -197,9 +201,13 @@ void FileSystemDock::_notification(int p_what) {
} break;
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
- display_mode->set_pressed(int(EditorSettings::get_singleton()->get("file_dialog/display_mode"))==EditorFileDialog::DISPLAY_LIST);
+ int new_mode = int(EditorSettings::get_singleton()->get("filesystem_dock/display_mode"));
- _change_file_display();
+ if (new_mode != display_mode) {
+ set_display_mode(new_mode);
+ } else {
+ _update_files(true);
+ }
} break;
}
@@ -314,13 +322,16 @@ void FileSystemDock::_thumbnail_done(const String& p_path,const Ref<Texture>& p_
void FileSystemDock::_change_file_display() {
- if (display_mode->is_pressed()) {
- display_mode->set_icon( get_icon("FileThumbnail","EditorIcons"));
-
+ if (button_display_mode->is_pressed()) {
+ display_mode = DISPLAY_LIST;
+ button_display_mode->set_icon( get_icon("FileThumbnail","EditorIcons"));
} else {
- display_mode->set_icon( get_icon("FileList","EditorIcons"));
+ display_mode = DISPLAY_THUMBNAILS;
+ button_display_mode->set_icon( get_icon("FileList","EditorIcons"));
}
+ EditorSettings::get_singleton()->set("filesystem_dock/display_mode", display_mode);
+
_update_files(true);
}
@@ -393,12 +404,12 @@ void FileSystemDock::_update_files(bool p_keep_selection) {
if (!efd)
return;
- int thumbnail_size = EditorSettings::get_singleton()->get("file_dialog/thumbnail_size");
+ int thumbnail_size = EditorSettings::get_singleton()->get("filesystem_dock/thumbnail_size");
thumbnail_size*=EDSCALE;
Ref<Texture> folder_thumbnail;
Ref<Texture> file_thumbnail;
- bool use_thumbnails=!display_mode->is_pressed();
+ bool use_thumbnails = (display_mode == DISPLAY_THUMBNAILS);
bool use_folders = search_box->get_text().length()==0 && split_mode;
if (use_thumbnails) { //thumbnails
@@ -1147,9 +1158,13 @@ void FileSystemDock::focus_on_filter() {
}
-void FileSystemDock::set_use_thumbnails(bool p_use) {
+void FileSystemDock::set_display_mode(int p_mode) {
+
+ if (p_mode == display_mode)
+ return;
- display_mode->set_pressed(!p_use);
+ button_display_mode->set_pressed(p_mode == DISPLAY_LIST);
+ _change_file_display();
}
@@ -1721,9 +1736,9 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
search_icon->set_stretch_mode(TextureFrame::STRETCH_KEEP_CENTERED);
path_hb->add_child(search_icon);
- display_mode = memnew( ToolButton );
- path_hb->add_child(display_mode);
- display_mode->set_toggle_mode(true);
+ button_display_mode = memnew( ToolButton );
+ path_hb->add_child(button_display_mode);
+ button_display_mode->set_toggle_mode(true);
file_list_vb->add_child(files);
@@ -1766,6 +1781,7 @@ FileSystemDock::FileSystemDock(EditorNode *p_editor) {
history_pos=0;
split_mode=false;
+ display_mode = DISPLAY_THUMBNAILS;
path="res://";
diff --git a/tools/editor/filesystem_dock.h b/tools/editor/filesystem_dock.h
index 171dbd16e9..f5b96760fc 100644
--- a/tools/editor/filesystem_dock.h
+++ b/tools/editor/filesystem_dock.h
@@ -54,6 +54,12 @@ class EditorNode;
class FileSystemDock : public VBoxContainer {
OBJ_TYPE( FileSystemDock, VBoxContainer );
+public:
+ enum DisplayMode {
+ DISPLAY_THUMBNAILS,
+ DISPLAY_LIST
+ };
+private:
enum FileMenu {
FILE_OPEN,
FILE_INSTANCE,
@@ -79,7 +85,7 @@ class FileSystemDock : public VBoxContainer {
Button *button_reload;
Button *button_favorite;
Button *button_back;
- Button *display_mode;
+ Button *button_display_mode;
Button *button_hist_next;
Button *button_hist_prev;
LineEdit *current_path;
@@ -88,6 +94,7 @@ class FileSystemDock : public VBoxContainer {
HBoxContainer *path_hb;
bool split_mode;
+ DisplayMode display_mode;
PopupMenu *file_options;
@@ -182,7 +189,7 @@ public:
void fix_dependencies(const String& p_for_file);
- void set_use_thumbnails(bool p_use);
+ void set_display_mode(int p_mode);
FileSystemDock(EditorNode *p_editor);
~FileSystemDock();
diff --git a/tools/editor/icons/2x/icon_mini_aabb.png b/tools/editor/icons/2x/icon_mini_aabb.png
new file mode 100644
index 0000000000..f0fd5620e9
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_aabb.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_array.png b/tools/editor/icons/2x/icon_mini_array.png
new file mode 100644
index 0000000000..5c7bde2639
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_boolean.png b/tools/editor/icons/2x/icon_mini_boolean.png
new file mode 100644
index 0000000000..a7d00056bb
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_boolean.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_color.png b/tools/editor/icons/2x/icon_mini_color.png
new file mode 100644
index 0000000000..f4059bfb91
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_color.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_color_array.png b/tools/editor/icons/2x/icon_mini_color_array.png
new file mode 100644
index 0000000000..26f1d9fce4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_color_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_dictionary.png b/tools/editor/icons/2x/icon_mini_dictionary.png
new file mode 100644
index 0000000000..241e0587b4
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_dictionary.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_float.png b/tools/editor/icons/2x/icon_mini_float.png
new file mode 100644
index 0000000000..6edf76ece1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_float.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_float_array.png b/tools/editor/icons/2x/icon_mini_float_array.png
new file mode 100644
index 0000000000..5a79fab721
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_float_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_image.png b/tools/editor/icons/2x/icon_mini_image.png
new file mode 100644
index 0000000000..98faebeef2
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_image.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_input.png b/tools/editor/icons/2x/icon_mini_input.png
new file mode 100644
index 0000000000..48536e156c
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_input.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_int_array.png b/tools/editor/icons/2x/icon_mini_int_array.png
new file mode 100644
index 0000000000..790ed44c30
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_int_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_integer.png b/tools/editor/icons/2x/icon_mini_integer.png
new file mode 100644
index 0000000000..cd9118f024
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_integer.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_matrix3.png b/tools/editor/icons/2x/icon_mini_matrix3.png
new file mode 100644
index 0000000000..93783177e1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_matrix3.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_matrix32.png b/tools/editor/icons/2x/icon_mini_matrix32.png
new file mode 100644
index 0000000000..c2f7ea3817
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_matrix32.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_object.png b/tools/editor/icons/2x/icon_mini_object.png
new file mode 100644
index 0000000000..7987f750ff
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_object.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_path.png b/tools/editor/icons/2x/icon_mini_path.png
new file mode 100644
index 0000000000..2e60a46086
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_path.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_plane.png b/tools/editor/icons/2x/icon_mini_plane.png
new file mode 100644
index 0000000000..12b5cd26cc
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_plane.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_quat.png b/tools/editor/icons/2x/icon_mini_quat.png
new file mode 100644
index 0000000000..9a33902e59
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_quat.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_raw_array.png b/tools/editor/icons/2x/icon_mini_raw_array.png
new file mode 100644
index 0000000000..629b01e72a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_raw_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_rect2.png b/tools/editor/icons/2x/icon_mini_rect2.png
new file mode 100644
index 0000000000..88b12e3a3a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_rect2.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_rid.png b/tools/editor/icons/2x/icon_mini_rid.png
new file mode 100644
index 0000000000..5388c19817
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_rid.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_string.png b/tools/editor/icons/2x/icon_mini_string.png
new file mode 100644
index 0000000000..2264451c73
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_string.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_string_array.png b/tools/editor/icons/2x/icon_mini_string_array.png
new file mode 100644
index 0000000000..fa8109b88a
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_string_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_transform.png b/tools/editor/icons/2x/icon_mini_transform.png
new file mode 100644
index 0000000000..cb106ba5fa
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_transform.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_variant.png b/tools/editor/icons/2x/icon_mini_variant.png
new file mode 100644
index 0000000000..ae0aad16cf
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_variant.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_vector2.png b/tools/editor/icons/2x/icon_mini_vector2.png
new file mode 100644
index 0000000000..9e608e61c1
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_vector2.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_vector2_array.png b/tools/editor/icons/2x/icon_mini_vector2_array.png
new file mode 100644
index 0000000000..247c0e2592
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_vector2_array.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_vector3.png b/tools/editor/icons/2x/icon_mini_vector3.png
new file mode 100644
index 0000000000..0b84b4628f
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_vector3.png
Binary files differ
diff --git a/tools/editor/icons/2x/icon_mini_vector3_array.png b/tools/editor/icons/2x/icon_mini_vector3_array.png
new file mode 100644
index 0000000000..68058e4232
--- /dev/null
+++ b/tools/editor/icons/2x/icon_mini_vector3_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_loop_interpolation.png b/tools/editor/icons/icon_loop_interpolation.png
new file mode 100644
index 0000000000..488b33316e
--- /dev/null
+++ b/tools/editor/icons/icon_loop_interpolation.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_aabb.png b/tools/editor/icons/icon_mini_aabb.png
index a0b11821a9..3a6be5605a 100644
--- a/tools/editor/icons/icon_mini_aabb.png
+++ b/tools/editor/icons/icon_mini_aabb.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_array.png b/tools/editor/icons/icon_mini_array.png
index 2df4a7d516..ade885e4d4 100644
--- a/tools/editor/icons/icon_mini_array.png
+++ b/tools/editor/icons/icon_mini_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_boolean.png b/tools/editor/icons/icon_mini_boolean.png
index 8753084a5b..9cb64fc983 100644
--- a/tools/editor/icons/icon_mini_boolean.png
+++ b/tools/editor/icons/icon_mini_boolean.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_color.png b/tools/editor/icons/icon_mini_color.png
index ef4e6b5468..bebf64e262 100644
--- a/tools/editor/icons/icon_mini_color.png
+++ b/tools/editor/icons/icon_mini_color.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_color_array.png b/tools/editor/icons/icon_mini_color_array.png
index fa82c20664..434b2f96f5 100644
--- a/tools/editor/icons/icon_mini_color_array.png
+++ b/tools/editor/icons/icon_mini_color_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_dictionary.png b/tools/editor/icons/icon_mini_dictionary.png
index 581a7e4e94..11fd536a83 100644
--- a/tools/editor/icons/icon_mini_dictionary.png
+++ b/tools/editor/icons/icon_mini_dictionary.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_float.png b/tools/editor/icons/icon_mini_float.png
index 240fe7741b..f8c8d9a174 100644
--- a/tools/editor/icons/icon_mini_float.png
+++ b/tools/editor/icons/icon_mini_float.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_float_array.png b/tools/editor/icons/icon_mini_float_array.png
index 205c117522..8b8177e151 100644
--- a/tools/editor/icons/icon_mini_float_array.png
+++ b/tools/editor/icons/icon_mini_float_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_image.png b/tools/editor/icons/icon_mini_image.png
index 8433f57b33..2ad359bdbe 100644
--- a/tools/editor/icons/icon_mini_image.png
+++ b/tools/editor/icons/icon_mini_image.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_input.png b/tools/editor/icons/icon_mini_input.png
index 5d52ed70f8..fec26dd68e 100644
--- a/tools/editor/icons/icon_mini_input.png
+++ b/tools/editor/icons/icon_mini_input.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_int_array.png b/tools/editor/icons/icon_mini_int_array.png
index 3b7bf7dc62..d1bd2e82a7 100644
--- a/tools/editor/icons/icon_mini_int_array.png
+++ b/tools/editor/icons/icon_mini_int_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_integer.png b/tools/editor/icons/icon_mini_integer.png
index 17f3762a46..dad1bb160b 100644
--- a/tools/editor/icons/icon_mini_integer.png
+++ b/tools/editor/icons/icon_mini_integer.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_matrix3.png b/tools/editor/icons/icon_mini_matrix3.png
index be97f2014a..dd59d093cc 100644
--- a/tools/editor/icons/icon_mini_matrix3.png
+++ b/tools/editor/icons/icon_mini_matrix3.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_matrix32.png b/tools/editor/icons/icon_mini_matrix32.png
index 33963066b0..6018a00747 100644
--- a/tools/editor/icons/icon_mini_matrix32.png
+++ b/tools/editor/icons/icon_mini_matrix32.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_object.png b/tools/editor/icons/icon_mini_object.png
index ba38ad06b1..4afe7cfca1 100644
--- a/tools/editor/icons/icon_mini_object.png
+++ b/tools/editor/icons/icon_mini_object.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_path.png b/tools/editor/icons/icon_mini_path.png
index 7645ba6257..9eb0632571 100644
--- a/tools/editor/icons/icon_mini_path.png
+++ b/tools/editor/icons/icon_mini_path.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_plane.png b/tools/editor/icons/icon_mini_plane.png
index d4f2bda241..45676236bd 100644
--- a/tools/editor/icons/icon_mini_plane.png
+++ b/tools/editor/icons/icon_mini_plane.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_quat.png b/tools/editor/icons/icon_mini_quat.png
index 991b684fcb..4ed2f5695c 100644
--- a/tools/editor/icons/icon_mini_quat.png
+++ b/tools/editor/icons/icon_mini_quat.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_raw_array.png b/tools/editor/icons/icon_mini_raw_array.png
index a655edde01..66bcf7c740 100644
--- a/tools/editor/icons/icon_mini_raw_array.png
+++ b/tools/editor/icons/icon_mini_raw_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_rect2.png b/tools/editor/icons/icon_mini_rect2.png
index 9d5d48f78c..db13e1a48e 100644
--- a/tools/editor/icons/icon_mini_rect2.png
+++ b/tools/editor/icons/icon_mini_rect2.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_rid.png b/tools/editor/icons/icon_mini_rid.png
index c85e40f315..278a9d1ee6 100644
--- a/tools/editor/icons/icon_mini_rid.png
+++ b/tools/editor/icons/icon_mini_rid.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_string.png b/tools/editor/icons/icon_mini_string.png
index 0e1198eac0..504556dd74 100644
--- a/tools/editor/icons/icon_mini_string.png
+++ b/tools/editor/icons/icon_mini_string.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_string_array.png b/tools/editor/icons/icon_mini_string_array.png
index 2d8e4ff0aa..5177014185 100644
--- a/tools/editor/icons/icon_mini_string_array.png
+++ b/tools/editor/icons/icon_mini_string_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_transform.png b/tools/editor/icons/icon_mini_transform.png
index b90ee1cef8..0107107a96 100644
--- a/tools/editor/icons/icon_mini_transform.png
+++ b/tools/editor/icons/icon_mini_transform.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_variant.png b/tools/editor/icons/icon_mini_variant.png
index 84b1e04264..285f0bcd16 100644
--- a/tools/editor/icons/icon_mini_variant.png
+++ b/tools/editor/icons/icon_mini_variant.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_vector2.png b/tools/editor/icons/icon_mini_vector2.png
index 56b7726137..a7caa1797f 100644
--- a/tools/editor/icons/icon_mini_vector2.png
+++ b/tools/editor/icons/icon_mini_vector2.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_vector2_array.png b/tools/editor/icons/icon_mini_vector2_array.png
index a8dd5e89a0..de546de16c 100644
--- a/tools/editor/icons/icon_mini_vector2_array.png
+++ b/tools/editor/icons/icon_mini_vector2_array.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_vector3.png b/tools/editor/icons/icon_mini_vector3.png
index b8999c9c22..69baeb229b 100644
--- a/tools/editor/icons/icon_mini_vector3.png
+++ b/tools/editor/icons/icon_mini_vector3.png
Binary files differ
diff --git a/tools/editor/icons/icon_mini_vector3_array.png b/tools/editor/icons/icon_mini_vector3_array.png
index 94a6f64043..6bddbaf627 100644
--- a/tools/editor/icons/icon_mini_vector3_array.png
+++ b/tools/editor/icons/icon_mini_vector3_array.png
Binary files differ
diff --git a/tools/editor/icons/source/icon_mini_aabb.svg b/tools/editor/icons/source/icon_mini_aabb.svg
new file mode 100644
index 0000000000..f6cc3feda1
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_aabb.svg
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_aabb.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="3.148993"
+ inkscape:cy="6.4579802"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1041.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 l 2,0 0,-6 -2,0 z m 0,2 0,2 a 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z"
+ id="path4893"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#f5acbb;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1046.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 l 2,0 0,-6 -2,0 z m 0,2 0,2 a 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z"
+ id="path4234"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4145"
+ d="m 12.999983,1043.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 12.999983,1049.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ id="path4147" />
+ <rect
+ transform="matrix(0,1,1,0,0,0)"
+ y="11"
+ x="1041.3622"
+ height="2.0000002"
+ width="8.0000172"
+ id="rect4149"
+ style="fill:#ee7991;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#f5acbb;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8,1044.3622 0,8 2,0 a 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 l 0,-2 -2,0 z m 2,4 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 l 0,-2 z"
+ id="path4151"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_array.svg b/tools/editor/icons/source/icon_mini_array.svg
new file mode 100644
index 0000000000..a0a2014fbb
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_array.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="9.4953495"
+ inkscape:cy="4.8350599"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4245"
+ width="2"
+ height="2.999984"
+ x="11"
+ y="1047.3622" />
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 14,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4253"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1047.3622"
+ x="7"
+ height="2.999984"
+ width="2"
+ id="rect4150"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4152"
+ d="m 10,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ id="path4849"
+ d="m 4,1050.3625 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4,1044.3625 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4851" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1050.3622"
+ x="4"
+ height="6.0000014"
+ width="2"
+ id="rect4853"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4141"
+ width="1"
+ height="2.0000174"
+ x="10"
+ y="1044.3622" />
+ <rect
+ y="1044.3622"
+ x="14"
+ height="2.0000174"
+ width="1"
+ id="rect4143"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_boolean.svg b/tools/editor/icons/source/icon_mini_boolean.svg
new file mode 100644
index 0000000000..eb17279a62
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_boolean.svg
@@ -0,0 +1,131 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_boolean.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="3.4941399"
+ inkscape:cy="6.2480463"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4364"
+ width="2"
+ height="5.9999666"
+ x="-2"
+ y="1044.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1044.3622"
+ x="-2"
+ height="2.0000174"
+ width="1"
+ id="rect4368"
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1044.3623 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4370"
+ inkscape:connector-curvature="0" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1047.3622"
+ x="13"
+ height="5"
+ width="2"
+ id="rect4374"
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4378"
+ d="m 2,1050.3623 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(-1,1)"
+ y="1042.3622"
+ x="-2"
+ height="3.9999492"
+ width="2"
+ id="rect4384"
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16,1050.3623 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4392"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1044.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z"
+ id="path4148"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#8da6f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 11,1044.3622 a 3,3 0 0 0 -3,3 3,3 0 0 0 3,3 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 z m 0,2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 1.0000174,1.0000174 0 0 1 -1,-1 1.0000174,1.0000174 0 0 1 1,-1 z"
+ id="path4174"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_color.svg b/tools/editor/icons/source/icon_mini_color.svg
new file mode 100644
index 0000000000..cdc176e00c
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_color.svg
@@ -0,0 +1,126 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_color.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ id="clipPath4253"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4255"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4199"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ id="path4201"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4392">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ id="path4394"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ id="clipPath4196"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4198"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="5.4869016"
+ inkscape:cy="6.8192689"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 4 4 A 3 3 0 0 0 1 7 A 3 3 0 0 0 4 10 L 5 10 L 5 8 L 4 8 A 1.0000174 1.0000174 0 0 1 3 7 A 1.0000174 1.0000174 0 0 1 4 6 L 5 6 L 5 4 L 4 4 z "
+ transform="translate(0,1040.3622)"
+ id="rect4667" />
+ <path
+ style="fill:#70bfff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 14 4 A 3 3 0 0 0 11 7 L 11 10 L 13 10 L 13 7 A 1.0000174 1.0000174 0 0 1 14 6 L 15 6 L 15 4 L 14 4 z "
+ transform="translate(0,1040.3622)"
+ id="rect4245" />
+ <path
+ style="fill:#7aff70;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 6 2 L 6 7 A 3 3 0 0 0 9 10 L 10 10 L 10 8 L 9 8 A 1.0000174 1.0000174 0 0 1 8 7 L 8 2 L 6 2 z "
+ transform="translate(0,1040.3622)"
+ id="rect4815" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_color_array.svg b/tools/editor/icons/source/icon_mini_color_array.svg
new file mode 100644
index 0000000000..2ec0e186b5
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_color_array.svg
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_color_array.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="2.3647109"
+ inkscape:cy="10.148485"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="1050.3622"
+ x="0"
+ height="1.9999826"
+ width="4"
+ id="rect4158"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4160"
+ width="2"
+ height="12.000017"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4162"
+ width="4"
+ height="2.0000174"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4155"
+ width="4"
+ height="1.9999826"
+ x="-16"
+ y="1050.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="12.000017"
+ width="2"
+ id="rect4157"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="2.0000174"
+ width="4"
+ id="rect4159"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#ff7070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 6 3.5 A 3 3 0 0 0 3 6.5 A 3 3 0 0 0 6 9.5 L 7 9.5 L 7 7.5 L 6 7.5 A 1.0000174 1.0000174 0 0 1 5 6.5 A 1.0000174 1.0000174 0 0 1 6 5.5 L 7 5.5 L 7 3.5 L 6 3.5 z "
+ transform="translate(0,1040.3622)"
+ id="rect4667" />
+ <rect
+ style="fill:#70bfff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4245"
+ width="2"
+ height="2.999984"
+ x="10"
+ y="1046.8622" />
+ <path
+ style="fill:#70bfff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 13,1043.8622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4253"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#7aff70;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 7 1.5 L 7 6.5 A 3 3 0 0 0 10 9.5 L 10 7.5 A 1.0000174 1.0000174 0 0 1 9 6.5 L 9 1.5 L 7 1.5 z "
+ transform="translate(0,1040.3622)"
+ id="rect4815" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_dictionary.svg b/tools/editor/icons/source/icon_mini_dictionary.svg
new file mode 100644
index 0000000000..813ba97613
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_dictionary.svg
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_dictionary.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="4.4726786"
+ inkscape:cy="6.5768127"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ transform="scale(1,-1)"
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4607"
+ width="2"
+ height="4.9999828"
+ x="13"
+ y="-1047.3623" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1046.3623"
+ x="15"
+ height="2.0000174"
+ width="1"
+ id="rect4609"
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4611"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 11,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4617"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4621"
+ d="m 11,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4412"
+ width="2"
+ height="3.9999492"
+ x="6"
+ y="1046.3623" />
+ <rect
+ y="1042.3623"
+ x="6"
+ height="1.9999928"
+ width="2"
+ id="rect4432"
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1044.362 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4843" />
+ <path
+ id="path4845"
+ d="m 3,1050.362 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4847"
+ width="2"
+ height="7.9999843"
+ x="3"
+ y="1042.3622" />
+ <rect
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4144"
+ width="1"
+ height="1.9999928"
+ x="11"
+ y="1044.3622" />
+ <rect
+ y="1048.3622"
+ x="11"
+ height="1.9999928"
+ width="1"
+ id="rect4146"
+ style="fill:#77edb1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_float.svg b/tools/editor/icons/source/icon_mini_float.svg
new file mode 100644
index 0000000000..1007955ea9
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_float.svg
@@ -0,0 +1,147 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_float.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="5.8021561"
+ inkscape:cy="5.7934213"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="1045.3623"
+ x="0"
+ height="4.9999828"
+ width="2"
+ id="rect4498"
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4500"
+ width="2"
+ height="2.0000174"
+ x="2"
+ y="1046.3623" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4502"
+ d="m 3,1042.3623 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4504"
+ width="2"
+ height="5"
+ x="6"
+ y="-1047.3622"
+ transform="scale(1,-1)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4506"
+ d="m 9,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="-1047.3623"
+ x="12"
+ height="4.9999828"
+ width="2"
+ id="rect4508"
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4512"
+ d="m 15,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#61daf4;fill-opacity:1;stroke:none"
+ id="rect4142"
+ width="1"
+ height="2"
+ x="9"
+ y="1048.3622" />
+ <rect
+ y="1044.3622"
+ x="14"
+ height="2"
+ width="2"
+ id="rect4144"
+ style="fill:#61daf4;fill-opacity:1;stroke:none" />
+ <rect
+ style="fill:#61daf4;fill-opacity:1;stroke:none"
+ id="rect4146"
+ width="1"
+ height="2"
+ x="15"
+ y="1048.3622" />
+ <rect
+ y="1042.3622"
+ x="3"
+ height="2"
+ width="1"
+ id="rect4148"
+ style="fill:#61daf4;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_float_array.svg b/tools/editor/icons/source/icon_mini_float_array.svg
new file mode 100644
index 0000000000..86807ca731
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_float_array.svg
@@ -0,0 +1,133 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_float_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="64.000006"
+ inkscape:cx="5.0069742"
+ inkscape:cy="7.9592671"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="1050.3622"
+ x="0"
+ height="2.0000174"
+ width="4"
+ id="rect4158"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4160"
+ width="2"
+ height="12.000017"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4162"
+ width="4"
+ height="2.0000174"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4170"
+ width="4"
+ height="2.0000174"
+ x="-16"
+ y="1050.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="12.000017"
+ width="2"
+ id="rect4172"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="2.0000174"
+ width="4"
+ id="rect4175"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6,1042.3622 a 3,3 0 0 0 -3,3 l 0,5 2,0 0,-2 1,0 0,-2 -1,0 0,-1 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4146" />
+ <path
+ style="fill:#61daf4;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,1042.3622 0,5 a 3,3 0 0 0 3,3 l 0,-2 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-1 1,0 0,-2 -1,0 0,-2 -2,0 z"
+ id="rect4498"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#c6f2fb;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1042.3622 0,5 a 3,3 0 0 0 3,3 l 0,-2 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-5 -2,0 z"
+ id="rect4504"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_image.svg b/tools/editor/icons/source/icon_mini_image.svg
new file mode 100644
index 0000000000..57faded5c8
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_image.svg
@@ -0,0 +1,156 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_image.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="3.9410412"
+ inkscape:cy="6.0438587"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4412"
+ width="2"
+ height="3.9999492"
+ x="0"
+ y="1045.3622" />
+ <rect
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4414"
+ width="2"
+ height="5.9999843"
+ x="3"
+ y="1043.3622" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4428"
+ d="m 5,1043.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1046.3622"
+ x="6"
+ height="3.0000174"
+ width="2"
+ id="rect4430"
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1041.3622"
+ x="0"
+ height="1.9999928"
+ width="2"
+ id="rect4432"
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1043.3622"
+ x="6"
+ height="5.9999843"
+ width="2"
+ id="rect4175"
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8,1043.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4177"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4179"
+ width="2"
+ height="3.0000174"
+ x="9"
+ y="1046.3622" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 14,1049.3624 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4843" />
+ <path
+ id="path4845"
+ d="m 14,1043.3624 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4847"
+ width="2"
+ height="6.0000014"
+ x="14"
+ y="-1049.3622"
+ transform="scale(1,-1)" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 13,1052.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ id="path4408" />
+ <rect
+ style="fill:#93f1b9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4410"
+ width="1"
+ height="2"
+ x="12"
+ y="1050.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_input.svg b/tools/editor/icons/source/icon_mini_input.svg
new file mode 100644
index 0000000000..9e966f77d1
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_input.svg
@@ -0,0 +1,146 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_input.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="2.8417629"
+ inkscape:cy="8.0681941"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ id="path4809"
+ d="m 10,1050.3625 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,1044.3625 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4811" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-1052.3622"
+ x="-10"
+ height="7.9999843"
+ width="2"
+ id="rect4813"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4412"
+ width="2"
+ height="3.9999492"
+ x="0"
+ y="1046.3625" />
+ <rect
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4414"
+ width="2"
+ height="5.9999843"
+ x="3"
+ y="1044.3624" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4428"
+ d="m 5,1044.3625 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1047.3624"
+ x="6"
+ height="3.0000174"
+ width="2"
+ id="rect4430"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1042.3625"
+ x="0"
+ height="1.9999928"
+ width="2"
+ id="rect4432"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(1,-1)"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4455"
+ width="2"
+ height="4.9999828"
+ x="13"
+ y="-1047.3625" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1046.3625"
+ x="15"
+ height="2.0000174"
+ width="1"
+ id="rect4457"
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#adf18f;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16,1050.3625 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4459"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_int_array.svg b/tools/editor/icons/source/icon_mini_int_array.svg
new file mode 100644
index 0000000000..23b086d5e1
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_int_array.svg
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_int_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="4.3434649"
+ inkscape:cy="6.0813959"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 0 0 L 0 2 L 0 10 L 0 12 L 2 12 L 4 12 L 4 10 L 2 10 L 2 2 L 4 2 L 4 0 L 0 0 z M 12 0 L 12 2 L 14 2 L 14 10 L 12 10 L 12 12 L 16 12 L 16 10 L 16 2 L 16 0 L 14 0 L 12 0 z "
+ transform="translate(0,1040.3622)"
+ id="rect4158" />
+ <path
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 2 L 3 4 L 5 4 L 5 2 L 3 2 z M 3 6 L 3 10 L 5 10 L 5 6 L 3 6 z "
+ id="rect4412"
+ transform="translate(0,1040.3622)" />
+ <path
+ style="fill:#c8e7f9;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 5 4 L 5 10 L 7 10 L 7 6 A 1.0000174 1.0000174 0 0 1 8 7 L 8 10 L 10 10 L 10 7 A 3 3 0 0 0 7 4 L 5 4 z "
+ transform="translate(0,1040.3622)"
+ id="rect4414" />
+ <path
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 10 2 L 10 7 A 3 3 0 0 0 13 10 L 13 8 A 1.0000174 1.0000174 0 0 1 12 7 L 12 6 L 13 6 L 13 4 L 12 4 L 12 2 L 10 2 z "
+ id="rect4455"
+ transform="translate(0,1040.3622)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_integer.svg b/tools/editor/icons/source/icon_mini_integer.svg
new file mode 100644
index 0000000000..c21322adb2
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_integer.svg
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_integer.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254837"
+ inkscape:cx="7.0145943"
+ inkscape:cy="6.0949691"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4412"
+ width="2"
+ height="3.9999492"
+ x="1"
+ y="1046.3622" />
+ <rect
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4414"
+ width="2"
+ height="5.9999843"
+ x="4"
+ y="1044.3622" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4428"
+ d="m 7,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1047.3622"
+ x="8"
+ height="3.0000174"
+ width="2"
+ id="rect4430"
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1042.3622"
+ x="1"
+ height="1.9999928"
+ width="2"
+ id="rect4432"
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(1,-1)"
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4455"
+ width="2"
+ height="4.9999828"
+ x="12"
+ y="-1047.3622" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1046.3622"
+ x="14"
+ height="2.0000174"
+ width="2"
+ id="rect4457"
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 15,1050.3621 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4459"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4142"
+ width="2"
+ height="1.9999928"
+ x="5"
+ y="1044.3622" />
+ <rect
+ style="fill:#7dc6ef;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4144"
+ width="1"
+ height="2.0000174"
+ x="15"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_matrix3.svg b/tools/editor/icons/source/icon_mini_matrix3.svg
new file mode 100644
index 0000000000..592230d13c
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_matrix3.svg
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_matrix3.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.071303"
+ inkscape:cy="4.582959"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 12.00042,1044.3622 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0.226563,-2.5 l -2.824219,0 z"
+ id="path4753"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4757"
+ d="m 12.00042,1046.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4771"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="-1050.3622"
+ x="4"
+ height="3"
+ width="2"
+ id="rect4773"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4775"
+ width="2"
+ height="5.9999828"
+ x="1"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1050.3622"
+ x="4"
+ height="5.9999828"
+ width="2"
+ id="rect4777"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4779"
+ d="m 6,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4781"
+ width="2"
+ height="3.0000002"
+ x="7"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4783"
+ width="4.0004196"
+ height="2"
+ x="11"
+ y="1043.3622" />
+ <rect
+ y="1050.3622"
+ x="11"
+ height="2"
+ width="1"
+ id="rect4173"
+ style="fill:#e3ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_matrix32.svg b/tools/editor/icons/source/icon_mini_matrix32.svg
new file mode 100644
index 0000000000..5159ea0b87
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_matrix32.svg
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_matrix32.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="1.5471383"
+ inkscape:cy="5.978497"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#ddf4aa;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 8 2 L 8 4 L 9 4 L 10 4 A 1 1 0 0 1 9 5 L 9 7 A 1 1 0 0 1 10 8 A 1 1 0 0 1 9 9 L 8 9 L 8 11 L 9 11 A 3 3 0 0 0 11.597656 9.5 A 3 3 0 0 0 11.597656 6.5 A 3 3 0 0 0 11.232422 5.9980469 A 3 3 0 0 0 11.597656 5.5 A 3 3 0 0 0 11.994141 4 L 12 4 L 12 2 L 9 2 L 8 2 z "
+ transform="translate(0,1040.3622)"
+ id="path4753" />
+ <rect
+ y="1048.3622"
+ x="11"
+ height="2"
+ width="5"
+ id="rect4763"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ sodipodi:open="true"
+ d="m 13,1050.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1"
+ sodipodi:end="4.712389"
+ sodipodi:start="1.5707963"
+ sodipodi:ry="2"
+ sodipodi:rx="2"
+ sodipodi:cy="1048.3622"
+ sodipodi:cx="13"
+ sodipodi:type="arc"
+ id="path4765"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4767"
+ d="m 13,1042.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4771"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="-1050.3622"
+ x="3"
+ height="3"
+ width="2"
+ id="rect4773"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4775"
+ width="2"
+ height="5.9999828"
+ x="0"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1050.3622"
+ x="3"
+ height="5.9999828"
+ width="2"
+ id="rect4777"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4779"
+ d="m 5,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#c4ec69;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4781"
+ width="2"
+ height="3.0000002"
+ x="6"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_object.svg b/tools/editor/icons/source/icon_mini_object.svg
new file mode 100644
index 0000000000..380be34903
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_object.svg
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_object.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="1.4141272"
+ inkscape:cy="5.8428771"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8,1050.3622 a 3,3 0 0 0 3,-3 3,3 0 0 0 -3,-3 l 0,-2 -2,0 0,8 2,0 z m 0,-2 0,-2 a 1.0000174,1.0000174 0 0 1 1,1 1.0000174,1.0000174 0 0 1 -1,1 z"
+ id="path4843"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4849"
+ d="m 3,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4851" />
+ <path
+ style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 15,1044.3622 0,5 a 3,3 0 0 1 -3,3 l 0,-2 a 1.0000174,1.0000174 0 0 0 1,-1 l 0,-5 2,0 z"
+ id="rect4293-6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1050.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ id="path4174" />
+ <path
+ id="path4176"
+ d="m 3,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#79f3e8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4140"
+ width="1"
+ height="2"
+ x="11"
+ y="1050.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_path.svg b/tools/editor/icons/source/icon_mini_path.svg
new file mode 100644
index 0000000000..ef247b8b8c
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_path.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_path.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254835"
+ inkscape:cx="8.9618505"
+ inkscape:cy="5.9123718"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="-1047.3622"
+ x="6"
+ height="4.9999828"
+ width="2"
+ id="rect4293"
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4295"
+ width="2"
+ height="2.0000174"
+ x="8"
+ y="-1046.3622"
+ transform="scale(1,-1)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4297"
+ d="m 9,1050.3621 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(1,-1)"
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4299"
+ width="2"
+ height="7.9999828"
+ x="11"
+ y="-1050.3622" />
+ <path
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 13,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4301"
+ inkscape:connector-curvature="0" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1050.3622"
+ x="14"
+ height="3.0000348"
+ width="2"
+ id="rect4303"
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 2,1048.3625 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ id="path4461" />
+ <path
+ id="path4463"
+ d="m 2,1042.3625 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4465"
+ width="2"
+ height="7.9999843"
+ x="-2"
+ y="-1050.3622"
+ transform="scale(-1,-1)" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1050.3622"
+ x="9"
+ height="2.0000174"
+ width="1"
+ id="rect4143"
+ style="fill:#6993ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_plane.svg b/tools/editor/icons/source/icon_mini_plane.svg
new file mode 100644
index 0000000000..bc3992cdd6
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_plane.svg
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_plane.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="5.5391662"
+ inkscape:cy="7.4683409"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ id="path4809"
+ d="m 3,1048.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1042.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4811" />
+ <rect
+ transform="scale(-1,-1)"
+ y="-1050.3619"
+ x="-3"
+ height="7.9999843"
+ width="2"
+ id="rect4813"
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(1,-1)"
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4815"
+ width="2"
+ height="4.9999828"
+ x="7"
+ y="-1047.3623" />
+ <path
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4819"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1044.3622"
+ x="11"
+ height="5.9999843"
+ width="2"
+ id="rect4324"
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 13,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4342"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#f77070;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4344"
+ width="2"
+ height="3.0000174"
+ x="14"
+ y="1047.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_quat.svg b/tools/editor/icons/source/icon_mini_quat.svg
new file mode 100644
index 0000000000..27188a3410
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_quat.svg
@@ -0,0 +1,123 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_quat.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="7.0330887"
+ inkscape:cy="6.0717303"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1049.3625 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4843" />
+ <path
+ id="path4845"
+ d="m 3,1043.3625 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4847"
+ width="2"
+ height="7.9999843"
+ x="3"
+ y="-1051.3622"
+ transform="scale(1,-1)" />
+ <rect
+ y="-1046.3623"
+ x="13"
+ height="4.9999828"
+ width="2"
+ id="rect4293-6"
+ style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4295-2"
+ width="1"
+ height="2.0000174"
+ x="15"
+ y="-1045.3623"
+ transform="scale(1,-1)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4297-9"
+ d="m 16,1049.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#f298c0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4,1043.3622 0,3 a 3,3 0 0 0 3,3 l 2,0 0,-6 -2,0 0,4 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-3 -2,0 z"
+ id="rect4366"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ec69a3;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 11 3 A 3 3 0 0 0 8 6 A 3 3 0 0 0 11 9 L 13 9 L 13 3 L 11 3 z M 11 5 L 11 7 A 1.0000174 1.0000174 0 0 1 10 6 A 1.0000174 1.0000174 0 0 1 11 5 z "
+ transform="translate(0,1040.3622)"
+ id="path4849" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_raw_array.svg b/tools/editor/icons/source/icon_mini_raw_array.svg
new file mode 100644
index 0000000000..cb735b5615
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_raw_array.svg
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_raw_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="-2.5947078"
+ inkscape:cy="7.7867435"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 0 0 L 0 2 L 0 10 L 0 12 L 4 12 L 4 10 L 2 10 L 2 2 L 4 2 L 4 0 L 2 0 L 0 0 z M 12 0 L 12 2 L 14 2 L 14 10 L 12 10 L 12 12 L 16 12 L 16 10 L 16 2 L 16 0 L 14 0 L 12 0 z "
+ transform="translate(0,1040.3622)"
+ id="rect4158" />
+ <rect
+ style="fill:#69ec9e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4245"
+ width="2"
+ height="2.999984"
+ x="2"
+ y="1046.3622" />
+ <rect
+ y="1043.3622"
+ x="5"
+ height="2.0000174"
+ width="1"
+ id="rect4251"
+ style="fill:#69ec9e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#69ec9e;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1043.3623 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4253"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#aaf4c8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 6,1049.3622 0,-6 2,0 0,4 a 1.0000174,1.0000174 0 0 0 1,-1 l 0,-3 2,0 0,3 0,1 a 1.0000174,1.0000174 0 0 0 1,-1 l 0,-3 2,0 0,3 a 3,3 0 0 1 -3,3 l -2,0 0,-0.1758 a 3,3 0 0 1 -1,0.1758 l -2,0 z"
+ id="path4771"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_rect2.svg b/tools/editor/icons/source/icon_mini_rect2.svg
new file mode 100644
index 0000000000..ded27f049f
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_rect2.svg
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_rect2.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="2.7000496"
+ inkscape:cy="5.1067461"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="1047.3622"
+ x="0"
+ height="2.999984"
+ width="2"
+ id="rect4601"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4605"
+ d="m 3,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(1,-1)"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4607"
+ width="2"
+ height="4.9999828"
+ x="13"
+ y="-1047.3622" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1046.3622"
+ x="15"
+ height="2.0000174"
+ width="1"
+ id="rect4609"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16,1050.3621 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4611"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4617"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4619"
+ width="1"
+ height="2.0000174"
+ x="7"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4621"
+ d="m 7,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4144"
+ width="1"
+ height="2.0000174"
+ x="12"
+ y="1044.3622" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4146"
+ d="m 12,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1050.3622"
+ x="12"
+ height="2.0000174"
+ width="1"
+ id="rect4148"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 12,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4150"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4152"
+ d="m 7,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4154"
+ width="2"
+ height="1"
+ x="6"
+ y="1046.3622" />
+ <rect
+ style="fill:#f191a5;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4156"
+ width="1"
+ height="2.0000174"
+ x="3"
+ y="-1046.3622"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_rid.svg b/tools/editor/icons/source/icon_mini_rid.svg
new file mode 100644
index 0000000000..6df13ae43d
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_rid.svg
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_rid.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254836"
+ inkscape:cx="8.577775"
+ inkscape:cy="6.6679205"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="true"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="false"
+ inkscape:snap-smooth-nodes="false"
+ inkscape:snap-nodes="true"
+ inkscape:snap-midpoints="false">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4245"
+ width="2"
+ height="2.999984"
+ x="1"
+ y="1047.3622" />
+ <rect
+ y="1042.3623"
+ x="7"
+ height="1.9998953"
+ width="2"
+ id="rect4247"
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4249"
+ width="2"
+ height="4.0000014"
+ x="7"
+ y="1046.3622" />
+ <rect
+ y="1044.3622"
+ x="4"
+ height="2.0000174"
+ width="1"
+ id="rect4251"
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 4,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4253"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path4260"
+ d="m 13,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 13,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4262" />
+ <rect
+ y="1042.3622"
+ x="14"
+ height="7.9999843"
+ width="2"
+ id="rect4264"
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4142"
+ width="1"
+ height="2.0000174"
+ x="13"
+ y="1044.3622" />
+ <rect
+ y="1048.3622"
+ x="13"
+ height="2.0000174"
+ width="1"
+ id="rect4144"
+ style="fill:#69ec9a;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_string.svg b/tools/editor/icons/source/icon_mini_string.svg
new file mode 100644
index 0000000000..a655f70d33
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_string.svg
@@ -0,0 +1,236 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_string.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ id="clipPath4253"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4255"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4199"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ id="path4201"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4392">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ id="path4394"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ id="clipPath4196"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4198"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4253-75"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4255-3"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4199-5"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ id="path4201-6"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4392-2">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ id="path4394-9"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ id="clipPath4196-1"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4198-2"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4253-7"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4255-5"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4199-3"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ id="path4201-5"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4392-6">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ id="path4394-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ id="clipPath4196-9"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4198-1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="10.223117"
+ inkscape:cy="7.0200789"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1042.3622 a 3,3 0 0 0 -3,3 l 0,2 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 3,-3 l 0,-2 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4534"
+ inkscape:connector-curvature="0" />
+ <rect
+ transform="scale(1,-1)"
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4540"
+ width="2"
+ height="4.9999828"
+ x="7"
+ y="-1047.3623" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1046.3623"
+ x="9"
+ height="2.0000174"
+ width="2"
+ id="rect4542"
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 10,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4544"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 15 4 A 3 3 0 0 0 12 7 L 12 10 L 14 10 L 14 7 A 1.0000174 1.0000174 0 0 1 15 6 L 16 6 L 16 4 L 15 4 z "
+ transform="translate(0,1040.3622)"
+ id="rect4245-5" />
+ <rect
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4208"
+ width="1"
+ height="2"
+ x="0"
+ y="1048.3622" />
+ <rect
+ y="1042.3622"
+ x="5"
+ height="2"
+ width="1"
+ id="rect4210"
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4165"
+ width="1"
+ height="2.0000174"
+ x="10"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_string_array.svg b/tools/editor/icons/source/icon_mini_string_array.svg
new file mode 100644
index 0000000000..cd2e850c49
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_string_array.svg
@@ -0,0 +1,289 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_string_array.svg">
+ <defs
+ id="defs4">
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-753">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-56"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-2">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-9"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-1"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-27"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-0">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-9"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-75">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-3"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-5">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-6"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-2"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-9"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-2"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4253-7-3">
+ <path
+ style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 16.458984,1024.37 a 12.000027,12.000027 0 0 0 -3.564453,0.4004 12.000027,12.000027 0 0 0 -8.4863279,14.6973 12.000027,12.000027 0 0 0 14.6972659,8.4863 12.000027,12.000027 0 0 0 8.486328,-14.6973 12.000027,12.000027 0 0 0 -11.132813,-8.8867 z M 16.25,1029.8212 a 6.5451717,6.5451717 0 0 1 6.072266,4.8476 6.5451717,6.5451717 0 0 1 -4.628907,8.0157 6.5451717,6.5451717 0 0 1 -8.0156246,-4.6289 6.5451717,6.5451717 0 0 1 4.6289066,-8.0157 6.5451717,6.5451717 0 0 1 1.943359,-0.2187 z"
+ id="path4255-5-6"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4199-3-0">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4201-5-6"
+ d="m 16.5,1025.8622 a 11.8125,10.499999 0 0 0 -11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125001,10.5 11.8125,10.499999 0 0 0 11.8125,-10.5 11.8125,10.499999 0 0 0 -11.8125,-10.5 z m -3.375,3 a 3.375,2.9999997 0 0 1 3.375,3 3.375,2.9999997 0 0 1 -3.375,3 3.375,2.9999997 0 0 1 -3.3750001,-3 3.375,2.9999997 0 0 1 3.3750001,-3 z"
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ id="clipPath4392-6-2"
+ clipPathUnits="userSpaceOnUse">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4394-2-6"
+ d="m 8.072266,1041.3622 a 5,5 0 0 0 -3.607422,1.4648 5,5 0 0 0 0,7.0704 5,5 0 0 0 7.070312,0 l -1.416015,-1.4161 A 3,3 0 0 1 8,1049.3622 a 3,3 0 0 1 -3,-3 3,3 0 0 1 3,-3 3,3 0 0 1 2.119141,0.8809 l 1.416015,-1.4161 a 5,5 0 0 0 -3.46289,-1.4648 z"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </clipPath>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath4196-9-1">
+ <path
+ style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ d="m 8.0624999,1025.8622 a 3.375,2.9999997 0 0 0 -3.375,3 3.375,2.9999997 0 0 0 1.6875,2.5957 l 0,9.8115 a 3.375,2.9999997 0 0 0 -1.6875,2.5928 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.3750001,-3 3.375,2.9999997 0 0 0 -1.6875001,-2.5957 l 0,-8.7832 11.9311511,10.6054 a 3.375,2.9999997 0 0 0 -0.118651,0.7735 3.375,2.9999997 0 0 0 3.375,3 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -0.873413,0.1025 l -11.927857,-10.6025 9.884399,0 a 3.375,2.9999997 0 0 0 2.916871,1.5 3.375,2.9999997 0 0 0 3.375,-3 3.375,2.9999997 0 0 0 -3.375,-3 3.375,2.9999997 0 0 0 -2.920166,1.5 l -11.037964,0 a 3.375,2.9999997 0 0 0 -2.9168701,-1.5 z"
+ id="path4198-1-8"
+ inkscape:connector-curvature="0" />
+ </clipPath>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="45.254838"
+ inkscape:cx="8.8695857"
+ inkscape:cy="6.6197"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 0 0 L 0 2 L 0 10 L 0 12 L 2 12 L 4 12 L 4 10 L 2 10 L 2 2 L 4 2 L 4 0 L 2 0 L 0 0 z M 12 0 L 12 2 L 14 2 L 14 10 L 12 10 L 12 12 L 16 12 L 16 10 L 16 0 L 12 0 z "
+ transform="translate(0,1040.3622)"
+ id="rect4158" />
+ <path
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1042.3622 a 3,3 0 0 0 -3,3 l 0,2 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 3,-3 l 0,-2 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4184"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 14,1044.3622 a 3,3 0 0 0 -3,3 l 0,3 2,0 0,-3 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4534"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#b5d3f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8,1042.3622 0,5 a 3,3 0 0 0 3,3 l 0,-2 a 1.0000174,1.0000174 0 0 1 -1,-1 l 0,-1 1,0 0,-2 -1,0 0,-2 -2,0 z"
+ id="rect4540"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none"
+ id="rect4184"
+ width="1"
+ height="2"
+ x="7"
+ y="1042.3622" />
+ <rect
+ y="1048.3622"
+ x="2"
+ height="2"
+ width="1"
+ id="rect4186"
+ style="fill:#6ba7ec;fill-opacity:1;stroke:none" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_transform.svg b/tools/editor/icons/source/icon_mini_transform.svg
new file mode 100644
index 0000000000..a844171dd4
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_transform.svg
@@ -0,0 +1,96 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_transform.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="5.8969613"
+ inkscape:cy="6.372864"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#f3e49c;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1042.3622 a 3,3 0 0 0 -3,3 l 0,5 2,0 0,-2 1,0 0,-2 -1,0 0,-1 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="rect4455"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ecd669;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8,1044.3622 0,6 2,0 0,-4 a 1.0000174,1.0000174 0 0 1 1,1 l 0,3 2,0 0,-3 0,-1 a 1.0000174,1.0000174 0 0 1 1,1 l 0,3 2,0 0,-3 a 3,3 0 0 0 -3,-3 l -2,0 0,0.1758 a 3,3 0 0 0 -1,-0.1758 l -2,0 z"
+ id="path4771"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ecd669;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 7,1044.3622 a 3,3 0 0 0 -3,3 l 0,3 2,0 0,-3 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="rect4601"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#f3e49c;fill-opacity:1;stroke:none"
+ id="rect4139"
+ width="1"
+ height="2"
+ x="3"
+ y="1042.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_variant.svg b/tools/editor/icons/source/icon_mini_variant.svg
new file mode 100644
index 0000000000..6883baa584
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_variant.svg
@@ -0,0 +1,138 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_variant.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="5.8864792"
+ inkscape:cy="6.2518921"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="1044.3622"
+ x="3"
+ height="5.9999666"
+ width="2"
+ id="rect4320"
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1044.3622"
+ x="6"
+ height="5.9999843"
+ width="2"
+ id="rect4324"
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4326"
+ width="1"
+ height="2.0000174"
+ x="3"
+ y="1044.3622" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4328"
+ d="m 3,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 14,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4330" />
+ <rect
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4334"
+ width="2"
+ height="7.9999843"
+ x="14"
+ y="-1052.3622"
+ transform="scale(1,-1)" />
+ <rect
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4338"
+ width="2"
+ height="2.9999826"
+ x="11"
+ y="-1047.3622"
+ transform="scale(1,-1)" />
+ <path
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4340"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8,1044.3622 a 3,3 0 0 1 3,3 l -2,0 a 1.0000174,1.0000174 0 0 0 -1,-1 l 0,-2 z"
+ id="path4342"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#69ecbd;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4344"
+ width="2"
+ height="3.0000174"
+ x="9"
+ y="1047.3622" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_vector2.svg b/tools/editor/icons/source/icon_mini_vector2.svg
new file mode 100644
index 0000000000..5c9aaeccff
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_vector2.svg
@@ -0,0 +1,149 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_vector2.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="-0.61809703"
+ inkscape:cy="8.3891446"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 3,1050.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ id="path4301"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1044.3622"
+ x="4"
+ height="3"
+ width="2"
+ id="rect4303"
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4159"
+ width="5"
+ height="2"
+ x="11"
+ y="1048.3622" />
+ <rect
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4661"
+ width="2"
+ height="5.9999828"
+ x="1"
+ y="1044.3622" />
+ <rect
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4667"
+ width="1"
+ height="2.0000174"
+ x="9"
+ y="1044.3622" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4669"
+ d="m 9,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ transform="scale(1,-1)"
+ y="-1050.3622"
+ x="9"
+ height="2.0000174"
+ width="1"
+ id="rect4671"
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ id="path4673"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path4677"
+ sodipodi:type="arc"
+ sodipodi:cx="13"
+ sodipodi:cy="1048.3622"
+ sodipodi:rx="2"
+ sodipodi:ry="2"
+ sodipodi:start="1.5707963"
+ sodipodi:end="4.712389"
+ d="m 13,1050.3622 a 2,2 0 0 1 -1.732051,-1 2,2 0 0 1 0,-2 2,2 0 0 1 1.732051,-1"
+ sodipodi:open="true" />
+ <path
+ style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 13,1042.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z"
+ id="path4679"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1042.3622"
+ x="12"
+ height="2"
+ width="1"
+ id="rect4684"
+ style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_vector2_array.svg b/tools/editor/icons/source/icon_mini_vector2_array.svg
new file mode 100644
index 0000000000..03850f7c86
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_vector2_array.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_vector2_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="7.5779741"
+ inkscape:cy="8.910903"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="1050.3622"
+ x="0"
+ height="2.0000174"
+ width="4"
+ id="rect4158"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4160"
+ width="2"
+ height="12.000017"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4162"
+ width="4"
+ height="2.0000174"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4170"
+ width="4"
+ height="2.0000174"
+ x="-16"
+ y="1050.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="12.000017"
+ width="2"
+ id="rect4172"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="2.0000174"
+ width="4"
+ id="rect4175"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#bd91f1;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 3 L 3 9 L 5 9 A 3 3 0 0 0 8 6 L 8 3 L 6 3 L 6 6 A 1.0000174 1.0000174 0 0 1 5 7 L 5 3 L 3 3 z "
+ transform="translate(0,1040.3622)"
+ id="path4301" />
+ <path
+ style="fill:#dcc5f8;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.9999969,1042.3622 0,2 1.0000001,0 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 2,2 0 0 0 -1.732422,1 2,2 0 0 0 -0.265625,1 l -0.00195,0 0,0.047 0,1.9531 2,0 3,0 0,-2 -3,0 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597659,-1.5001 l -1.0000001,0 z"
+ id="rect4159"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_vector3.svg b/tools/editor/icons/source/icon_mini_vector3.svg
new file mode 100644
index 0000000000..e99a211ae0
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_vector3.svg
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_vector3.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000002"
+ inkscape:cx="5.3282118"
+ inkscape:cy="6.0229362"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4705"
+ d="m 3.0004202,1050.3622 a 3,3 0 0 0 3,-3 l -2,0 a 1.0000174,1.0000174 0 0 1 -1,1 l 0,2 z"
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4707"
+ width="2"
+ height="3"
+ x="4.0004206"
+ y="1044.3622" />
+ <rect
+ y="1044.3622"
+ x="1.0004202"
+ height="5.9999828"
+ width="2"
+ id="rect4711"
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ y="1044.3622"
+ x="9.0004196"
+ height="2.0000174"
+ width="1"
+ id="rect4713"
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 9.0004202,1044.3622 a 3,3 0 0 0 -3,3 l 2,0 a 1.0000174,1.0000174 0 0 1 1,-1 l 0,-2 z"
+ id="path4715"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4717"
+ width="1"
+ height="2.0000174"
+ x="9.0004196"
+ y="-1050.3622"
+ transform="scale(1,-1)" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path4719"
+ d="m 9.0004202,1050.3622 a 3,3 0 0 1 -3,-3 l 2,0 a 1.0000174,1.0000174 0 0 0 1,1 l 0,2 z"
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <path
+ style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 13 2 L 13 3 A 1 1 0 0 1 14 4 A 1 1 0 0 1 13 5 L 13 7 A 3 3 0 0 0 15.597656 5.5 A 3 3 0 0 0 15.597656 2.5 A 3 3 0 0 0 15.234375 2 L 13 2 z "
+ transform="translate(0,1040.3622)"
+ id="path4723" />
+ <rect
+ style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4725"
+ width="3.9995804"
+ height="2"
+ x="12.00042"
+ y="1042.3622" />
+ <path
+ style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 13.00042,1045.3622 0,2 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 l 0,2 a 3,3 0 0 0 2.597656,-1.5 3,3 0 0 0 0,-3 3,3 0 0 0 -2.597656,-1.5 z"
+ id="path4727"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="1049.3622"
+ x="12.00042"
+ height="2"
+ width="1"
+ id="rect4729"
+ style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ </g>
+</svg>
diff --git a/tools/editor/icons/source/icon_mini_vector3_array.svg b/tools/editor/icons/source/icon_mini_vector3_array.svg
new file mode 100644
index 0000000000..bbac554614
--- /dev/null
+++ b/tools/editor/icons/source/icon_mini_vector3_array.svg
@@ -0,0 +1,129 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="16"
+ height="12"
+ viewBox="0 0 16 12"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/home/djrm/Projects/godot/tools/editor/icons/icon_add_track.png"
+ inkscape:export-xdpi="45"
+ inkscape:export-ydpi="45"
+ sodipodi:docname="icon_mini_vector3_array.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32.000001"
+ inkscape:cx="4.9242706"
+ inkscape:cy="8.3355467"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-bbox="true"
+ inkscape:bbox-paths="true"
+ inkscape:bbox-nodes="true"
+ inkscape:snap-bbox-edge-midpoints="true"
+ inkscape:snap-bbox-midpoints="false"
+ inkscape:snap-object-midpoints="true"
+ inkscape:snap-center="true"
+ inkscape:window-width="1920"
+ inkscape:window-height="1016"
+ inkscape:window-x="0"
+ inkscape:window-y="27"
+ inkscape:window-maximized="1"
+ inkscape:object-nodes="true"
+ inkscape:snap-smooth-nodes="true">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1040.3622)">
+ <rect
+ y="1050.3622"
+ x="0"
+ height="2.0000174"
+ width="4"
+ id="rect4158"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4160"
+ width="2"
+ height="12.000017"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4162"
+ width="4"
+ height="2.0000174"
+ x="0"
+ y="1040.3622" />
+ <rect
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4170"
+ width="4"
+ height="2.0000174"
+ x="-16"
+ y="1050.3622"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="12.000017"
+ width="2"
+ id="rect4172"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <rect
+ y="1040.3622"
+ x="-16"
+ height="2.0000174"
+ width="4"
+ id="rect4175"
+ style="fill:#e0e0e0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ transform="scale(-1,1)" />
+ <path
+ style="fill:#e286f0;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 3 3 L 3 9 L 5 9 A 3 3 0 0 0 8 6 L 8 3 L 6 3 L 6 6 A 1.0000174 1.0000174 0 0 1 5 7 L 5 3 L 3 3 z "
+ transform="translate(0,1040.3622)"
+ id="path4705" />
+ <path
+ style="fill:#eeb9f6;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 8 1 L 8 3 L 9 3 L 10 3 A 1 1 0 0 1 9 4 L 9 6 A 1 1 0 0 1 10 7 A 1 1 0 0 1 9 8 L 8 8 L 8 10 L 9 10 A 3 3 0 0 0 11.597656 8.5 A 3 3 0 0 0 11.597656 5.5 A 3 3 0 0 0 11.232422 4.9980469 A 3 3 0 0 0 11.597656 4.5 A 3 3 0 0 0 11.996094 3 L 12 3 L 12 1 L 11.234375 1 L 9 1 L 8 1 z "
+ transform="translate(0,1040.3622)"
+ id="path4723" />
+ </g>
+</svg>
diff --git a/tools/editor/io_plugins/editor_font_import_plugin.cpp b/tools/editor/io_plugins/editor_font_import_plugin.cpp
index 70bc44ba7d..df3741f0d4 100644
--- a/tools/editor/io_plugins/editor_font_import_plugin.cpp
+++ b/tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -100,7 +100,7 @@ public:
bool color_use_monochrome;
String gradient_image;
- bool disable_filter;
+ bool enable_filter;
bool round_advance;
bool premultiply_alpha;
@@ -166,8 +166,8 @@ public:
color_use_monochrome=p_value;
else if (n=="advanced/round_advance")
round_advance=p_value;
- else if (n=="advanced/disable_filter")
- disable_filter=p_value;
+ else if (n=="advanced/enable_filter")
+ enable_filter=p_value;
else if (n=="advanced/premultiply_alpha")
premultiply_alpha=p_value;
else
@@ -236,8 +236,8 @@ public:
r_ret=color_use_monochrome;
else if (n=="advanced/round_advance")
r_ret=round_advance;
- else if (n=="advanced/disable_filter")
- r_ret=disable_filter;
+ else if (n=="advanced/enable_filter")
+ r_ret=enable_filter;
else if (n=="advanced/premultiply_alpha")
r_ret=premultiply_alpha;
else
@@ -301,7 +301,7 @@ public:
}
p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/round_advance"));
- p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/disable_filter"));
+ p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/enable_filter"));
p_list->push_back(PropertyInfo(Variant::BOOL,"advanced/premultiply_alpha"));
}
@@ -341,7 +341,7 @@ public:
font_mode=FONT_BITMAP;
round_advance=true;
- disable_filter=false;
+ enable_filter=true;
premultiply_alpha=false;
}
@@ -374,7 +374,7 @@ public:
color_use_monochrome=false;
round_advance=true;
- disable_filter=false;
+ enable_filter=true;
premultiply_alpha=false;
}
@@ -1591,7 +1591,10 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
int space_space = from->get_option("extra_space/space");
int top_space = from->get_option("extra_space/top");
int bottom_space = from->get_option("extra_space/bottom");
- bool disable_filter = from->get_option("advanced/disable_filter");
+ bool enable_filter = from->get_option("advanced/enable_filter");
+ if (from->has_option("advanced/disable_filter")){ // this is a compatibility check for a deprecated option
+ enable_filter = !from->get_option("advanced/disable_filter");
+ }
Ref<BitmapFont> font;
@@ -1613,7 +1616,7 @@ Ref<BitmapFont> EditorFontImportPlugin::generate_font(const Ref<ResourceImportMe
{
Ref<ImageTexture> t = memnew(ImageTexture);
int flags;
- if (disable_filter)
+ if (!enable_filter)
flags=0;
else
flags=Texture::FLAG_FILTER;
diff --git a/tools/editor/plugins/canvas_item_editor_plugin.cpp b/tools/editor/plugins/canvas_item_editor_plugin.cpp
index 02a24f8ddb..3468f42a6c 100644
--- a/tools/editor/plugins/canvas_item_editor_plugin.cpp
+++ b/tools/editor/plugins/canvas_item_editor_plugin.cpp
@@ -290,6 +290,7 @@ Dictionary CanvasItemEditor::get_state() const {
state["snap_rotation"]=snap_rotation;
state["snap_relative"]=snap_relative;
state["snap_pixel"]=snap_pixel;
+ state["skeleton_show_bones"]=skeleton_show_bones;
return state;
}
void CanvasItemEditor::set_state(const Dictionary& p_state){
@@ -351,6 +352,12 @@ void CanvasItemEditor::set_state(const Dictionary& p_state){
int idx = edit_menu->get_popup()->get_item_index(SNAP_USE_PIXEL);
edit_menu->get_popup()->set_item_checked(idx,snap_pixel);
}
+
+ if (state.has("skeleton_show_bones")) {
+ skeleton_show_bones=state["skeleton_show_bones"];
+ int idx = skeleton_menu->get_item_index(SKELETON_SHOW_BONES);
+ skeleton_menu->set_item_checked(idx,skeleton_show_bones);
+ }
}
@@ -648,7 +655,7 @@ void CanvasItemEditor::_key_move(const Vector2& p_dir, bool p_snap, KeyMoveMODE
if (editor_selection->get_selected_node_list().empty())
return;
- undo_redo->create_action(TTR("Move Action"),true);
+ undo_redo->create_action(TTR("Move Action"),UndoRedo::MERGE_ENDS);
List<Node*> &selection = editor_selection->get_selected_node_list();
@@ -2083,76 +2090,78 @@ void CanvasItemEditor::_viewport_draw() {
}
- int bone_width = EditorSettings::get_singleton()->get("2d_editor/bone_width");
- Color bone_color1 = EditorSettings::get_singleton()->get("2d_editor/bone_color1");
- Color bone_color2 = EditorSettings::get_singleton()->get("2d_editor/bone_color2");
- Color bone_ik_color = EditorSettings::get_singleton()->get("2d_editor/bone_ik_color");
- Color bone_selected_color = EditorSettings::get_singleton()->get("2d_editor/bone_selected_color");
+ if (skeleton_show_bones) {
+ int bone_width = EditorSettings::get_singleton()->get("2d_editor/bone_width");
+ Color bone_color1 = EditorSettings::get_singleton()->get("2d_editor/bone_color1");
+ Color bone_color2 = EditorSettings::get_singleton()->get("2d_editor/bone_color2");
+ Color bone_ik_color = EditorSettings::get_singleton()->get("2d_editor/bone_ik_color");
+ Color bone_selected_color = EditorSettings::get_singleton()->get("2d_editor/bone_selected_color");
- for(Map<ObjectID,BoneList>::Element*E=bone_list.front();E;E=E->next()) {
+ for(Map<ObjectID,BoneList>::Element*E=bone_list.front();E;E=E->next()) {
- E->get().from=Vector2();
- E->get().to=Vector2();
+ E->get().from=Vector2();
+ E->get().to=Vector2();
- Object *obj = ObjectDB::get_instance(E->get().bone);
- if (!obj)
- continue;
+ Object *obj = ObjectDB::get_instance(E->get().bone);
+ if (!obj)
+ continue;
- Node2D* n2d = obj->cast_to<Node2D>();
- if (!n2d)
- continue;
+ Node2D* n2d = obj->cast_to<Node2D>();
+ if (!n2d)
+ continue;
- if (!n2d->get_parent())
- continue;
+ if (!n2d->get_parent())
+ continue;
- CanvasItem *pi = n2d->get_parent_item();
+ CanvasItem *pi = n2d->get_parent_item();
- Node2D* pn2d=n2d->get_parent()->cast_to<Node2D>();
+ Node2D* pn2d=n2d->get_parent()->cast_to<Node2D>();
- if (!pn2d)
- continue;
+ if (!pn2d)
+ continue;
- Vector2 from = transform.xform(pn2d->get_global_pos());
- Vector2 to = transform.xform(n2d->get_global_pos());
+ Vector2 from = transform.xform(pn2d->get_global_pos());
+ Vector2 to = transform.xform(n2d->get_global_pos());
- E->get().from=from;
- E->get().to=to;
+ E->get().from=from;
+ E->get().to=to;
- Vector2 rel = to-from;
- Vector2 relt = rel.tangent().normalized()*bone_width;
+ Vector2 rel = to-from;
+ Vector2 relt = rel.tangent().normalized()*bone_width;
- Vector<Vector2> bone_shape;
- bone_shape.push_back(from);
- bone_shape.push_back(from+rel*0.2+relt);
- bone_shape.push_back(to);
- bone_shape.push_back(from+rel*0.2-relt);
- Vector<Color> colors;
- if (pi->has_meta("_edit_ik_")) {
+ Vector<Vector2> bone_shape;
+ bone_shape.push_back(from);
+ bone_shape.push_back(from+rel*0.2+relt);
+ bone_shape.push_back(to);
+ bone_shape.push_back(from+rel*0.2-relt);
+ Vector<Color> colors;
+ if (pi->has_meta("_edit_ik_")) {
- colors.push_back(bone_ik_color);
- colors.push_back(bone_ik_color);
- colors.push_back(bone_ik_color);
- colors.push_back(bone_ik_color);
- } else {
- colors.push_back(bone_color1);
- colors.push_back(bone_color2);
- colors.push_back(bone_color1);
- colors.push_back(bone_color2);
- }
+ colors.push_back(bone_ik_color);
+ colors.push_back(bone_ik_color);
+ colors.push_back(bone_ik_color);
+ colors.push_back(bone_ik_color);
+ } else {
+ colors.push_back(bone_color1);
+ colors.push_back(bone_color2);
+ colors.push_back(bone_color1);
+ colors.push_back(bone_color2);
+ }
- VisualServer::get_singleton()->canvas_item_add_primitive(ci,bone_shape,colors,Vector<Vector2>(),RID());
+ VisualServer::get_singleton()->canvas_item_add_primitive(ci,bone_shape,colors,Vector<Vector2>(),RID());
- if (editor_selection->is_selected(pi)) {
- for(int i=0;i<bone_shape.size();i++) {
+ if (editor_selection->is_selected(pi)) {
+ for(int i=0;i<bone_shape.size();i++) {
- VisualServer::get_singleton()->canvas_item_add_line(ci,bone_shape[i],bone_shape[(i+1)%bone_shape.size()],bone_selected_color,2);
+ VisualServer::get_singleton()->canvas_item_add_line(ci,bone_shape[i],bone_shape[(i+1)%bone_shape.size()],bone_selected_color,2);
+ }
}
- }
+ }
}
}
@@ -2536,6 +2545,12 @@ void CanvasItemEditor::_popup_callback(int p_op) {
((SnapDialog *)snap_dialog)->set_fields(snap_offset, snap_step, snap_rotation_offset, snap_rotation_step);
snap_dialog->popup_centered(Size2(220,160));
} break;
+ case SKELETON_SHOW_BONES: {
+ skeleton_show_bones = !skeleton_show_bones;
+ int idx = skeleton_menu->get_item_index(SKELETON_SHOW_BONES);
+ skeleton_menu->set_item_checked(idx,skeleton_show_bones);
+ viewport->update();
+ } break;
case ZOOM_IN: {
if (zoom>MAX_ZOOM)
return;
@@ -2979,57 +2994,7 @@ void CanvasItemEditor::_popup_callback(int p_op) {
case VIEW_CENTER_TO_SELECTION:
case VIEW_FRAME_TO_SELECTION: {
- Vector2 center(0.f, 0.f);
- Rect2 rect;
- int count = 0;
-
- Map<Node*,Object*> &selection = editor_selection->get_selection();
- for(Map<Node*,Object*>::Element *E=selection.front();E;E=E->next()) {
- CanvasItem *canvas_item = E->key()->cast_to<CanvasItem>();
- if (!canvas_item) continue;
- if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
- continue;
-
-
- // counting invisible items, for now
- //if (!canvas_item->is_visible()) continue;
- ++count;
-
- Rect2 item_rect = canvas_item->get_item_rect();
-
- Vector2 pos = canvas_item->get_global_transform().get_origin();
- Vector2 scale = canvas_item->get_global_transform().get_scale();
- real_t angle = canvas_item->get_global_transform().get_rotation();
-
- Matrix32 t(angle, Vector2(0.f,0.f));
- item_rect = t.xform(item_rect);
- Rect2 canvas_item_rect(pos + scale*item_rect.pos, scale*item_rect.size);
- if (count == 1) {
- rect = canvas_item_rect;
- } else {
- rect = rect.merge(canvas_item_rect);
- }
- };
- if (count==0) break;
-
- if (p_op == VIEW_CENTER_TO_SELECTION) {
-
- center = rect.pos + rect.size/2;
- Vector2 offset = viewport->get_size()/2 - editor->get_scene_root()->get_global_canvas_transform().xform(center);
- h_scroll->set_val(h_scroll->get_val() - offset.x/zoom);
- v_scroll->set_val(v_scroll->get_val() - offset.y/zoom);
-
- } else { // VIEW_FRAME_TO_SELECTION
-
- if (rect.size.x > CMP_EPSILON && rect.size.y > CMP_EPSILON) {
- float scale_x = viewport->get_size().x/rect.size.x;
- float scale_y = viewport->get_size().y/rect.size.y;
- zoom = scale_x < scale_y? scale_x:scale_y;
- zoom *= 0.90;
- _update_scroll(0);
- call_deferred("_popup_callback", VIEW_CENTER_TO_SELECTION);
- }
- }
+ _focus_selection(p_op);
} break;
case SKELETON_MAKE_BONES: {
@@ -3049,6 +3014,8 @@ void CanvasItemEditor::_popup_callback(int p_op) {
continue;
n2d->set_meta("_edit_bone_",true);
+ if (!skeleton_show_bones)
+ skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES));
}
viewport->update();
@@ -3067,6 +3034,8 @@ void CanvasItemEditor::_popup_callback(int p_op) {
continue;
n2d->set_meta("_edit_bone_",Variant());
+ if (!skeleton_show_bones)
+ skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES));
}
viewport->update();
@@ -3086,6 +3055,8 @@ void CanvasItemEditor::_popup_callback(int p_op) {
continue;
canvas_item->set_meta("_edit_ik_",true);
+ if (!skeleton_show_bones)
+ skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES));
}
@@ -3105,6 +3076,8 @@ void CanvasItemEditor::_popup_callback(int p_op) {
continue;
n2d->set_meta("_edit_ik_",Variant());
+ if (!skeleton_show_bones)
+ skeleton_menu->activate_item(skeleton_menu->get_item_index(SKELETON_SHOW_BONES));
}
viewport->update();
@@ -3142,6 +3115,62 @@ template< class P, class C > void CanvasItemEditor::space_selected_items() {
}
#endif
+
+void CanvasItemEditor::_focus_selection(int p_op) {
+ Vector2 center(0.f, 0.f);
+ Rect2 rect;
+ int count = 0;
+
+ Map<Node*,Object*> &selection = editor_selection->get_selection();
+ for(Map<Node*,Object*>::Element *E=selection.front();E;E=E->next()) {
+ CanvasItem *canvas_item = E->key()->cast_to<CanvasItem>();
+ if (!canvas_item) continue;
+ if (canvas_item->get_viewport()!=EditorNode::get_singleton()->get_scene_root())
+ continue;
+
+
+ // counting invisible items, for now
+ //if (!canvas_item->is_visible()) continue;
+ ++count;
+
+ Rect2 item_rect = canvas_item->get_item_rect();
+
+ Vector2 pos = canvas_item->get_global_transform().get_origin();
+ Vector2 scale = canvas_item->get_global_transform().get_scale();
+ real_t angle = canvas_item->get_global_transform().get_rotation();
+
+ Matrix32 t(angle, Vector2(0.f,0.f));
+ item_rect = t.xform(item_rect);
+ Rect2 canvas_item_rect(pos + scale*item_rect.pos, scale*item_rect.size);
+ if (count == 1) {
+ rect = canvas_item_rect;
+ } else {
+ rect = rect.merge(canvas_item_rect);
+ }
+ };
+ if (count==0) return;
+
+ if (p_op == VIEW_CENTER_TO_SELECTION) {
+
+ center = rect.pos + rect.size/2;
+ Vector2 offset = viewport->get_size()/2 - editor->get_scene_root()->get_global_canvas_transform().xform(center);
+ h_scroll->set_val(h_scroll->get_val() - offset.x/zoom);
+ v_scroll->set_val(v_scroll->get_val() - offset.y/zoom);
+
+ } else { // VIEW_FRAME_TO_SELECTION
+
+ if (rect.size.x > CMP_EPSILON && rect.size.y > CMP_EPSILON) {
+ float scale_x = viewport->get_size().x/rect.size.x;
+ float scale_y = viewport->get_size().y/rect.size.y;
+ zoom = scale_x < scale_y? scale_x:scale_y;
+ zoom *= 0.90;
+ _update_scroll(0);
+ call_deferred("_popup_callback", VIEW_CENTER_TO_SELECTION);
+ }
+ }
+}
+
+
void CanvasItemEditor::_bind_methods() {
ObjectTypeDB::bind_method("_node_removed",&CanvasItemEditor::_node_removed);
@@ -3247,6 +3276,12 @@ VSplitContainer *CanvasItemEditor::get_bottom_split() {
return bottom_split;
}
+
+void CanvasItemEditor::focus_selection() {
+ _focus_selection(VIEW_CENTER_TO_SELECTION);
+}
+
+
CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
tool = TOOL_SELECT;
@@ -3389,15 +3424,17 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
p->add_shortcut(ED_SHORTCUT("canvas_item_editor/expand_to_parent", TTR("Expand to Parent"), KEY_MASK_CMD | KEY_P), EXPAND_TO_PARENT);
p->add_separator();
p->add_submenu_item(TTR("Skeleton.."),"skeleton");
- PopupMenu *p2 = memnew(PopupMenu);
- p->add_child(p2);
- p2->set_name("skeleton");
- p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bones"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B ),SKELETON_MAKE_BONES);
- p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Bones")), SKELETON_CLEAR_BONES);
- p2->add_separator();
- p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_set_ik_chain", TTR("Make IK Chain")), SKELETON_SET_IK_CHAIN);
- p2->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_ik_chain", TTR("Clear IK Chain")), SKELETON_CLEAR_IK_CHAIN);
- p2->connect("item_pressed", this,"_popup_callback");
+ skeleton_menu = memnew(PopupMenu);
+ p->add_child(skeleton_menu);
+ skeleton_menu->set_name("skeleton");
+ skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_make_bones", TTR("Make Bones"), KEY_MASK_CMD | KEY_MASK_SHIFT | KEY_B ),SKELETON_MAKE_BONES);
+ skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_bones", TTR("Clear Bones")), SKELETON_CLEAR_BONES);
+ skeleton_menu->add_separator();
+ skeleton_menu->add_check_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_show_bones", TTR("Show Bones")), SKELETON_SHOW_BONES);
+ skeleton_menu->add_separator();
+ skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_set_ik_chain", TTR("Make IK Chain")), SKELETON_SET_IK_CHAIN);
+ skeleton_menu->add_shortcut(ED_SHORTCUT("canvas_item_editor/skeleton_clear_ik_chain", TTR("Clear IK Chain")), SKELETON_CLEAR_IK_CHAIN);
+ skeleton_menu->connect("item_pressed", this,"_popup_callback");
/*
@@ -3523,6 +3560,8 @@ CanvasItemEditor::CanvasItemEditor(EditorNode *p_editor) {
snap_show_grid=false;
snap_rotation=false;
snap_pixel=false;
+ skeleton_show_bones=true;
+ skeleton_menu->set_item_checked(skeleton_menu->get_item_index(SKELETON_SHOW_BONES),true);
updating_value_dialog=false;
box_selecting=false;
//zoom=0.5;
diff --git a/tools/editor/plugins/canvas_item_editor_plugin.h b/tools/editor/plugins/canvas_item_editor_plugin.h
index 22acfceed0..9f4bc46eb4 100644
--- a/tools/editor/plugins/canvas_item_editor_plugin.h
+++ b/tools/editor/plugins/canvas_item_editor_plugin.h
@@ -124,6 +124,7 @@ class CanvasItemEditor : public VBoxContainer {
VIEW_FRAME_TO_SELECTION,
SKELETON_MAKE_BONES,
SKELETON_CLEAR_BONES,
+ SKELETON_SHOW_BONES,
SKELETON_SET_IK_CHAIN,
SKELETON_CLEAR_IK_CHAIN
@@ -175,6 +176,7 @@ class CanvasItemEditor : public VBoxContainer {
bool snap_rotation;
bool snap_relative;
bool snap_pixel;
+ bool skeleton_show_bones;
bool box_selecting;
Point2 box_selecting_to;
bool key_pos;
@@ -256,6 +258,7 @@ class CanvasItemEditor : public VBoxContainer {
ToolButton *ungroup_button;
MenuButton *edit_menu;
+ PopupMenu *skeleton_menu;
MenuButton *view_menu;
HBoxContainer *animation_hb;
MenuButton *animation_menu;
@@ -352,6 +355,8 @@ class CanvasItemEditor : public VBoxContainer {
void _viewport_input_event(const InputEvent& p_event);
void _viewport_draw();
+ void _focus_selection(int p_op);
+
void _set_anchor(Control::AnchorType p_left,Control::AnchorType p_top,Control::AnchorType p_right,Control::AnchorType p_bottom);
HSplitContainer *palette_split;
@@ -414,10 +419,12 @@ public:
Control *get_viewport_control() { return viewport; }
-
bool get_remove_list(List<Node*> *p_list);
void set_undo_redo(UndoRedo *p_undo_redo) {undo_redo=p_undo_redo; }
void edit(CanvasItem *p_canvas_item);
+
+ void focus_selection();
+
CanvasItemEditor(EditorNode *p_editor);
};
diff --git a/tools/editor/plugins/color_ramp_editor_plugin.cpp b/tools/editor/plugins/color_ramp_editor_plugin.cpp
index cb7f6a1809..4e2045edc6 100644
--- a/tools/editor/plugins/color_ramp_editor_plugin.cpp
+++ b/tools/editor/plugins/color_ramp_editor_plugin.cpp
@@ -84,7 +84,7 @@ void ColorRampEditorPlugin::_ramp_changed() {
if (old_offsets.size()!=new_offsets.size())
ur->create_action(TTR("Add/Remove Color Ramp Point"));
else
- ur->create_action(TTR("Modify Color Ramp"),true);
+ ur->create_action(TTR("Modify Color Ramp"),UndoRedo::MERGE_ENDS);
ur->add_do_method(this,"undo_redo_color_ramp",new_offsets,new_colors);
ur->add_undo_method(this,"undo_redo_color_ramp",old_offsets,old_colors);
ur->commit_action();
diff --git a/tools/editor/plugins/material_editor_plugin.cpp b/tools/editor/plugins/material_editor_plugin.cpp
index f4258836e5..876fab0d6e 100644
--- a/tools/editor/plugins/material_editor_plugin.cpp
+++ b/tools/editor/plugins/material_editor_plugin.cpp
@@ -103,7 +103,7 @@ MaterialEditor::MaterialEditor() {
world.instance();
viewport->set_world(world); //use own world
add_child(viewport);
- viewport->set_process_input(false);
+ viewport->set_disable_input(true);
camera = memnew( Camera );
camera->set_transform(Transform(Matrix3(),Vector3(0,0,3)));
diff --git a/tools/editor/plugins/mesh_editor_plugin.cpp b/tools/editor/plugins/mesh_editor_plugin.cpp
index 71cf33ba1b..b70cbad25f 100644
--- a/tools/editor/plugins/mesh_editor_plugin.cpp
+++ b/tools/editor/plugins/mesh_editor_plugin.cpp
@@ -147,7 +147,7 @@ MeshEditor::MeshEditor() {
world.instance();
viewport->set_world(world); //use own world
add_child(viewport);
- viewport->set_process_input(false);
+ viewport->set_disable_input(true);
camera = memnew( Camera );
camera->set_transform(Transform(Matrix3(),Vector3(0,0,3)));
diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp
index 74c8ac9766..1f931fb492 100644
--- a/tools/editor/plugins/script_editor_plugin.cpp
+++ b/tools/editor/plugins/script_editor_plugin.cpp
@@ -987,6 +987,20 @@ void ScriptEditor::_notification(int p_what) {
}
+bool ScriptEditor::can_take_away_focus() const {
+
+ int selected = tab_container->get_current_tab();
+ if (selected<0 || selected>=tab_container->get_child_count())
+ return true;
+
+ ScriptEditorBase *current = tab_container->get_child(selected)->cast_to<ScriptEditorBase>();
+ if (!current)
+ return true;
+
+
+ return current->can_lose_focus_on_node_selection();
+
+}
void ScriptEditor::close_builtin_scripts_from_scene(const String& p_scene) {
@@ -1278,6 +1292,7 @@ struct _ScriptEditorItemData {
void ScriptEditor::_update_script_colors() {
bool enabled = EditorSettings::get_singleton()->get("text_editor/script_temperature_enabled");
+ bool highlight_current = EditorSettings::get_singleton()->get("text_editor/highlight_current_script");
if (!enabled)
return;
@@ -1305,8 +1320,12 @@ void ScriptEditor::_update_script_colors() {
int non_zero_hist_size = ( hist_size == 0 ) ? 1 : hist_size;
float v = Math::ease((edit_pass-pass)/float(non_zero_hist_size),0.4);
-
- script_list->set_item_custom_bg_color(i,hot_color.linear_interpolate(cold_color,v));
+ bool current = tab_container->get_current_tab() == c;
+ if (current && highlight_current) {
+ script_list->set_item_custom_bg_color(i, EditorSettings::get_singleton()->get("text_editor/current_script_background_color"));
+ } else {
+ script_list->set_item_custom_bg_color(i,hot_color.linear_interpolate(cold_color,v));
+ }
}
}
@@ -1397,7 +1416,7 @@ void ScriptEditor::_update_script_names() {
-void ScriptEditor::edit(const Ref<Script>& p_script) {
+void ScriptEditor::edit(const Ref<Script>& p_script, bool p_grab_focus) {
if (p_script.is_null())
return;
@@ -1471,7 +1490,9 @@ void ScriptEditor::edit(const Ref<Script>& p_script) {
}
- _go_to_tab(tab_container->get_tab_count()-1);
+ if (p_grab_focus) {
+ _go_to_tab(tab_container->get_tab_count()-1);
+ }
@@ -1932,6 +1953,13 @@ void ScriptEditor::_help_search(String p_text) {
help_search_dialog->popup(p_text);
}
+void ScriptEditor::_open_script_request(const String& p_path) {
+
+ Ref<Script> script = ResourceLoader::load(p_path);
+ if (script.is_valid()) {
+ script_editor->edit(script,false);
+ }
+}
int ScriptEditor::script_editor_func_count=0;
CreateScriptEditorFunc ScriptEditor::script_editor_funcs[ScriptEditor::SCRIPT_EDITOR_FUNC_MAX];
@@ -2208,6 +2236,8 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) {
edit_pass=0;
trim_trailing_whitespace_on_save = false;
+
+ ScriptServer::edit_request_func=_open_script_request;
}
@@ -2331,9 +2361,11 @@ ScriptEditorPlugin::ScriptEditorPlugin(EditorNode *p_node) {
EDITOR_DEF("external_editor/use_external_editor",false);
EDITOR_DEF("external_editor/exec_path","");
EDITOR_DEF("text_editor/script_temperature_enabled",true);
+ EDITOR_DEF("text_editor/highlight_current_script", true);
EDITOR_DEF("text_editor/script_temperature_history_size",15);
EDITOR_DEF("text_editor/script_temperature_hot_color",Color(1,0,0,0.3));
EDITOR_DEF("text_editor/script_temperature_cold_color",Color(0,0,1,0.3));
+ EDITOR_DEF("text_editor/current_script_background_color",Color(0.81,0.81,0.14,0.63));
EDITOR_DEF("text_editor/group_help_pages",true);
EditorSettings::get_singleton()->add_property_hint(PropertyInfo(Variant::STRING,"external_editor/exec_path",PROPERTY_HINT_GLOBAL_FILE));
EDITOR_DEF("external_editor/exec_flags","");
diff --git a/tools/editor/plugins/script_editor_plugin.h b/tools/editor/plugins/script_editor_plugin.h
index 5cb70e13d7..1a23ffed72 100644
--- a/tools/editor/plugins/script_editor_plugin.h
+++ b/tools/editor/plugins/script_editor_plugin.h
@@ -101,6 +101,7 @@ public:
virtual void add_callback(const String& p_function,StringArray p_args)=0;
virtual void update_settings()=0;
virtual void set_debugger_active(bool p_active)=0;
+ virtual bool can_lose_focus_on_node_selection() { return true; }
virtual void set_tooltip_request_func(String p_method,Object* p_obj)=0;
virtual Control *get_edit_menu()=0;
@@ -285,6 +286,8 @@ class ScriptEditor : public VBoxContainer {
int file_dialog_option;
void _file_dialog_action(String p_file);
+ static void _open_script_request(const String& p_path);
+
static ScriptEditor *script_editor;
protected:
void _notification(int p_what);
@@ -297,7 +300,7 @@ public:
void apply_scripts() const;
void ensure_select_current();
- void edit(const Ref<Script>& p_script);
+ void edit(const Ref<Script>& p_script,bool p_grab_focus=true);
Dictionary get_state() const;
void set_state(const Dictionary& p_state);
@@ -320,6 +323,10 @@ public:
void close_builtin_scripts_from_scene(const String& p_scene);
+ void goto_help(const String& p_desc) { _help_class_goto(p_desc); }
+
+ bool can_take_away_focus() const;
+
ScriptEditorDebugger *get_debugger() { return debugger; }
void set_live_auto_reload_running_scripts(bool p_enabled);
diff --git a/tools/editor/plugins/shader_graph_editor_plugin.cpp b/tools/editor/plugins/shader_graph_editor_plugin.cpp
index 375220051c..815da48e96 100644
--- a/tools/editor/plugins/shader_graph_editor_plugin.cpp
+++ b/tools/editor/plugins/shader_graph_editor_plugin.cpp
@@ -675,7 +675,7 @@ GraphCurveMapEdit::GraphCurveMapEdit(){
void ShaderGraphView::_scalar_const_changed(double p_value,int p_id) {
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change Scalar Constant"),true);
+ ur->create_action(TTR("Change Scalar Constant"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"scalar_const_node_set_value",type,p_id,p_value);
ur->add_undo_method(graph.ptr(),"scalar_const_node_set_value",type,p_id,graph->scalar_const_node_get_value(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -693,7 +693,7 @@ void ShaderGraphView::_vec_const_changed(double p_value, int p_id,Array p_arr){
}
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change Vec Constant"),true);
+ ur->create_action(TTR("Change Vec Constant"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"vec_const_node_set_value",type,p_id,val);
ur->add_undo_method(graph.ptr(),"vec_const_node_set_value",type,p_id,graph->vec_const_node_get_value(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -706,7 +706,7 @@ void ShaderGraphView::_vec_const_changed(double p_value, int p_id,Array p_arr){
void ShaderGraphView::_rgb_const_changed(const Color& p_color, int p_id){
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change RGB Constant"),true);
+ ur->create_action(TTR("Change RGB Constant"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"rgb_const_node_set_value",type,p_id,p_color);
ur->add_undo_method(graph.ptr(),"rgb_const_node_set_value",type,p_id,graph->rgb_const_node_get_value(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -807,7 +807,7 @@ void ShaderGraphView::_vec_func_changed(int p_func, int p_id){
void ShaderGraphView::_scalar_input_changed(double p_value,int p_id){
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change Scalar Uniform"),true);
+ ur->create_action(TTR("Change Scalar Uniform"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"scalar_input_node_set_value",type,p_id,p_value);
ur->add_undo_method(graph.ptr(),"scalar_input_node_set_value",type,p_id,graph->scalar_input_node_get_value(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -825,7 +825,7 @@ void ShaderGraphView::_vec_input_changed(double p_value, int p_id,Array p_arr){
}
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change Vec Uniform"),true);
+ ur->create_action(TTR("Change Vec Uniform"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"vec_input_node_set_value",type,p_id,val);
ur->add_undo_method(graph.ptr(),"vec_input_node_set_value",type,p_id,graph->vec_input_node_get_value(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -863,7 +863,7 @@ void ShaderGraphView::_rgb_input_changed(const Color& p_color, int p_id){
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
- ur->create_action(TTR("Change RGB Uniform"),true);
+ ur->create_action(TTR("Change RGB Uniform"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"rgb_input_node_set_value",type,p_id,p_color);
ur->add_undo_method(graph.ptr(),"rgb_input_node_set_value",type,p_id,graph->rgb_input_node_get_value(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -963,7 +963,7 @@ void ShaderGraphView::_comment_edited(int p_id,Node* p_button) {
UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo();
TextEdit *te=p_button->cast_to<TextEdit>();
- ur->create_action(TTR("Change Comment"),true);
+ ur->create_action(TTR("Change Comment"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"comment_node_set_text",type,p_id,te->get_text());
ur->add_undo_method(graph.ptr(),"comment_node_set_text",type,p_id,graph->comment_node_get_text(type,p_id));
ur->add_do_method(this,"_update_graph");
@@ -1005,7 +1005,7 @@ void ShaderGraphView::_color_ramp_changed(int p_id,Node* p_ramp) {
if (old_offsets.size()!=new_offsets.size())
ur->create_action(TTR("Add/Remove to Color Ramp"));
else
- ur->create_action(TTR("Modify Color Ramp"),true);
+ ur->create_action(TTR("Modify Color Ramp"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"color_ramp_node_set_ramp",type,p_id,new_colors,new_offsets);
ur->add_undo_method(graph.ptr(),"color_ramp_node_set_ramp",type,p_id,old_colors,old_offsets);
@@ -1041,7 +1041,7 @@ void ShaderGraphView::_curve_changed(int p_id,Node* p_curve) {
if (old_points.size()!=new_points.size())
ur->create_action(TTR("Add/Remove to Curve Map"));
else
- ur->create_action(TTR("Modify Curve Map"),true);
+ ur->create_action(TTR("Modify Curve Map"),UndoRedo::MERGE_ENDS);
ur->add_do_method(graph.ptr(),"curve_map_node_set_points",type,p_id,new_points);
ur->add_undo_method(graph.ptr(),"curve_map_node_set_points",type,p_id,old_points);
diff --git a/tools/editor/plugins/spatial_editor_plugin.cpp b/tools/editor/plugins/spatial_editor_plugin.cpp
index a70df78697..41956747e1 100644
--- a/tools/editor/plugins/spatial_editor_plugin.cpp
+++ b/tools/editor/plugins/spatial_editor_plugin.cpp
@@ -1980,33 +1980,8 @@ void SpatialEditorViewport::_menu_option(int p_option) {
} break;
case VIEW_CENTER_TO_SELECTION: {
- if (!get_selected_count())
- break;
-
- Vector3 center;
- int count=0;
-
- List<Node*> &selection = editor_selection->get_selected_node_list();
-
- for(List<Node*>::Element *E=selection.front();E;E=E->next()) {
-
- Spatial *sp = E->get()->cast_to<Spatial>();
- if (!sp)
- continue;
+ focus_selection();
- SpatialEditorSelectedItem *se=editor_selection->get_node_editor_data<SpatialEditorSelectedItem>(sp);
- if (!se)
- continue;
-
- center+=sp->get_global_transform().origin;
- count++;
- }
-
- if( count != 0 ) {
- center/=float(count);
- }
-
- cursor.pos=center;
} break;
case VIEW_ALIGN_SELECTION_WITH_VIEW: {
@@ -2323,6 +2298,38 @@ void SpatialEditorViewport::reset() {
_update_name();
}
+
+void SpatialEditorViewport::focus_selection() {
+ if (!get_selected_count())
+ return;
+
+ Vector3 center;
+ int count=0;
+
+ List<Node*> &selection = editor_selection->get_selected_node_list();
+
+ for(List<Node*>::Element *E=selection.front();E;E=E->next()) {
+
+ Spatial *sp = E->get()->cast_to<Spatial>();
+ if (!sp)
+ continue;
+
+ SpatialEditorSelectedItem *se=editor_selection->get_node_editor_data<SpatialEditorSelectedItem>(sp);
+ if (!se)
+ continue;
+
+ center+=sp->get_global_transform().origin;
+ count++;
+ }
+
+ if( count != 0 ) {
+ center/=float(count);
+ }
+
+ cursor.pos=center;
+}
+
+
SpatialEditorViewport::SpatialEditorViewport(SpatialEditor *p_spatial_editor, EditorNode *p_editor, int p_index) {
_edit.mode=TRANSFORM_NONE;
@@ -3144,6 +3151,8 @@ void SpatialEditor::_init_indicators() {
Vector<Color> origin_colors;
Vector<Vector3> origin_points;
+ Color grid_color = EditorSettings::get_singleton()->get("3d_editor/grid_color");
+
for(int i=0;i<3;i++) {
Vector3 axis;
axis[i]=1;
@@ -3161,10 +3170,10 @@ void SpatialEditor::_init_indicators() {
for(int j=-ORIGIN_GRID_SIZE;j<=ORIGIN_GRID_SIZE;j++) {
- grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2));
- grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2));
- grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2));
- grid_colors[i].push_back(Color(axis.x,axis.y,axis.z,0.2));
+ grid_colors[i].push_back(grid_color);
+ grid_colors[i].push_back(grid_color);
+ grid_colors[i].push_back(grid_color);
+ grid_colors[i].push_back(grid_color);
grid_points[i].push_back(axis_n1*ORIGIN_GRID_SIZE+axis_n2*j);
grid_points[i].push_back(-axis_n1*ORIGIN_GRID_SIZE+axis_n2*j);
grid_points[i].push_back(axis_n2*ORIGIN_GRID_SIZE+axis_n1*j);
diff --git a/tools/editor/plugins/spatial_editor_plugin.h b/tools/editor/plugins/spatial_editor_plugin.h
index 54086b0031..975092a01d 100644
--- a/tools/editor/plugins/spatial_editor_plugin.h
+++ b/tools/editor/plugins/spatial_editor_plugin.h
@@ -253,6 +253,9 @@ public:
void set_state(const Dictionary& p_state);
Dictionary get_state() const;
void reset();
+
+ void focus_selection();
+
Viewport *get_viewport_node() { return viewport; }
diff --git a/tools/editor/plugins/sprite_frames_editor_plugin.cpp b/tools/editor/plugins/sprite_frames_editor_plugin.cpp
index e29a0c8d52..41beaa96a1 100644
--- a/tools/editor/plugins/sprite_frames_editor_plugin.cpp
+++ b/tools/editor/plugins/sprite_frames_editor_plugin.cpp
@@ -524,7 +524,7 @@ void SpriteFramesEditor::_animation_fps_changed(double p_value) {
if (updating)
return;
- undo_redo->create_action(TTR("Change Animation FPS"),true);
+ undo_redo->create_action(TTR("Change Animation FPS"),UndoRedo::MERGE_ENDS);
undo_redo->add_do_method(frames,"set_animation_speed",edited_anim,p_value);
undo_redo->add_undo_method(frames,"set_animation_speed",edited_anim,frames->get_animation_speed(edited_anim));
undo_redo->add_do_method(this,"_update_library",true);
diff --git a/tools/editor/plugins/texture_region_editor_plugin.cpp b/tools/editor/plugins/texture_region_editor_plugin.cpp
index 3d220b8474..43086fb208 100644
--- a/tools/editor/plugins/texture_region_editor_plugin.cpp
+++ b/tools/editor/plugins/texture_region_editor_plugin.cpp
@@ -388,6 +388,10 @@ void TextureRegionEditor::_region_input(const InputEvent& p_input)
drag_index = -1;
}
}
+ } else if (mb.button_index == BUTTON_WHEEL_UP) {
+ _zoom_in();
+ } else if (mb.button_index == BUTTON_WHEEL_DOWN) {
+ _zoom_out();
}
} else if (p_input.type==InputEvent::MOUSE_MOTION) {
diff --git a/tools/editor/plugins/tile_map_editor_plugin.cpp b/tools/editor/plugins/tile_map_editor_plugin.cpp
index 316077c5d5..43fe7d7ea9 100644
--- a/tools/editor/plugins/tile_map_editor_plugin.cpp
+++ b/tools/editor/plugins/tile_map_editor_plugin.cpp
@@ -289,15 +289,16 @@ void TileMapEditor::_pick_tile(const Point2& p_pos) {
canvas_item_editor->update();
}
-DVector<Vector2> TileMapEditor::_bucket_fill(const Point2i& p_start) {
+DVector<Vector2> TileMapEditor::_bucket_fill(const Point2i& p_start, bool erase) {
- if (node->get_cell(p_start.x, p_start.y) != TileMap::INVALID_CELL)
- return DVector<Vector2>();
+ int prev_id = node->get_cell(p_start.x, p_start.y);
+ int id = TileMap::INVALID_CELL;
+ if (!erase) {
+ id = get_selected_tile();
- int id = get_selected_tile();
-
- if (id == TileMap::INVALID_CELL)
- return DVector<Vector2>();
+ if (id == TileMap::INVALID_CELL)
+ return DVector<Vector2>();
+ }
Rect2 r = node->get_item_rect();
r.pos = r.pos/node->get_cell_size();
@@ -316,7 +317,7 @@ DVector<Vector2> TileMapEditor::_bucket_fill(const Point2i& p_start) {
if (!r.has_point(n))
continue;
- if (node->get_cell(n.x, n.y) == TileMap::INVALID_CELL) {
+ if (node->get_cell(n.x, n.y) == prev_id) {
node->set_cellv(n, id, flip_h, flip_v, transpose);
@@ -685,6 +686,12 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) {
} else if (tool==TOOL_BUCKET) {
+ Dictionary pop;
+ pop["id"] = node->get_cell(over_tile.x, over_tile.y);
+ pop["flip_h"] = node->is_cell_x_flipped(over_tile.x, over_tile.y);
+ pop["flip_v"] = node->is_cell_y_flipped(over_tile.x, over_tile.y);
+ pop["transpose"] = node->is_cell_transposed(over_tile.x, over_tile.y);
+
DVector<Vector2> points = _bucket_fill(over_tile);
if (points.size() == 0)
@@ -699,7 +706,7 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) {
undo_redo->create_action("Bucket Fill");
undo_redo->add_do_method(this, "_fill_points", points, op);
- undo_redo->add_undo_method(this, "_erase_points", points);
+ undo_redo->add_undo_method(this, "_fill_points", points, pop);
undo_redo->commit_action();
}
@@ -782,6 +789,26 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) {
tool=TOOL_NONE;
return true;
+
+ } else if (tool==TOOL_BUCKET) {
+
+ Dictionary pop;
+ pop["id"] = node->get_cell(over_tile.x, over_tile.y);
+ pop["flip_h"] = node->is_cell_x_flipped(over_tile.x, over_tile.y);
+ pop["flip_v"] = node->is_cell_y_flipped(over_tile.x, over_tile.y);
+ pop["transpose"] = node->is_cell_transposed(over_tile.x, over_tile.y);
+
+ DVector<Vector2> points = _bucket_fill(over_tile, true);
+
+ if (points.size() == 0)
+ return false;
+
+ undo_redo->create_action("Bucket Fill");
+
+ undo_redo->add_do_method(this, "_erase_points", points);
+ undo_redo->add_undo_method(this, "_fill_points", points, pop);
+
+ undo_redo->commit_action();
}
}
}
@@ -798,6 +825,13 @@ bool TileMapEditor::forward_input_event(const InputEvent& p_event) {
canvas_item_editor->update();
}
+ int tile_under = node->get_cell(over_tile.x, over_tile.y);
+ String tile_name = "none";
+
+ if (node->get_tileset()->has_tile(tile_under))
+ tile_name = node->get_tileset()->tile_get_name(tile_under);
+ tile_info->set_text(String::num(over_tile.x)+", "+String::num(over_tile.y)+" ["+tile_name+"]");
+
if (tool==TOOL_PAINTING) {
int id = get_selected_tile();
@@ -1370,6 +1404,10 @@ TileMapEditor::TileMapEditor(EditorNode *p_editor) {
toolbar->set_alignment(BoxContainer::ALIGN_END);
CanvasItemEditor::get_singleton()->add_control_to_menu_panel(toolbar);
+ // Tile position
+ tile_info = memnew( Label );
+ toolbar->add_child(tile_info);
+
options = memnew( MenuButton );
options->set_text("Tile Map");
options->set_icon(EditorNode::get_singleton()->get_gui_base()->get_icon("TileMap", "EditorIcons"));
diff --git a/tools/editor/plugins/tile_map_editor_plugin.h b/tools/editor/plugins/tile_map_editor_plugin.h
index f586c5bf13..4b47dccd15 100644
--- a/tools/editor/plugins/tile_map_editor_plugin.h
+++ b/tools/editor/plugins/tile_map_editor_plugin.h
@@ -36,6 +36,7 @@
#include "scene/gui/line_edit.h"
#include "scene/gui/tool_button.h"
#include "scene/gui/menu_button.h"
+#include "scene/gui/label.h"
/**
@author Juan Linietsky <reduzio@gmail.com>
@@ -81,6 +82,7 @@ class TileMapEditor : public VBoxContainer {
HBoxContainer *toolbar;
+ Label *tile_info;
MenuButton *options;
ToolButton *transp;
ToolButton *mirror_x;
@@ -127,7 +129,7 @@ class TileMapEditor : public VBoxContainer {
void _pick_tile(const Point2& p_pos);
- DVector<Vector2> _bucket_fill(const Point2i& p_start);
+ DVector<Vector2> _bucket_fill(const Point2i& p_start, bool erase=false);
void _fill_points(const DVector<Vector2> p_points, const Dictionary& p_op);
void _erase_points(const DVector<Vector2> p_points);
diff --git a/tools/editor/project_manager.cpp b/tools/editor/project_manager.cpp
index dc1d6ec0f9..0c734436cd 100644
--- a/tools/editor/project_manager.cpp
+++ b/tools/editor/project_manager.cpp
@@ -1196,15 +1196,12 @@ ProjectManager::ProjectManager() {
FileDialog::set_default_show_hidden_files(EditorSettings::get_singleton()->get("file_dialog/show_hidden_files"));
set_area_as_parent_rect();
+ set_theme(create_default_theme());
gui_base = memnew( Control );
add_child(gui_base);
gui_base->set_area_as_parent_rect();
- set_theme(create_default_theme());
- Ref<Theme> theme = create_editor_theme();
- gui_base->set_theme(theme);
-
Panel *panel = memnew( Panel );
gui_base->add_child(panel);
panel->set_area_as_parent_rect();
@@ -1391,6 +1388,8 @@ ProjectManager::ProjectManager() {
last_clicked = "";
SceneTree::get_singleton()->connect("files_dropped", this, "_files_dropped");
+
+ gui_base->set_theme(create_editor_theme());
}
diff --git a/tools/editor/project_settings.cpp b/tools/editor/project_settings.cpp
index e8d22143ee..02d95abfa2 100644
--- a/tools/editor/project_settings.cpp
+++ b/tools/editor/project_settings.cpp
@@ -245,7 +245,7 @@ void ProjectSettings::_device_input_add() {
undo_redo->add_undo_method(this,"_settings_changed");
undo_redo->commit_action();
-
+ _show_last_added(ie);
}
@@ -283,7 +283,34 @@ void ProjectSettings::_press_a_key_confirm() {
undo_redo->add_undo_method(this,"_settings_changed");
undo_redo->commit_action();
+ _show_last_added(ie);
+}
+
+void ProjectSettings::_show_last_added(const InputEvent& p_event) {
+ TreeItem *r = input_editor->get_root();
+
+ if (!r)
+ return;
+ r=r->get_children();
+ if (!r)
+ return;
+ bool found = false;
+ while(r){
+ TreeItem *child = r->get_children();
+ while(child){
+ Variant input = child->get_meta("__input");
+ if (p_event==input){
+ child->select(0);
+ found = true;
+ break;
+ }
+ child=child->get_next();
+ }
+ if (found) break;
+ r=r->get_next();
+ }
+ if (found) input_editor->ensure_cursor_is_visible();
}
void ProjectSettings::_wait_for_key(const InputEvent& p_event) {
@@ -337,7 +364,7 @@ void ProjectSettings::_add_item(int p_item){
device_index->add_item(TTR("Button 7"));
device_index->add_item(TTR("Button 8"));
device_index->add_item(TTR("Button 9"));
- device_input->popup_centered(Size2(350,95));
+ device_input->popup_centered_minsize(Size2(350,95));
} break;
case InputEvent::JOYSTICK_MOTION: {
@@ -349,12 +376,12 @@ void ProjectSettings::_add_item(int p_item){
String desc = _axis_names[i];
device_index->add_item(TTR("Axis")+" "+itos(i/2)+" "+(i&1?"+":"-")+desc);
}
- device_input->popup_centered(Size2(350,95));
+ device_input->popup_centered_minsize(Size2(350,95));
} break;
case InputEvent::JOYSTICK_BUTTON: {
- device_id->set_val(0);
+ device_id->set_val(3);
device_index_label->set_text(TTR("Joystick Button Index:"));
device_index->clear();
@@ -362,7 +389,7 @@ void ProjectSettings::_add_item(int p_item){
device_index->add_item(itos(i)+": "+String(_button_names[i]));
}
- device_input->popup_centered(Size2(350,95));
+ device_input->popup_centered_minsize(Size2(350,95));
} break;
default:{}
@@ -543,6 +570,7 @@ void ProjectSettings::_update_actions() {
}
action->add_button(0,get_icon("Remove","EditorIcons"),2);
action->set_metadata(0,i);
+ action->set_meta("__input", ie);
}
}
}
@@ -1432,30 +1460,32 @@ ProjectSettings::ProjectSettings(EditorData *p_data) {
device_input->get_ok()->set_text(TTR("Add"));
device_input->connect("confirmed",this,"_device_input_add");
- l = memnew( Label );
- l->set_text(TTR("Device:"));
- l->set_pos(Point2(15,10));
- device_input->add_child(l);
+ hbc = memnew( HBoxContainer );
+ device_input->add_child(hbc);
+ device_input->set_child_rect(hbc);
+
+ VBoxContainer *vbc_left = memnew( VBoxContainer );
+ hbc->add_child(vbc_left);
l = memnew( Label );
- l->set_text(TTR("Index:"));
- l->set_pos(Point2(90,10));
- device_input->add_child(l);
- device_index_label=l;
+ l->set_text(TTR("Device:"));
+ vbc_left->add_child(l);
device_id = memnew( SpinBox );
- device_id->set_pos(Point2(20,30));
- device_id->set_size(Size2(70,10));
device_id->set_val(0);
+ vbc_left->add_child(device_id);
- device_input->add_child(device_id);
+ VBoxContainer *vbc_right = memnew( VBoxContainer );
+ hbc->add_child(vbc_right);
+ vbc_right->set_h_size_flags(SIZE_EXPAND_FILL);
- device_index = memnew( OptionButton );
- device_index->set_pos(Point2(95,30));
- device_index->set_size(Size2(300,10));
- device_index->set_anchor_and_margin(MARGIN_RIGHT,ANCHOR_END,10);
+ l = memnew( Label );
+ l->set_text(TTR("Index:"));
+ vbc_right->add_child(l);
+ device_index_label=l;
- device_input->add_child(device_index);
+ device_index = memnew( OptionButton );
+ vbc_right->add_child(device_index);
/*
save = memnew( Button );
diff --git a/tools/editor/project_settings.h b/tools/editor/project_settings.h
index 46e98f69ad..61ad094d00 100644
--- a/tools/editor/project_settings.h
+++ b/tools/editor/project_settings.h
@@ -111,7 +111,7 @@ class ProjectSettings : public AcceptDialog {
void _action_button_pressed(Object* p_obj, int p_column,int p_id);
void _wait_for_key(const InputEvent& p_event);
void _press_a_key_confirm();
-
+ void _show_last_added(const InputEvent& p_event);
void _settings_prop_edited(const String& p_name);
void _settings_changed();
diff --git a/tools/editor/property_editor.cpp b/tools/editor/property_editor.cpp
index 0518018e5a..de10e68f33 100644
--- a/tools/editor/property_editor.cpp
+++ b/tools/editor/property_editor.cpp
@@ -46,6 +46,7 @@
#include "scene/main/viewport.h"
#include "editor_file_system.h"
#include "create_dialog.h"
+#include "property_selector.h"
void CustomPropertyEditor::_notification(int p_what) {
@@ -83,6 +84,20 @@ void CustomPropertyEditor::_menu_option(int p_which) {
v=val;
emit_signal("variant_changed");
+ } else if (hint==PROPERTY_HINT_ENUM) {
+
+ v=p_which;
+ emit_signal("variant_changed");
+
+ }
+ } break;
+ case Variant::STRING: {
+
+ if (hint==PROPERTY_HINT_ENUM) {
+
+ v=hint_text.get_slice(",",p_which);
+ emit_signal("variant_changed");
+
}
} break;
case Variant::OBJECT: {
@@ -282,6 +297,16 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
switch(type) {
+ case Variant::BOOL: {
+
+ CheckBox *c=checks20[0];
+ c->set_text("True");
+ c->set_pos(Vector2(4,4));
+ c->set_pressed(v);
+ c->show();
+ set_size(checks20[0]->get_pos()+checks20[0]->get_size()+Vector2(4,4)*EDSCALE);
+
+ } break;
case Variant::INT:
case Variant::REAL: {
@@ -322,9 +347,24 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
set_size(Size2(70,35)*EDSCALE);
}
+ } else if (hint==PROPERTY_HINT_ENUM) {
+
+ menu->clear();
+ Vector<String> options = hint_text.split(",");
+ for(int i=0;i<options.size();i++) {
+ menu->add_item(options[i],i);
+ }
+ menu->set_pos(get_pos());
+ menu->popup();
+ hide();
+ updating=false;
+ return false;
+
} else if (hint==PROPERTY_HINT_ALL_FLAGS) {
+ checks20[0]->set_text("");
+
uint32_t flgs = v;
for(int i=0;i<2;i++) {
@@ -415,7 +455,16 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
config_action_buttons(names);
} else if (hint==PROPERTY_HINT_ENUM) {
-
+ menu->clear();
+ Vector<String> options = hint_text.split(",");
+ for(int i=0;i<options.size();i++) {
+ menu->add_item(options[i],i);
+ }
+ menu->set_pos(get_pos());
+ menu->popup();
+ hide();
+ updating=false;
+ return false;
} else if (hint==PROPERTY_HINT_MULTILINE_TEXT) {
@@ -438,6 +487,7 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
} else if (hint==PROPERTY_HINT_TYPE_STRING) {
+
if (!create_dialog) {
create_dialog = memnew( CreateDialog );
create_dialog->connect("create",this,"_create_dialog_callback");
@@ -452,6 +502,112 @@ bool CustomPropertyEditor::edit(Object* p_owner,const String& p_name,Variant::Ty
create_dialog->popup(false);
hide();
+ updating=false;
+ return false;
+
+
+ } else if (hint==PROPERTY_HINT_METHOD_OF_VARIANT_TYPE) {
+#define MAKE_PROPSELECT if (!property_select) { property_select = memnew(PropertySelector); property_select->connect("selected",this,"_create_selected_property"); add_child(property_select); } hide();
+
+ MAKE_PROPSELECT;
+
+ Variant::Type type=Variant::NIL;
+ for(int i=0;i<Variant::VARIANT_MAX;i++) {
+ if (hint_text==Variant::get_type_name(Variant::Type(i))) {
+ type=Variant::Type(i);
+ }
+ }
+ if (type)
+ property_select->select_method_from_basic_type(type,v);
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_METHOD_OF_BASE_TYPE) {
+ MAKE_PROPSELECT
+
+ property_select->select_method_from_base_type(hint_text,v);
+
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_METHOD_OF_INSTANCE) {
+
+ MAKE_PROPSELECT
+
+ Object *instance = ObjectDB::get_instance(hint_text.to_int64());
+ if (instance)
+ property_select->select_method_from_instance(instance,v);
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_METHOD_OF_SCRIPT) {
+ MAKE_PROPSELECT
+
+ Object *obj = ObjectDB::get_instance(hint_text.to_int64());
+ if (obj && obj->cast_to<Script>()) {
+ property_select->select_method_from_script(obj->cast_to<Script>(),v);
+ }
+
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE) {
+
+ MAKE_PROPSELECT
+ Variant::Type type=Variant::NIL;
+ String tname=hint_text;
+ if (tname.find(".")!=-1)
+ tname=tname.get_slice(".",0);
+ for(int i=0;i<Variant::VARIANT_MAX;i++) {
+ if (tname==Variant::get_type_name(Variant::Type(i))) {
+ type=Variant::Type(Variant::Type(i));
+ }
+ }
+ InputEvent::Type iet = InputEvent::NONE;
+ if (hint_text.find(".")!=-1) {
+ iet=InputEvent::Type(int(hint_text.get_slice(".",1).to_int()));
+ }
+ if (type)
+ property_select->select_property_from_basic_type(type,iet,v);
+
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_PROPERTY_OF_BASE_TYPE) {
+
+ MAKE_PROPSELECT
+
+ property_select->select_property_from_base_type(hint_text,v);
+
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_PROPERTY_OF_INSTANCE) {
+
+ Object *instance = ObjectDB::get_instance(hint_text.to_int64());
+ if (instance)
+ property_select->select_property_from_instance(instance,v);
+
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_PROPERTY_OF_SCRIPT) {
+ MAKE_PROPSELECT
+
+ Object *obj = ObjectDB::get_instance(hint_text.to_int64());
+ if (obj && obj->cast_to<Script>()) {
+ property_select->select_property_from_script(obj->cast_to<Script>(),v);
+ }
+
+ updating=false;
+ return false;
+
+ } else if (hint==PROPERTY_HINT_TYPE_STRING) {
+ if (!create_dialog) {
+ create_dialog = memnew( CreateDialog );
+ create_dialog->connect("create",this,"_create_dialog_callback");
+ add_child(create_dialog);
+ }
} else {
List<String> names;
@@ -1009,6 +1165,10 @@ void CustomPropertyEditor::_action_pressed(int p_which) {
return;
switch(type) {
+ case Variant::BOOL: {
+ v=checks20[0]->is_pressed();
+ emit_signal("variant_changed");
+ } break;
case Variant::INT: {
if (hint==PROPERTY_HINT_ALL_FLAGS) {
@@ -1043,6 +1203,7 @@ void CustomPropertyEditor::_action_pressed(int p_which) {
file->clear_filters();
+
if (hint_text!="") {
Vector<String> extensions=hint_text.split(",");
for(int i=0;i<extensions.size();i++) {
@@ -1360,6 +1521,13 @@ void CustomPropertyEditor::_create_dialog_callback() {
emit_signal("variant_changed");
}
+void CustomPropertyEditor::_create_selected_property(const String& p_prop) {
+
+
+ v=p_prop;
+ emit_signal("variant_changed");
+}
+
void CustomPropertyEditor::_modified(String p_string) {
if (updating)
@@ -1753,6 +1921,7 @@ void CustomPropertyEditor::_bind_methods() {
ObjectTypeDB::bind_method( "_text_edit_changed",&CustomPropertyEditor::_text_edit_changed);
ObjectTypeDB::bind_method( "_menu_option",&CustomPropertyEditor::_menu_option);
ObjectTypeDB::bind_method( "_create_dialog_callback",&CustomPropertyEditor::_create_dialog_callback);
+ ObjectTypeDB::bind_method( "_create_selected_property",&CustomPropertyEditor::_create_selected_property);
@@ -1877,6 +2046,7 @@ CustomPropertyEditor::CustomPropertyEditor() {
slider->connect("value_changed",this,"_range_modified");
create_dialog = NULL;
+ property_select = NULL;
}
bool PropertyEditor::_might_be_in_instance() {
@@ -2150,6 +2320,19 @@ void PropertyEditor::set_item_text(TreeItem *p_item, int p_type, const String& p
p_item->set_text(1,obj->get(p_name));
}
+ if ( p_hint==PROPERTY_HINT_METHOD_OF_VARIANT_TYPE ||
+ p_hint==PROPERTY_HINT_METHOD_OF_BASE_TYPE ||
+ p_hint==PROPERTY_HINT_METHOD_OF_INSTANCE ||
+ p_hint==PROPERTY_HINT_METHOD_OF_SCRIPT ||
+ p_hint==PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE ||
+ p_hint==PROPERTY_HINT_PROPERTY_OF_BASE_TYPE ||
+ p_hint==PROPERTY_HINT_PROPERTY_OF_INSTANCE ||
+ p_hint==PROPERTY_HINT_PROPERTY_OF_SCRIPT ) {
+
+ p_item->set_text(1,obj->get(p_name));
+ }
+
+
if (p_hint==PROPERTY_HINT_ENUM) {
Vector<String> strings = p_hint_text.split(",");
@@ -3172,6 +3355,14 @@ void PropertyEditor::update_tree() {
} break;
+ case PROPERTY_HINT_METHOD_OF_VARIANT_TYPE: ///< a property of a type
+ case PROPERTY_HINT_METHOD_OF_BASE_TYPE: ///< a method of a base type
+ case PROPERTY_HINT_METHOD_OF_INSTANCE: ///< a method of an instance
+ case PROPERTY_HINT_METHOD_OF_SCRIPT: ///< a method of a script & base
+ case PROPERTY_HINT_PROPERTY_OF_VARIANT_TYPE: ///< a property of a type
+ case PROPERTY_HINT_PROPERTY_OF_BASE_TYPE: ///< a property of a base type
+ case PROPERTY_HINT_PROPERTY_OF_INSTANCE: ///< a property of an instance
+ case PROPERTY_HINT_PROPERTY_OF_SCRIPT: ///< a property of a script & base
case PROPERTY_HINT_TYPE_STRING: {
item->set_cell_mode( 1, TreeItem::CELL_MODE_CUSTOM);
@@ -3181,6 +3372,7 @@ void PropertyEditor::update_tree() {
item->set_text(1,obj->get(p.name));
} break;
+
default: {
item->set_cell_mode( 1, TreeItem::CELL_MODE_STRING );
@@ -3564,7 +3756,7 @@ void PropertyEditor::_edit_set(const String& p_name, const Variant& p_value) {
} else {
- undo_redo->create_action(TTR("Set")+" "+p_name,true);
+ undo_redo->create_action(TTR("Set")+" "+p_name,UndoRedo::MERGE_ENDS);
undo_redo->add_do_property(obj,p_name,p_value);
undo_redo->add_undo_property(obj,p_name,obj->get(p_name));
undo_redo->add_do_method(this,"_changed_callback",obj,p_name);
@@ -4365,7 +4557,7 @@ void SectionedPropertyEditor::update_category_list() {
else if ( !(pi.usage&PROPERTY_USAGE_EDITOR) )
continue;
- if (pi.name.find(":")!=-1 || pi.name=="script/script")
+ if (pi.name.find(":")!=-1 || pi.name=="script/script" || pi.name.begins_with("resource/"))
continue;
int sp = pi.name.find("/");
if (sp!=-1) {
diff --git a/tools/editor/property_editor.h b/tools/editor/property_editor.h
index d911aae883..6c6c309d32 100644
--- a/tools/editor/property_editor.h
+++ b/tools/editor/property_editor.h
@@ -49,6 +49,8 @@
class PropertyValueEvaluator;
class CreateDialog;
+class PropertySelector;
+
class CustomPropertyEditor : public Popup {
OBJ_TYPE( CustomPropertyEditor, Popup );
@@ -103,6 +105,7 @@ class CustomPropertyEditor : public Popup {
Control *easing_draw;
CreateDialog *create_dialog;
+ PropertySelector *property_select;
Object* owner;
@@ -120,6 +123,7 @@ class CustomPropertyEditor : public Popup {
void _action_pressed(int p_which);
void _type_create_selected(int p_idx);
void _create_dialog_callback();
+ void _create_selected_property(const String &p_prop);
void _color_changed(const Color& p_color);
diff --git a/tools/editor/property_selector.cpp b/tools/editor/property_selector.cpp
new file mode 100644
index 0000000000..20b72240d9
--- /dev/null
+++ b/tools/editor/property_selector.cpp
@@ -0,0 +1,598 @@
+#include "property_selector.h"
+#include "editor_scale.h"
+
+#include "os/keyboard.h"
+
+void PropertySelector::_text_changed(const String& p_newtext) {
+
+ _update_search();
+}
+
+void PropertySelector::_sbox_input(const InputEvent& p_ie) {
+
+ if (p_ie.type==InputEvent::KEY) {
+
+ switch(p_ie.key.scancode) {
+ case KEY_UP:
+ case KEY_DOWN:
+ case KEY_PAGEUP:
+ case KEY_PAGEDOWN: {
+
+ search_options->call("_input_event", p_ie);
+ search_box->accept_event();
+
+ TreeItem *root = search_options->get_root();
+ if (!root->get_children())
+ break;
+
+ TreeItem *current = search_options->get_selected();
+
+ TreeItem *item = search_options->get_next_selected(root);
+ while (item) {
+ item->deselect(0);
+ item = search_options->get_next_selected(item);
+ }
+
+ current->select(0);
+
+ } break;
+ }
+ }
+}
+
+
+void PropertySelector::_update_search() {
+
+
+ if (properties)
+ set_title(TTR("Select Property"));
+ else
+ set_title(TTR("Select Method"));
+
+ search_options->clear();
+ help_bit->set_text("");
+
+
+ TreeItem *root = search_options->create_item();
+
+
+ if (properties) {
+
+ List<PropertyInfo> props;
+
+ if (instance) {
+ instance->get_property_list(&props,true);
+ } else if (type!=Variant::NIL) {
+ Variant v;
+ if (type==Variant::INPUT_EVENT) {
+ InputEvent ie;
+ ie.type=event_type;
+ v=ie;
+ } else {
+ Variant::CallError ce;
+ v=Variant::construct(type,NULL,0,ce);
+ }
+
+ v.get_property_list(&props);
+ } else {
+
+
+ Object *obj = ObjectDB::get_instance(script);
+ if (obj && obj->cast_to<Script>()) {
+
+ props.push_back(PropertyInfo(Variant::NIL,"Script Variables",PROPERTY_HINT_NONE,"",PROPERTY_USAGE_CATEGORY));
+ obj->cast_to<Script>()->get_script_property_list(&props);
+ }
+
+ StringName base=base_type;
+ while(base) {
+ props.push_back(PropertyInfo(Variant::NIL,base,PROPERTY_HINT_NONE,"",PROPERTY_USAGE_CATEGORY));
+ ObjectTypeDB::get_property_list(base,&props,true);
+ base=ObjectTypeDB::type_inherits_from(base);
+ }
+
+ }
+
+ TreeItem *category=NULL;
+
+ bool found=false;
+
+ Ref<Texture> type_icons[Variant::VARIANT_MAX]={
+ Control::get_icon("MiniVariant","EditorIcons"),
+ Control::get_icon("MiniBoolean","EditorIcons"),
+ Control::get_icon("MiniInteger","EditorIcons"),
+ Control::get_icon("MiniFloat","EditorIcons"),
+ Control::get_icon("MiniString","EditorIcons"),
+ Control::get_icon("MiniVector2","EditorIcons"),
+ Control::get_icon("MiniRect2","EditorIcons"),
+ Control::get_icon("MiniVector3","EditorIcons"),
+ Control::get_icon("MiniMatrix2","EditorIcons"),
+ Control::get_icon("MiniPlane","EditorIcons"),
+ Control::get_icon("MiniQuat","EditorIcons"),
+ Control::get_icon("MiniAabb","EditorIcons"),
+ Control::get_icon("MiniMatrix3","EditorIcons"),
+ Control::get_icon("MiniTransform","EditorIcons"),
+ Control::get_icon("MiniColor","EditorIcons"),
+ Control::get_icon("MiniImage","EditorIcons"),
+ Control::get_icon("MiniPath","EditorIcons"),
+ Control::get_icon("MiniRid","EditorIcons"),
+ Control::get_icon("MiniObject","EditorIcons"),
+ Control::get_icon("MiniInput","EditorIcons"),
+ Control::get_icon("MiniDictionary","EditorIcons"),
+ Control::get_icon("MiniArray","EditorIcons"),
+ Control::get_icon("MiniRawArray","EditorIcons"),
+ Control::get_icon("MiniIntArray","EditorIcons"),
+ Control::get_icon("MiniFloatArray","EditorIcons"),
+ Control::get_icon("MiniStringArray","EditorIcons"),
+ Control::get_icon("MiniVector2Array","EditorIcons"),
+ Control::get_icon("MiniVector3Array","EditorIcons"),
+ Control::get_icon("MiniColorArray","EditorIcons")
+ };
+
+
+ for (List<PropertyInfo>::Element *E=props.front();E;E=E->next()) {
+ if (E->get().usage==PROPERTY_USAGE_CATEGORY) {
+ if (category && category->get_children()==NULL) {
+ memdelete(category); //old category was unused
+ }
+ category = search_options->create_item(root);
+ category->set_text(0,E->get().name);
+ category->set_selectable(0,false);
+
+ Ref<Texture> icon;
+ if (E->get().name=="Script Variables") {
+ icon=get_icon("Script","EditorIcons");
+ } else if (has_icon(E->get().name,"EditorIcons")) {
+ icon=get_icon(E->get().name,"EditorIcons");
+ } else {
+ icon=get_icon("Object","EditorIcons");
+ }
+ category->set_icon(0,icon);
+ continue;
+ }
+
+ if (!(E->get().usage&PROPERTY_USAGE_EDITOR))
+ continue;
+
+ if (search_box->get_text()!=String() && E->get().name.find(search_box->get_text())==-1)
+ continue;
+ TreeItem *item = search_options->create_item(category?category:root);
+ item->set_text(0,E->get().name);
+ item->set_metadata(0,E->get().name);
+ item->set_icon(0,type_icons[E->get().type]);
+
+ if (!found && search_box->get_text()!=String() && E->get().name.find(search_box->get_text())!=-1) {
+ item->select(0);
+ found=true;
+ }
+
+ item->set_selectable(0,true);
+ }
+
+ if (category && category->get_children()==NULL) {
+ memdelete(category); //old category was unused
+ }
+ } else {
+
+ List<MethodInfo> methods;
+
+ if (type!=Variant::NIL) {
+ Variant v;
+ Variant::CallError ce;
+ v=Variant::construct(type,NULL,0,ce);
+ v.get_method_list(&methods);
+ } else {
+
+
+ Object *obj = ObjectDB::get_instance(script);
+ if (obj && obj->cast_to<Script>()) {
+
+ methods.push_back(MethodInfo("*Script Methods"));
+ obj->cast_to<Script>()->get_script_method_list(&methods);
+ }
+
+ StringName base=base_type;
+ while(base) {
+ methods.push_back(MethodInfo("*"+String(base)));
+ ObjectTypeDB::get_method_list(base,&methods,true);
+ base=ObjectTypeDB::type_inherits_from(base);
+ }
+
+ }
+
+ TreeItem *category=NULL;
+
+ bool found=false;
+ bool script_methods=false;
+
+ for (List<MethodInfo>::Element *E=methods.front();E;E=E->next()) {
+ if (E->get().name.begins_with("*")) {
+ if (category && category->get_children()==NULL) {
+ memdelete(category); //old category was unused
+ }
+ category = search_options->create_item(root);
+ category->set_text(0,E->get().name.replace_first("*",""));
+ category->set_selectable(0,false);
+
+ Ref<Texture> icon;
+ script_methods=false;
+ if (E->get().name=="*Script Methods") {
+ icon=get_icon("Script","EditorIcons");
+ script_methods=true;
+ } else if (has_icon(E->get().name,"EditorIcons")) {
+ icon=get_icon(E->get().name,"EditorIcons");
+ } else {
+ icon=get_icon("Object","EditorIcons");
+ }
+ category->set_icon(0,icon);
+
+ continue;
+ }
+
+ String name = E->get().name.get_slice(":",0);
+ if (!script_methods && name.begins_with("_") && !(E->get().flags&METHOD_FLAG_VIRTUAL))
+ continue;
+
+ if (search_box->get_text()!=String() && name.find(search_box->get_text())==-1)
+ continue;
+
+ TreeItem *item = search_options->create_item(category?category:root);
+
+ MethodInfo mi=E->get();
+
+ String desc;
+ if (mi.name.find(":")!=-1) {
+ desc=mi.name.get_slice(":",1)+" ";
+ mi.name=mi.name.get_slice(":",0);
+ } else if (mi.return_val.type!=Variant::NIL)
+ desc=Variant::get_type_name(mi.return_val.type);
+ else
+ desc="void ";
+
+
+
+ desc+=" "+mi.name+" ( ";
+
+ for(int i=0;i<mi.arguments.size();i++) {
+
+ if (i>0)
+ desc+=", ";
+
+ if (mi.arguments[i].type==Variant::NIL)
+ desc+="var ";
+ else if (mi.arguments[i].name.find(":")!=-1) {
+ desc+=mi.arguments[i].name.get_slice(":",1)+" ";
+ mi.arguments[i].name=mi.arguments[i].name.get_slice(":",0);
+ } else
+ desc+=Variant::get_type_name(mi.arguments[i].type)+" ";
+
+ desc+=mi.arguments[i].name;
+
+ }
+
+ desc+=" )";
+
+ item->set_text(0,desc);
+ item->set_metadata(0,name);
+ item->set_selectable(0,true);
+
+ if (!found && search_box->get_text()!=String() && name.find(search_box->get_text())!=-1) {
+ item->select(0);
+ found=true;
+ }
+
+ }
+
+ if (category && category->get_children()==NULL) {
+ memdelete(category); //old category was unused
+ }
+
+ }
+
+ get_ok()->set_disabled(root->get_children()==NULL);
+
+}
+
+
+
+void PropertySelector::_confirmed() {
+
+ TreeItem *ti = search_options->get_selected();
+ if (!ti)
+ return;
+ emit_signal("selected",ti->get_metadata(0));
+ hide();
+}
+
+void PropertySelector::_item_selected() {
+
+ help_bit->set_text("");
+
+ TreeItem *item=search_options->get_selected();
+ if (!item)
+ return;
+ String name = item->get_metadata(0);
+
+ String class_type;
+ if (properties && type==Variant::INPUT_EVENT) {
+
+ switch(event_type) {
+ case InputEvent::NONE: class_type="InputEvent"; break;
+ case InputEvent::KEY: class_type="InputEventKey"; break;
+ case InputEvent::MOUSE_MOTION: class_type="InputEventMouseMotion"; break;
+ case InputEvent::MOUSE_BUTTON: class_type="InputEventMouseButton"; break;
+ case InputEvent::JOYSTICK_MOTION: class_type="InputEventJoystickMotion"; break;
+ case InputEvent::JOYSTICK_BUTTON: class_type="InputEventJoystickButton"; break;
+ case InputEvent::SCREEN_TOUCH: class_type="InputEventScreenTouch"; break;
+ case InputEvent::SCREEN_DRAG: class_type="InputEventScreenDrag"; break;
+ case InputEvent::ACTION: class_type="InputEventAction"; break;
+ default: {}
+ }
+
+ } else if (type) {
+ class_type=Variant::get_type_name(type);
+
+ } else {
+ class_type=base_type;
+ }
+
+ DocData *dd=EditorHelp::get_doc_data();
+ String text;
+
+
+ if (properties) {
+
+ String at_class=class_type;
+
+
+
+ while(at_class!=String()) {
+
+
+ Map<String,DocData::ClassDoc>::Element *E=dd->class_list.find(at_class);
+ if (E) {
+ for(int i=0;i<E->get().properties.size();i++) {
+ if (E->get().properties[i].name==name) {
+ text=E->get().properties[i].description;
+ }
+ }
+ }
+
+ at_class=ObjectTypeDB::type_inherits_from(at_class);
+ }
+
+ if (text==String()) {
+
+ StringName setter;
+ StringName type;
+ if (ObjectTypeDB::get_setter_and_type_for_property(class_type,name,type,setter)) {
+ Map<String,DocData::ClassDoc>::Element *E=dd->class_list.find(type);
+ if (E) {
+ for(int i=0;i<E->get().methods.size();i++) {
+ if (E->get().methods[i].name==setter.operator String()) {
+ text=E->get().methods[i].description;
+ }
+ }
+ }
+
+
+ }
+ }
+
+ } else {
+
+
+ String at_class=class_type;
+
+ while(at_class!=String()) {
+
+ Map<String,DocData::ClassDoc>::Element *E=dd->class_list.find(at_class);
+ if (E) {
+ for(int i=0;i<E->get().methods.size();i++) {
+ if (E->get().methods[i].name==name) {
+ text=E->get().methods[i].description;
+ }
+ }
+ }
+
+ at_class=ObjectTypeDB::type_inherits_from(at_class);
+ }
+ }
+
+
+ if (text==String())
+ return;
+
+ help_bit->set_text(text);
+
+}
+
+
+void PropertySelector::_notification(int p_what) {
+
+ if (p_what==NOTIFICATION_ENTER_TREE) {
+
+ connect("confirmed",this,"_confirmed");
+
+ }
+}
+
+
+
+void PropertySelector::select_method_from_base_type(const String& p_base,const String& p_current) {
+
+ base_type=p_base;
+ selected=p_current;
+ type=Variant::NIL;
+ script=0;
+ properties=false;
+ instance=NULL;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+}
+
+void PropertySelector::select_method_from_script(const Ref<Script>& p_script,const String& p_current){
+
+ ERR_FAIL_COND( p_script.is_null() );
+ base_type=p_script->get_instance_base_type();
+ selected=p_current;
+ type=Variant::NIL;
+ script=p_script->get_instance_ID();
+ properties=false;
+ instance=NULL;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+
+}
+void PropertySelector::select_method_from_basic_type(Variant::Type p_type, const String &p_current){
+
+ ERR_FAIL_COND(p_type==Variant::NIL);
+ base_type="";
+ selected=p_current;
+ type=p_type;
+ script=0;
+ properties=false;
+ instance=NULL;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+
+}
+
+void PropertySelector::select_method_from_instance(Object* p_instance, const String &p_current){
+
+
+ base_type=p_instance->get_type();
+ selected=p_current;
+ type=Variant::NIL;
+ script=0;
+ {
+ Ref<Script> scr = p_instance->get_script();
+ if (scr.is_valid())
+ script=scr->get_instance_ID();
+ }
+ properties=false;
+ instance=NULL;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+
+}
+
+
+void PropertySelector::select_property_from_base_type(const String& p_base,const String& p_current) {
+
+ base_type=p_base;
+ selected=p_current;
+ type=Variant::NIL;
+ script=0;
+ properties=true;
+ instance=NULL;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+}
+
+void PropertySelector::select_property_from_script(const Ref<Script>& p_script,const String& p_current){
+
+ ERR_FAIL_COND( p_script.is_null() );
+
+ base_type=p_script->get_instance_base_type();
+ selected=p_current;
+ type=Variant::NIL;
+ script=p_script->get_instance_ID();
+ properties=true;
+ instance=NULL;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+
+}
+void PropertySelector::select_property_from_basic_type(Variant::Type p_type, InputEvent::Type p_event_type, const String &p_current){
+
+ ERR_FAIL_COND(p_type==Variant::NIL);
+ base_type="";
+ selected=p_current;
+ type=p_type;
+ event_type=p_event_type;
+ script=0;
+ properties=true;
+ instance=NULL;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+
+}
+
+void PropertySelector::select_property_from_instance(Object* p_instance, const String &p_current){
+
+
+ base_type="";
+ selected=p_current;
+ type=Variant::NIL;
+ script=0;
+ properties=true;
+ instance=p_instance;
+
+ popup_centered_ratio(0.6);
+ search_box->set_text("");
+ search_box->grab_focus();
+ _update_search();
+
+}
+
+void PropertySelector::_bind_methods() {
+
+ ObjectTypeDB::bind_method(_MD("_text_changed"),&PropertySelector::_text_changed);
+ ObjectTypeDB::bind_method(_MD("_confirmed"),&PropertySelector::_confirmed);
+ ObjectTypeDB::bind_method(_MD("_sbox_input"),&PropertySelector::_sbox_input);
+ ObjectTypeDB::bind_method(_MD("_item_selected"),&PropertySelector::_item_selected);
+
+ ADD_SIGNAL(MethodInfo("selected",PropertyInfo(Variant::STRING,"name")));
+
+}
+
+
+PropertySelector::PropertySelector() {
+
+
+ VBoxContainer *vbc = memnew( VBoxContainer );
+ add_child(vbc);
+ set_child_rect(vbc);
+ search_box = memnew( LineEdit );
+ vbc->add_margin_child(TTR("Search:"),search_box);
+ search_box->connect("text_changed",this,"_text_changed");
+ search_box->connect("input_event",this,"_sbox_input");
+ search_options = memnew( Tree );
+ vbc->add_margin_child(TTR("Matches:"),search_options,true);
+ get_ok()->set_text(TTR("Open"));
+ get_ok()->set_disabled(true);
+ register_text_enter(search_box);
+ set_hide_on_ok(false);
+ search_options->connect("item_activated",this,"_confirmed");
+ search_options->connect("cell_selected",this,"_item_selected");
+ search_options->set_hide_root(true);
+ search_options->set_hide_folding(true);
+
+ help_bit = memnew( EditorHelpBit );
+ vbc->add_margin_child(TTR("Description:"),help_bit);
+ help_bit->connect("request_hide",this,"_closed");
+
+
+}
diff --git a/tools/editor/property_selector.h b/tools/editor/property_selector.h
new file mode 100644
index 0000000000..f7f0e7e167
--- /dev/null
+++ b/tools/editor/property_selector.h
@@ -0,0 +1,55 @@
+#ifndef PROPERTYSELECTOR_H
+#define PROPERTYSELECTOR_H
+
+#include "tools/editor/property_editor.h"
+#include "scene/gui/rich_text_label.h"
+#include "editor_help.h"
+
+class PropertySelector : public ConfirmationDialog {
+ OBJ_TYPE(PropertySelector,ConfirmationDialog )
+
+
+ LineEdit *search_box;
+ Tree *search_options;
+
+ void _update_search();
+
+ void _sbox_input(const InputEvent& p_ie);
+
+ void _confirmed();
+ void _text_changed(const String& p_newtext);
+
+ EditorHelpBit *help_bit;
+
+ bool properties;
+ String selected;
+ Variant::Type type;
+ InputEvent::Type event_type;
+ String base_type;
+ ObjectID script;
+ Object *instance;
+
+ void _item_selected();
+protected:
+ void _notification(int p_what);
+ static void _bind_methods();
+
+
+
+public:
+
+
+ void select_method_from_base_type(const String& p_base,const String& p_current="");
+ void select_method_from_script(const Ref<Script>& p_script,const String& p_current="");
+ void select_method_from_basic_type(Variant::Type p_type,const String& p_current="");
+ void select_method_from_instance(Object* p_instance, const String &p_current="");
+
+ void select_property_from_base_type(const String& p_base,const String& p_current="");
+ void select_property_from_script(const Ref<Script>& p_script,const String& p_current="");
+ void select_property_from_basic_type(Variant::Type p_type,InputEvent::Type p_event_type,const String& p_current="");
+ void select_property_from_instance(Object* p_instance, const String &p_current="");
+
+ PropertySelector();
+};
+
+#endif // PROPERTYSELECTOR_H
diff --git a/tools/editor/scene_tree_dock.cpp b/tools/editor/scene_tree_dock.cpp
index 94587456f1..506dfd3889 100644
--- a/tools/editor/scene_tree_dock.cpp
+++ b/tools/editor/scene_tree_dock.cpp
@@ -33,6 +33,7 @@
#include "scene/resources/packed_scene.h"
#include "editor_settings.h"
#include "tools/editor/plugins/canvas_item_editor_plugin.h"
+#include "tools/editor/plugins/spatial_editor_plugin.h"
#include "script_editor_debugger.h"
#include "tools/editor/plugins/script_editor_plugin.h"
#include "core/io/resource_saver.h"
@@ -1825,6 +1826,21 @@ void SceneTreeDock::set_filter(const String& p_filter){
scene_tree->set_filter(p_filter);
}
+
+void SceneTreeDock::_focus_node() {
+
+ Node *node = scene_tree->get_selected();
+ ERR_FAIL_COND(!node);
+
+ if (node->is_type("CanvasItem")) {
+ CanvasItemEditorPlugin *editor = editor_data->get_editor("2D")->cast_to<CanvasItemEditorPlugin>();
+ editor->get_canvas_item_editor()->focus_selection();
+ } else {
+ SpatialEditorPlugin *editor = editor_data->get_editor("3D")->cast_to<SpatialEditorPlugin>();
+ editor->get_spatial_editor()->get_editor_viewport(0)->focus_selection();
+ }
+}
+
void SceneTreeDock::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_tool_selected"),&SceneTreeDock::_tool_selected,DEFVAL(false));
@@ -1849,6 +1865,7 @@ void SceneTreeDock::_bind_methods() {
ObjectTypeDB::bind_method(_MD("_files_dropped"),&SceneTreeDock::_files_dropped);
ObjectTypeDB::bind_method(_MD("_tree_rmb"),&SceneTreeDock::_tree_rmb);
ObjectTypeDB::bind_method(_MD("_filter_changed"),&SceneTreeDock::_filter_changed);
+ ObjectTypeDB::bind_method(_MD("_focus_node"),&SceneTreeDock::_focus_node);
ObjectTypeDB::bind_method(_MD("instance"),&SceneTreeDock::instance);
@@ -1930,6 +1947,9 @@ SceneTreeDock::SceneTreeDock(EditorNode *p_editor,Node *p_scene_root,EditorSelec
scene_tree->connect("files_dropped",this,"_files_dropped");
scene_tree->connect("nodes_dragged",this,"_nodes_drag_begin");
+ scene_tree->get_scene_tree()->connect("item_double_clicked", this, "_focus_node");
+ scene_tree->get_scene_tree()->set_delayed_text_editor(true);
+
scene_tree->set_undo_redo(&editor_data->get_undo_redo());
scene_tree->set_editor_selection(editor_selection);
diff --git a/tools/editor/scene_tree_dock.h b/tools/editor/scene_tree_dock.h
index af612cbc77..d92f12c34b 100644
--- a/tools/editor/scene_tree_dock.h
+++ b/tools/editor/scene_tree_dock.h
@@ -163,6 +163,8 @@ public:
String get_filter();
void set_filter(const String& p_filter);
+ void _focus_node();
+
void import_subscene();
void set_edited_scene(Node* p_scene);
void instance(const String& p_path);
diff --git a/tools/editor/script_editor_debugger.cpp b/tools/editor/script_editor_debugger.cpp
index da42f54095..7fba73ca08 100644
--- a/tools/editor/script_editor_debugger.cpp
+++ b/tools/editor/script_editor_debugger.cpp
@@ -1087,6 +1087,9 @@ void ScriptEditorDebugger::start() {
stop();
+ if (!EditorNode::get_log()->is_visible()) {
+ EditorNode::get_singleton()->make_bottom_panel_item_visible(EditorNode::get_log());
+ }
uint16_t port = GLOBAL_DEF("debug/remote_port",6007);
perf_history.clear();
diff --git a/tools/ios_xcode_template/data.pck b/tools/ios_xcode_template/data.pck
deleted file mode 100644
index e69de29bb2..0000000000
--- a/tools/ios_xcode_template/data.pck
+++ /dev/null
diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj b/tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj
deleted file mode 100644
index 4ae1ec8a53..0000000000
--- a/tools/ios_xcode_template/godot_ios.xcodeproj/project.pbxproj
+++ /dev/null
@@ -1,469 +0,0 @@
-// !$*UTF8*$!
-{
- archiveVersion = 1;
- classes = {
- };
- objectVersion = 46;
- objects = {
-
-/* Begin PBXBuildFile section */
- D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
- D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */; };
- D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; };
- D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */; };
- D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */; };
- D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */; };
- D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */; };
- D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */; };
- D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */; };
- D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */; };
- D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */; };
- D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7718AEBFEB004A7AAE /* data.pck */; };
- D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */ = {isa = PBXBuildFile; fileRef = D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */; };
-/* End PBXBuildFile section */
-
-/* Begin PBXContainerItemProxy section */
- D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */ = {
- isa = PBXContainerItemProxy;
- containerPortal = D0BCFE2C18AEBDA2004A7AAE /* Project object */;
- proxyType = 1;
- remoteGlobalIDString = D0BCFE3318AEBDA2004A7AAE;
- remoteInfo = godot_ios;
- };
-/* End PBXContainerItemProxy section */
-
-/* Begin PBXFileReference section */
- D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = godot_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
- D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
- D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; };
- D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
- D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLKit.framework; path = System/Library/Frameworks/GLKit.framework; sourceTree = SDKROOT; };
- D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; };
- D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_ios-Info.plist"; sourceTree = "<group>"; };
- D0BCFE4518AEBDA2004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
- D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "godot_ios-Prefix.pch"; sourceTree = "<group>"; };
- D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = godot_iosTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
- D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; };
- D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "godot_iosTests-Info.plist"; sourceTree = "<group>"; };
- D0BCFE6B18AEBDA3004A7AAE /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
- D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = godot_iosTests.m; sourceTree = "<group>"; };
- D0BCFE7718AEBFEB004A7AAE /* data.pck */ = {isa = PBXFileReference; lastKnownFileType = file; path = data.pck; sourceTree = "<group>"; };
- D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = godot_opt.iphone; sourceTree = "<group>"; };
-/* End PBXFileReference section */
-
-/* Begin PBXFrameworksBuildPhase section */
- D0BCFE3118AEBDA2004A7AAE /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- D0BCFE4018AEBDA2004A7AAE /* OpenGLES.framework in Frameworks */,
- D0BCFE3A18AEBDA2004A7AAE /* CoreGraphics.framework in Frameworks */,
- D0BCFE3C18AEBDA2004A7AAE /* UIKit.framework in Frameworks */,
- D0BCFE3E18AEBDA2004A7AAE /* GLKit.framework in Frameworks */,
- D0BCFE3818AEBDA2004A7AAE /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- D0BCFE5D18AEBDA3004A7AAE /* Frameworks */ = {
- isa = PBXFrameworksBuildPhase;
- buildActionMask = 2147483647;
- files = (
- D0BCFE6218AEBDA3004A7AAE /* XCTest.framework in Frameworks */,
- D0BCFE6418AEBDA3004A7AAE /* UIKit.framework in Frameworks */,
- D0BCFE6318AEBDA3004A7AAE /* Foundation.framework in Frameworks */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXFrameworksBuildPhase section */
-
-/* Begin PBXGroup section */
- D0BCFE2B18AEBDA2004A7AAE = {
- isa = PBXGroup;
- children = (
- D0BCFE7918AEC06A004A7AAE /* godot_opt.iphone */,
- D0BCFE7718AEBFEB004A7AAE /* data.pck */,
- D0BCFE4118AEBDA2004A7AAE /* godot_ios */,
- D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */,
- D0BCFE3618AEBDA2004A7AAE /* Frameworks */,
- D0BCFE3518AEBDA2004A7AAE /* Products */,
- );
- sourceTree = "<group>";
- };
- D0BCFE3518AEBDA2004A7AAE /* Products */ = {
- isa = PBXGroup;
- children = (
- D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */,
- D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */,
- );
- name = Products;
- sourceTree = "<group>";
- };
- D0BCFE3618AEBDA2004A7AAE /* Frameworks */ = {
- isa = PBXGroup;
- children = (
- D0BCFE3718AEBDA2004A7AAE /* Foundation.framework */,
- D0BCFE3918AEBDA2004A7AAE /* CoreGraphics.framework */,
- D0BCFE3B18AEBDA2004A7AAE /* UIKit.framework */,
- D0BCFE3D18AEBDA2004A7AAE /* GLKit.framework */,
- D0BCFE3F18AEBDA2004A7AAE /* OpenGLES.framework */,
- D0BCFE6118AEBDA3004A7AAE /* XCTest.framework */,
- );
- name = Frameworks;
- sourceTree = "<group>";
- };
- D0BCFE4118AEBDA2004A7AAE /* godot_ios */ = {
- isa = PBXGroup;
- children = (
- D0BCFE4218AEBDA2004A7AAE /* Supporting Files */,
- );
- path = godot_ios;
- sourceTree = "<group>";
- };
- D0BCFE4218AEBDA2004A7AAE /* Supporting Files */ = {
- isa = PBXGroup;
- children = (
- D0BCFE4318AEBDA2004A7AAE /* godot_ios-Info.plist */,
- D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */,
- D0BCFE4918AEBDA2004A7AAE /* godot_ios-Prefix.pch */,
- );
- name = "Supporting Files";
- sourceTree = "<group>";
- };
- D0BCFE6718AEBDA3004A7AAE /* godot_iosTests */ = {
- isa = PBXGroup;
- children = (
- D0BCFE6D18AEBDA3004A7AAE /* godot_iosTests.m */,
- D0BCFE6818AEBDA3004A7AAE /* Supporting Files */,
- );
- path = godot_iosTests;
- sourceTree = "<group>";
- };
- D0BCFE6818AEBDA3004A7AAE /* Supporting Files */ = {
- isa = PBXGroup;
- children = (
- D0BCFE6918AEBDA3004A7AAE /* godot_iosTests-Info.plist */,
- D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */,
- );
- name = "Supporting Files";
- sourceTree = "<group>";
- };
-/* End PBXGroup section */
-
-/* Begin PBXNativeTarget section */
- D0BCFE3318AEBDA2004A7AAE /* godot_ios */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */;
- buildPhases = (
- D0BCFE3018AEBDA2004A7AAE /* Sources */,
- D0BCFE3118AEBDA2004A7AAE /* Frameworks */,
- D0BCFE3218AEBDA2004A7AAE /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- );
- name = godot_ios;
- productName = godot_ios;
- productReference = D0BCFE3418AEBDA2004A7AAE /* godot_ios.app */;
- productType = "com.apple.product-type.application";
- };
- D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */ = {
- isa = PBXNativeTarget;
- buildConfigurationList = D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */;
- buildPhases = (
- D0BCFE5C18AEBDA3004A7AAE /* Sources */,
- D0BCFE5D18AEBDA3004A7AAE /* Frameworks */,
- D0BCFE5E18AEBDA3004A7AAE /* Resources */,
- );
- buildRules = (
- );
- dependencies = (
- D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */,
- );
- name = godot_iosTests;
- productName = godot_iosTests;
- productReference = D0BCFE6018AEBDA3004A7AAE /* godot_iosTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
- };
-/* End PBXNativeTarget section */
-
-/* Begin PBXProject section */
- D0BCFE2C18AEBDA2004A7AAE /* Project object */ = {
- isa = PBXProject;
- attributes = {
- LastUpgradeCheck = 0500;
- ORGANIZATIONNAME = GodotEngine;
- TargetAttributes = {
- D0BCFE5F18AEBDA3004A7AAE = {
- TestTargetID = D0BCFE3318AEBDA2004A7AAE;
- };
- };
- };
- buildConfigurationList = D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */;
- compatibilityVersion = "Xcode 3.2";
- developmentRegion = English;
- hasScannedForEncodings = 0;
- knownRegions = (
- en,
- Base,
- );
- mainGroup = D0BCFE2B18AEBDA2004A7AAE;
- productRefGroup = D0BCFE3518AEBDA2004A7AAE /* Products */;
- projectDirPath = "";
- projectRoot = "";
- targets = (
- D0BCFE3318AEBDA2004A7AAE /* godot_ios */,
- D0BCFE5F18AEBDA3004A7AAE /* godot_iosTests */,
- );
- };
-/* End PBXProject section */
-
-/* Begin PBXResourcesBuildPhase section */
- D0BCFE3218AEBDA2004A7AAE /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- D0BCFE7818AEBFEB004A7AAE /* data.pck in Resources */,
- D0BCFE4618AEBDA2004A7AAE /* InfoPlist.strings in Resources */,
- D0BCFE7A18AEC06A004A7AAE /* godot_opt.iphone in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- D0BCFE5E18AEBDA3004A7AAE /* Resources */ = {
- isa = PBXResourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- D0BCFE6C18AEBDA3004A7AAE /* InfoPlist.strings in Resources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXResourcesBuildPhase section */
-
-/* Begin PBXSourcesBuildPhase section */
- D0BCFE3018AEBDA2004A7AAE /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
- D0BCFE5C18AEBDA3004A7AAE /* Sources */ = {
- isa = PBXSourcesBuildPhase;
- buildActionMask = 2147483647;
- files = (
- D0BCFE6E18AEBDA3004A7AAE /* godot_iosTests.m in Sources */,
- );
- runOnlyForDeploymentPostprocessing = 0;
- };
-/* End PBXSourcesBuildPhase section */
-
-/* Begin PBXTargetDependency section */
- D0BCFE6618AEBDA3004A7AAE /* PBXTargetDependency */ = {
- isa = PBXTargetDependency;
- target = D0BCFE3318AEBDA2004A7AAE /* godot_ios */;
- targetProxy = D0BCFE6518AEBDA3004A7AAE /* PBXContainerItemProxy */;
- };
-/* End PBXTargetDependency section */
-
-/* Begin PBXVariantGroup section */
- D0BCFE4418AEBDA2004A7AAE /* InfoPlist.strings */ = {
- isa = PBXVariantGroup;
- children = (
- D0BCFE4518AEBDA2004A7AAE /* en */,
- );
- name = InfoPlist.strings;
- sourceTree = "<group>";
- };
- D0BCFE6A18AEBDA3004A7AAE /* InfoPlist.strings */ = {
- isa = PBXVariantGroup;
- children = (
- D0BCFE6B18AEBDA3004A7AAE /* en */,
- );
- name = InfoPlist.strings;
- sourceTree = "<group>";
- };
-/* End PBXVariantGroup section */
-
-/* Begin XCBuildConfiguration section */
- D0BCFE6F18AEBDA3004A7AAE /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = NO;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_DYNAMIC_NO_PIC = NO;
- GCC_OPTIMIZATION_LEVEL = 0;
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- GCC_SYMBOLS_PRIVATE_EXTERN = NO;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 7.0;
- ONLY_ACTIVE_ARCH = YES;
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- };
- name = Debug;
- };
- D0BCFE7018AEBDA3004A7AAE /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ALWAYS_SEARCH_USER_PATHS = NO;
- ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
- CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
- CLANG_CXX_LIBRARY = "libc++";
- CLANG_ENABLE_MODULES = YES;
- CLANG_ENABLE_OBJC_ARC = YES;
- CLANG_WARN_BOOL_CONVERSION = YES;
- CLANG_WARN_CONSTANT_CONVERSION = YES;
- CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
- CLANG_WARN_EMPTY_BODY = YES;
- CLANG_WARN_ENUM_CONVERSION = YES;
- CLANG_WARN_INT_CONVERSION = YES;
- CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
- CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
- "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
- COPY_PHASE_STRIP = YES;
- ENABLE_NS_ASSERTIONS = NO;
- GCC_C_LANGUAGE_STANDARD = gnu99;
- GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
- GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
- GCC_WARN_UNDECLARED_SELECTOR = YES;
- GCC_WARN_UNINITIALIZED_AUTOS = YES;
- GCC_WARN_UNUSED_FUNCTION = YES;
- GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 7.0;
- SDKROOT = iphoneos;
- TARGETED_DEVICE_FAMILY = "1,2";
- VALIDATE_PRODUCT = YES;
- };
- name = Release;
- };
- D0BCFE7218AEBDA3004A7AAE /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD)";
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
- INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 4.3;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = "1,2";
- VALID_ARCHS = "armv7 armv7s";
- WRAPPER_EXTENSION = app;
- };
- name = Debug;
- };
- D0BCFE7318AEBDA3004A7AAE /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD)";
- ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
- ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
- INFOPLIST_FILE = "godot_ios/godot_ios-Info.plist";
- IPHONEOS_DEPLOYMENT_TARGET = 4.3;
- PRODUCT_NAME = "$(TARGET_NAME)";
- TARGETED_DEVICE_FAMILY = "1,2";
- VALID_ARCHS = "armv7 armv7s";
- WRAPPER_EXTENSION = app;
- };
- name = Release;
- };
- D0BCFE7518AEBDA3004A7AAE /* Debug */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
- BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios";
- FRAMEWORK_SEARCH_PATHS = (
- "$(SDKROOT)/Developer/Library/Frameworks",
- "$(inherited)",
- "$(DEVELOPER_FRAMEWORKS_DIR)",
- );
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
- GCC_PREPROCESSOR_DEFINITIONS = (
- "DEBUG=1",
- "$(inherited)",
- );
- INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist";
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUNDLE_LOADER)";
- WRAPPER_EXTENSION = xctest;
- };
- name = Debug;
- };
- D0BCFE7618AEBDA3004A7AAE /* Release */ = {
- isa = XCBuildConfiguration;
- buildSettings = {
- ARCHS = "$(ARCHS_STANDARD_INCLUDING_64_BIT)";
- BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/godot_ios.app/godot_ios";
- FRAMEWORK_SEARCH_PATHS = (
- "$(SDKROOT)/Developer/Library/Frameworks",
- "$(inherited)",
- "$(DEVELOPER_FRAMEWORKS_DIR)",
- );
- GCC_PRECOMPILE_PREFIX_HEADER = YES;
- GCC_PREFIX_HEADER = "godot_ios/godot_ios-Prefix.pch";
- INFOPLIST_FILE = "godot_iosTests/godot_iosTests-Info.plist";
- PRODUCT_NAME = "$(TARGET_NAME)";
- TEST_HOST = "$(BUNDLE_LOADER)";
- WRAPPER_EXTENSION = xctest;
- };
- name = Release;
- };
-/* End XCBuildConfiguration section */
-
-/* Begin XCConfigurationList section */
- D0BCFE2F18AEBDA2004A7AAE /* Build configuration list for PBXProject "godot_ios" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- D0BCFE6F18AEBDA3004A7AAE /* Debug */,
- D0BCFE7018AEBDA3004A7AAE /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- defaultConfigurationName = Release;
- };
- D0BCFE7118AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_ios" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- D0BCFE7218AEBDA3004A7AAE /* Debug */,
- D0BCFE7318AEBDA3004A7AAE /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- };
- D0BCFE7418AEBDA3004A7AAE /* Build configuration list for PBXNativeTarget "godot_iosTests" */ = {
- isa = XCConfigurationList;
- buildConfigurations = (
- D0BCFE7518AEBDA3004A7AAE /* Debug */,
- D0BCFE7618AEBDA3004A7AAE /* Release */,
- );
- defaultConfigurationIsVisible = 0;
- };
-/* End XCConfigurationList section */
- };
- rootObject = D0BCFE2C18AEBDA2004A7AAE /* Project object */;
-}
diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
deleted file mode 100644
index 3c9ba38bbe..0000000000
--- a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Workspace
- version = "1.0">
- <FileRef
- location = "self:godot_ios.xcodeproj">
- </FileRef>
-</Workspace>
diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate b/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate
deleted file mode 100644
index 7c338929ed..0000000000
--- a/tools/ios_xcode_template/godot_ios.xcodeproj/project.xcworkspace/xcuserdata/punto.xcuserdatad/UserInterfaceState.xcuserstate
+++ /dev/null
Binary files differ
diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme b/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme
deleted file mode 100644
index 19af55b4a2..0000000000
--- a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/godot_ios.xcscheme
+++ /dev/null
@@ -1,96 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Scheme
- LastUpgradeVersion = "0500"
- version = "1.3">
- <BuildAction
- parallelizeBuildables = "YES"
- buildImplicitDependencies = "YES">
- <BuildActionEntries>
- <BuildActionEntry
- buildForTesting = "YES"
- buildForRunning = "YES"
- buildForProfiling = "YES"
- buildForArchiving = "YES"
- buildForAnalyzing = "YES">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
- BuildableName = "godot_ios.app"
- BlueprintName = "godot_ios"
- ReferencedContainer = "container:godot_ios.xcodeproj">
- </BuildableReference>
- </BuildActionEntry>
- </BuildActionEntries>
- </BuildAction>
- <TestAction
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- shouldUseLaunchSchemeArgsEnv = "YES"
- buildConfiguration = "Debug">
- <Testables>
- <TestableReference
- skipped = "NO">
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "D0BCFE5F18AEBDA3004A7AAE"
- BuildableName = "godot_iosTests.xctest"
- BlueprintName = "godot_iosTests"
- ReferencedContainer = "container:godot_ios.xcodeproj">
- </BuildableReference>
- </TestableReference>
- </Testables>
- <MacroExpansion>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
- BuildableName = "godot_ios.app"
- BlueprintName = "godot_ios"
- ReferencedContainer = "container:godot_ios.xcodeproj">
- </BuildableReference>
- </MacroExpansion>
- </TestAction>
- <LaunchAction
- selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
- selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
- launchStyle = "0"
- useCustomWorkingDirectory = "NO"
- buildConfiguration = "Debug"
- ignoresPersistentStateOnLaunch = "NO"
- debugDocumentVersioning = "YES"
- allowLocationSimulation = "YES">
- <BuildableProductRunnable>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
- BuildableName = "godot_ios.app"
- BlueprintName = "godot_ios"
- ReferencedContainer = "container:godot_ios.xcodeproj">
- </BuildableReference>
- </BuildableProductRunnable>
- <AdditionalOptions>
- </AdditionalOptions>
- </LaunchAction>
- <ProfileAction
- shouldUseLaunchSchemeArgsEnv = "YES"
- savedToolIdentifier = ""
- useCustomWorkingDirectory = "NO"
- buildConfiguration = "Release"
- debugDocumentVersioning = "YES">
- <BuildableProductRunnable>
- <BuildableReference
- BuildableIdentifier = "primary"
- BlueprintIdentifier = "D0BCFE3318AEBDA2004A7AAE"
- BuildableName = "godot_ios.app"
- BlueprintName = "godot_ios"
- ReferencedContainer = "container:godot_ios.xcodeproj">
- </BuildableReference>
- </BuildableProductRunnable>
- </ProfileAction>
- <AnalyzeAction
- buildConfiguration = "Debug">
- </AnalyzeAction>
- <ArchiveAction
- buildConfiguration = "Release"
- revealArchiveInOrganizer = "YES">
- </ArchiveAction>
-</Scheme>
diff --git a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist b/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist
deleted file mode 100644
index 4a3a16cbdb..0000000000
--- a/tools/ios_xcode_template/godot_ios.xcodeproj/xcuserdata/punto.xcuserdatad/xcschemes/xcschememanagement.plist
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>SchemeUserState</key>
- <dict>
- <key>godot_ios.xcscheme</key>
- <dict>
- <key>orderHint</key>
- <integer>0</integer>
- </dict>
- </dict>
- <key>SuppressBuildableAutocreation</key>
- <dict>
- <key>D0BCFE3318AEBDA2004A7AAE</key>
- <dict>
- <key>primary</key>
- <true/>
- </dict>
- <key>D0BCFE5F18AEBDA3004A7AAE</key>
- <dict>
- <key>primary</key>
- <true/>
- </dict>
- </dict>
-</dict>
-</plist>
diff --git a/tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings b/tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings
deleted file mode 100644
index 477b28ff8f..0000000000
--- a/tools/ios_xcode_template/godot_ios/en.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-
diff --git a/tools/ios_xcode_template/godot_ios/godot_ios-Info.plist b/tools/ios_xcode_template/godot_ios/godot_ios-Info.plist
deleted file mode 100644
index 357970920a..0000000000
--- a/tools/ios_xcode_template/godot_ios/godot_ios-Info.plist
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>en</string>
- <key>CFBundleDisplayName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundleExecutable</key>
- <string>godot_opt.iphone</string>
- <key>CFBundleIdentifier</key>
- <string>org.godotengine.${PRODUCT_NAME:rfc1034identifier}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundleName</key>
- <string>${PRODUCT_NAME}</string>
- <key>CFBundlePackageType</key>
- <string>APPL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1.0</string>
- <key>LSRequiresIPhoneOS</key>
- <true/>
- <key>UIRequiredDeviceCapabilities</key>
- <array>
- <string>armv7</string>
- </array>
- <key>UIStatusBarHidden</key>
- <true/>
- <key>UISupportedInterfaceOrientations</key>
- <array>
- <string>UIInterfaceOrientationPortrait</string>
- <string>UIInterfaceOrientationLandscapeLeft</string>
- <string>UIInterfaceOrientationLandscapeRight</string>
- </array>
- <key>UISupportedInterfaceOrientations~ipad</key>
- <array>
- <string>UIInterfaceOrientationPortrait</string>
- <string>UIInterfaceOrientationPortraitUpsideDown</string>
- <string>UIInterfaceOrientationLandscapeLeft</string>
- <string>UIInterfaceOrientationLandscapeRight</string>
- </array>
-</dict>
-</plist>
diff --git a/tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch b/tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch
deleted file mode 100644
index 82a2bb4507..0000000000
--- a/tools/ios_xcode_template/godot_ios/godot_ios-Prefix.pch
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// Prefix header
-//
-// The contents of this file are implicitly included at the beginning of every source file.
-//
-
-#import <Availability.h>
-
-#ifndef __IPHONE_5_0
-#warning "This project uses features only available in iOS SDK 5.0 and later."
-#endif
-
-#ifdef __OBJC__
- #import <UIKit/UIKit.h>
- #import <Foundation/Foundation.h>
-#endif
diff --git a/tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings b/tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings
deleted file mode 100644
index 477b28ff8f..0000000000
--- a/tools/ios_xcode_template/godot_iosTests/en.lproj/InfoPlist.strings
+++ /dev/null
@@ -1,2 +0,0 @@
-/* Localized versions of Info.plist keys */
-
diff --git a/tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist b/tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist
deleted file mode 100644
index 0f69aa80eb..0000000000
--- a/tools/ios_xcode_template/godot_iosTests/godot_iosTests-Info.plist
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
- <key>CFBundleDevelopmentRegion</key>
- <string>en</string>
- <key>CFBundleExecutable</key>
- <string>${EXECUTABLE_NAME}</string>
- <key>CFBundleIdentifier</key>
- <string>org.godotengine.${PRODUCT_NAME:rfc1034identifier}</string>
- <key>CFBundleInfoDictionaryVersion</key>
- <string>6.0</string>
- <key>CFBundlePackageType</key>
- <string>BNDL</string>
- <key>CFBundleShortVersionString</key>
- <string>1.0</string>
- <key>CFBundleSignature</key>
- <string>????</string>
- <key>CFBundleVersion</key>
- <string>1</string>
-</dict>
-</plist>
diff --git a/tools/ios_xcode_template/godot_iosTests/godot_iosTests.m b/tools/ios_xcode_template/godot_iosTests/godot_iosTests.m
deleted file mode 100644
index d9fac0a250..0000000000
--- a/tools/ios_xcode_template/godot_iosTests/godot_iosTests.m
+++ /dev/null
@@ -1,55 +0,0 @@
-/*************************************************************************/
-/* godot_iosTests.m */
-/*************************************************************************/
-/* This file is part of: */
-/* GODOT ENGINE */
-/* http://www.godotengine.org */
-/*************************************************************************/
-/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
-/* */
-/* Permission is hereby granted, free of charge, to any person obtaining */
-/* a copy of this software and associated documentation files (the */
-/* "Software"), to deal in the Software without restriction, including */
-/* without limitation the rights to use, copy, modify, merge, publish, */
-/* distribute, sublicense, and/or sell copies of the Software, and to */
-/* permit persons to whom the Software is furnished to do so, subject to */
-/* the following conditions: */
-/* */
-/* The above copyright notice and this permission notice shall be */
-/* included in all copies or substantial portions of the Software. */
-/* */
-/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
-/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
-/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
-/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
-/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
-/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
-/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
-/*************************************************************************/
-
-#import <XCTest/XCTest.h>
-
-@interface godot_iosTests : XCTestCase
-
-@end
-
-@implementation godot_iosTests
-
-- (void)setUp
-{
- [super setUp];
- // Put setup code here. This method is called before the invocation of each test method in the class.
-}
-
-- (void)tearDown
-{
- // Put teardown code here. This method is called after the invocation of each test method in the class.
- [super tearDown];
-}
-
-- (void)testExample
-{
- XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__);
-}
-
-@end
diff --git a/tools/script_plugins/terrain/plugin.cfg b/tools/script_plugins/terrain/plugin.cfg
deleted file mode 100644
index d2f2917420..0000000000
--- a/tools/script_plugins/terrain/plugin.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-[plugin]
-
-name="Terrain"
-description="Simple plugin for generating and editing grid-based terrains. This type of terrains were all the rage in the early 2000's, but lost popularity to hand crafted geometry towards the end of the decade."
-author="Juan Linietsky"
-version="1.0"
-installs=true
-script="terrain.gd"
-install_files=["terrain.gd","terrain_node.gd","icon_terrain.png"]
-
-
-
-
-
-
-
diff --git a/tools/script_plugins/terrain/terrain.gd b/tools/script_plugins/terrain/terrain.gd
deleted file mode 100644
index b3e3121e7a..0000000000
--- a/tools/script_plugins/terrain/terrain.gd
+++ /dev/null
@@ -1,17 +0,0 @@
-tool # Always declare as Tool, if it's meant to run in the editor.
-extends EditorPlugin
-
-
-func get_name():
- return "Terrain"
-
-
-func _init():
- print("PLUGIN INIT")
-
-
-func _enter_scene():
- add_custom_type("Terrain","Spatial",preload("terrain_node.gd"),preload("terrain.png"))
-
-func _exit_scene():
- remove_custom_type("Terrain")
diff --git a/tools/script_plugins/terrain/terrain.png b/tools/script_plugins/terrain/terrain.png
deleted file mode 100644
index 7c1c3d70d6..0000000000
--- a/tools/script_plugins/terrain/terrain.png
+++ /dev/null
Binary files differ
diff --git a/tools/script_plugins/terrain/terrain_node.gd b/tools/script_plugins/terrain/terrain_node.gd
deleted file mode 100644
index 91cf3fcb2b..0000000000
--- a/tools/script_plugins/terrain/terrain_node.gd
+++ /dev/null
@@ -1,3 +0,0 @@
-extends Spatial
-
-
diff --git a/tools/script_plugins/time/plugin.cfg b/tools/script_plugins/time/plugin.cfg
deleted file mode 100644
index 5430306a79..0000000000
--- a/tools/script_plugins/time/plugin.cfg
+++ /dev/null
@@ -1,14 +0,0 @@
-[plugin]
-
-name="The Time"
-description="This plugin displays the current local time, with great accuracy, by harvesting the power of quartz crystals inside your computer.\nIt may also serve as simple example on how to write a non-installable editor plugin, or just remind you that it's time to go back home."
-author="Juan Linietsky"
-version="1.0"
-installs=false
-script="time.gd"
-
-
-
-
-
-
diff --git a/tools/script_plugins/time/time.gd b/tools/script_plugins/time/time.gd
deleted file mode 100644
index 2e56d89d4f..0000000000
--- a/tools/script_plugins/time/time.gd
+++ /dev/null
@@ -1,32 +0,0 @@
-tool # Always declare as Tool, if it's meant to run in the editor.
-extends EditorPlugin
-
-var timer = null
-var label = null
-
-func _timeout():
- if (label):
- var time = OS.get_time()
- label.set_text(str(time.hour).pad_zeros(2)+":"+str(time.minute).pad_zeros(2)+":"+str(time.second).pad_zeros(2))
-
-func get_name():
- return "The Time"
-
-
-func _init():
- print("PLUGIN INIT")
- timer = Timer.new()
- add_child(timer)
- timer.set_wait_time(0.5)
- timer.set_one_shot(false)
- timer.connect("timeout",self,"_timeout")
-
-func _enter_tree():
- label = Label.new()
- add_custom_control(CONTAINER_TOOLBAR,label)
- timer.start()
-
-func _exit_tree():
- timer.stop()
- label.free()
- label=null
diff --git a/tools/addheader/addheader.py b/tools/scripts/addheader.py
index d040d8b5d6..d040d8b5d6 100644
--- a/tools/addheader/addheader.py
+++ b/tools/scripts/addheader.py
diff --git a/tools/bmfhdr/makehdr.py b/tools/scripts/make_bmfhdr.py
index 0f6f453004..0f6f453004 100644
--- a/tools/bmfhdr/makehdr.py
+++ b/tools/scripts/make_bmfhdr.py
diff --git a/tools/glwrapper/makewrapper.py b/tools/scripts/make_glwrapper.py
index 2e5f06be12..f3f8d39837 100644
--- a/tools/glwrapper/makewrapper.py
+++ b/tools/scripts/make_glwrapper.py
@@ -2,7 +2,7 @@
import sys
if (len(sys.argv)<2):
- print("usage: makewrapper.py <headers>")
+ print("usage: make_glwrapper.py <headers>")
sys.exit(255)
diff --git a/tools/steam/make_icons.sh b/tools/scripts/make_icons.sh
index 71037cd1c3..71037cd1c3 100644
--- a/tools/steam/make_icons.sh
+++ b/tools/scripts/make_icons.sh
diff --git a/tools/memsort.py b/tools/scripts/memsort.py
index d2e4fe0226..d2e4fe0226 100644
--- a/tools/memsort.py
+++ b/tools/scripts/memsort.py
diff --git a/tools/translations/ar.po b/tools/translations/ar.po
index 8bb1201f72..74393ad4f4 100644
--- a/tools/translations/ar.po
+++ b/tools/translations/ar.po
@@ -160,11 +160,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -172,6 +196,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -231,7 +259,19 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
@@ -279,12 +319,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -488,7 +522,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1024,7 +1059,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1273,10 +1309,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1592,10 +1634,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5956,6 +5994,14 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/bg.po b/tools/translations/bg.po
index 41002cf7ad..9117731250 100644
--- a/tools/translations/bg.po
+++ b/tools/translations/bg.po
@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-10 14:02+0000\n"
+"PO-Revision-Date: 2016-08-20 16:42+0000\n"
"Last-Translator: Иван Пенев (Адмирал АнимЕ) <aeternus.arcis@gmail.com>\n"
"Language-Team: Bulgarian <https://hosted.weblate.org/projects/godot-engine/"
"godot/bg/>\n"
@@ -169,11 +169,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -181,6 +205,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -240,9 +268,23 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Възел"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Поставяне"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -288,12 +330,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -396,7 +432,8 @@ msgstr "ParallaxLayer работи само когато е наследник
#: scene/2d/particles_2d.cpp
msgid "Path property must point to a valid Particles2D node to work."
msgstr ""
-"Параметъра 'Path' трябва да сочи към работещ Particles2D нод за да работи."
+"Параметърът 'Path' трябва да сочи към действителен възел Particles2D, за да "
+"работи."
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
@@ -404,7 +441,9 @@ msgstr "PathFollow2D работи само когато е наследник н
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
-msgstr "Параметъра 'Path' трябва да сочи към Node2D нод за да работи."
+msgstr ""
+"Параметърът 'Path' трябва да сочи към действителен възел Node2D, за да "
+"работи."
#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
msgid ""
@@ -520,7 +559,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1056,7 +1096,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1305,10 +1346,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1379,7 +1426,7 @@ msgstr ""
#: tools/editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "Сцената не успя да се зареди заради липсващи зависимости:"
#: tools/editor/dependency_editor.cpp
msgid "Open Anyway"
@@ -1510,7 +1557,7 @@ msgstr ""
#: tools/editor/editor_data.cpp
msgid "Updating Scene"
-msgstr ""
+msgstr "Обновяване на сцената"
#: tools/editor/editor_data.cpp
msgid "Storing local changes.."
@@ -1518,7 +1565,7 @@ msgstr ""
#: tools/editor/editor_data.cpp
msgid "Updating scene.."
-msgstr ""
+msgstr "Обновяване на сцената.."
#: tools/editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
@@ -1570,7 +1617,7 @@ msgstr ""
#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "Любими:"
#: tools/editor/editor_file_dialog.cpp
msgid "Recent:"
@@ -1625,10 +1672,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -1663,7 +1706,7 @@ msgstr ""
#: tools/editor/editor_import_export.cpp
msgid "Exporting for %s"
-msgstr ""
+msgstr "Изнасяне за %s"
#: tools/editor/editor_import_export.cpp
msgid "Setting Up.."
@@ -1675,11 +1718,11 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Importing"
-msgstr ""
+msgstr "Извършва се повторно внасяне"
#: tools/editor/editor_node.cpp
msgid "Importing:"
-msgstr ""
+msgstr "Внасяне:"
#: tools/editor/editor_node.cpp
msgid "Node From Scene"
@@ -1715,7 +1758,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Saving Scene"
-msgstr ""
+msgstr "Запазване на сцената"
#: tools/editor/editor_node.cpp
msgid "Analyzing"
@@ -1838,7 +1881,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Open Scene"
-msgstr ""
+msgstr "Отваряне на сцена"
#: tools/editor/editor_node.cpp
msgid "Open Base Scene"
@@ -1846,7 +1889,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr ""
+msgstr "Бързо отваряне на сцена.."
#: tools/editor/editor_node.cpp
msgid "Quick Open Script.."
@@ -1858,11 +1901,11 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Close scene? (Unsaved changes will be lost)"
-msgstr ""
+msgstr "Да се затвори ли сцената? (незаразените промени ще се загубят)"
#: tools/editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr ""
+msgstr "Запазване на сцената като.."
#: tools/editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
@@ -1870,7 +1913,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Please save the scene first."
-msgstr ""
+msgstr "Моля, първо запазете сцената."
#: tools/editor/editor_node.cpp
msgid "Save Translatable Strings"
@@ -1886,7 +1929,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Quit"
-msgstr ""
+msgstr "Изход"
#: tools/editor/editor_node.cpp
msgid "Exit the editor?"
@@ -1910,7 +1953,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr ""
+msgstr "Бързо пускане на сцена.."
#: tools/editor/editor_node.cpp
msgid ""
@@ -1920,7 +1963,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Pick a Main Scene"
-msgstr ""
+msgstr "Изберете главна сцена"
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
msgid "Ugh"
@@ -1934,11 +1977,11 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Error loading scene."
-msgstr ""
+msgstr "Имаше грешка при зареждане на сцената."
#: tools/editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr ""
+msgstr "Сцената '%s' има нарушени зависимости:"
#: tools/editor/editor_node.cpp
msgid "Save Layout"
@@ -1967,7 +2010,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Scene"
-msgstr ""
+msgstr "Сцена"
#: tools/editor/editor_node.cpp
msgid "Go to previously opened scene."
@@ -1995,7 +2038,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "Нова сцена"
#: tools/editor/editor_node.cpp
msgid "New Inherited Scene.."
@@ -2003,19 +2046,19 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Open Scene.."
-msgstr ""
+msgstr "Отваряне на сцена.."
#: tools/editor/editor_node.cpp
msgid "Save Scene"
-msgstr ""
+msgstr "Запазване на сцената"
#: tools/editor/editor_node.cpp
msgid "Save all Scenes"
-msgstr ""
+msgstr "Запазване на всички сцени"
#: tools/editor/editor_node.cpp
msgid "Close Scene"
-msgstr ""
+msgstr "Затваряне на сцената"
#: tools/editor/editor_node.cpp
msgid "Close Goto Prev. Scene"
@@ -2056,7 +2099,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Project Settings"
-msgstr ""
+msgstr "Настройки на проекта"
#: tools/editor/editor_node.cpp
msgid "Revert Scene"
@@ -2064,11 +2107,11 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr ""
+msgstr "Изход до списъка с проекти"
#: tools/editor/editor_node.cpp
msgid "Import assets to the project."
-msgstr ""
+msgstr "Внасяне на обекти в проекта."
#: tools/editor/editor_node.cpp
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
@@ -2080,7 +2123,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Import"
-msgstr ""
+msgstr "Внасяне"
#: tools/editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
@@ -2092,15 +2135,15 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Export the project to many platforms."
-msgstr ""
+msgstr "Изнасяне на проекта на много платформи."
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Export"
-msgstr ""
+msgstr "Изнасяне"
#: tools/editor/editor_node.cpp
msgid "Play the project."
-msgstr ""
+msgstr "Възпроизвеждане на проекта."
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
@@ -2109,15 +2152,15 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Pause the scene"
-msgstr ""
+msgstr "Преустановяване на сцената"
#: tools/editor/editor_node.cpp
msgid "Pause Scene"
-msgstr ""
+msgstr "Преустановяване на сцената"
#: tools/editor/editor_node.cpp
msgid "Stop the scene."
-msgstr ""
+msgstr "Спиране на сцената."
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
@@ -2126,23 +2169,23 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr ""
+msgstr "Възпроизвеждане на редактирана сцена."
#: tools/editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "Възпроизвеждане на сцената"
#: tools/editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "Възпроизвеждане на сцена по избор"
#: tools/editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "Възпроизвеждане на сцена по избор"
#: tools/editor/editor_node.cpp
msgid "Debug options"
-msgstr ""
+msgstr "Настройки за отстраняване на грешки"
#: tools/editor/editor_node.cpp
msgid "Deploy with Remote Debug"
@@ -2214,11 +2257,11 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Settings"
-msgstr ""
+msgstr "Настройки"
#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr ""
+msgstr "Настройки на редактора"
#: tools/editor/editor_node.cpp
msgid "Editor Layout"
@@ -2230,7 +2273,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "About"
-msgstr ""
+msgstr "Относно"
#: tools/editor/editor_node.cpp
msgid "Alerts when an external resource has changed."
@@ -2294,7 +2337,7 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import"
-msgstr ""
+msgstr "Повторно внасяне"
#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
msgid "Update"
@@ -2310,15 +2353,15 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "Внасяне на шаблони от архив във формат ZIP"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Export Project"
-msgstr ""
+msgstr "Изнасяне на проекта"
#: tools/editor/editor_node.cpp
msgid "Export Library"
-msgstr ""
+msgstr "Изнасяне на библиотеката"
#: tools/editor/editor_node.cpp
msgid "Merge With Existing"
@@ -2403,10 +2446,11 @@ msgstr ""
#: tools/editor/editor_reimport_dialog.cpp
msgid "Current scene must be saved to re-import."
msgstr ""
+"За да се извърши повторното внасяне, текущата сцена трябва да бъде запазена."
#: tools/editor/editor_reimport_dialog.cpp
msgid "Save & Re-Import"
-msgstr ""
+msgstr "Запазване и повторно внасяне"
#: tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import Changed Resources"
@@ -2446,7 +2490,7 @@ msgstr ""
#: tools/editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr ""
+msgstr "Път на сцената:"
#: tools/editor/editor_sub_scene.cpp
msgid "Import From Node:"
@@ -2514,7 +2558,7 @@ msgstr ""
#: tools/editor/filesystem_dock.cpp
msgid "Re-Import.."
-msgstr ""
+msgstr "Повторно внасяне.."
#: tools/editor/filesystem_dock.cpp
msgid "Previous Directory"
@@ -2661,7 +2705,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Font Import"
-msgstr ""
+msgstr "Внасяне на шрифт"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid ""
@@ -2786,11 +2830,11 @@ msgstr ""
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Error importing scene."
-msgstr ""
+msgstr "Имаше грешка при внасянето на сцената."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import 3D Scene"
-msgstr ""
+msgstr "Внасяне на триизмерна сцена"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Source Scene:"
@@ -2826,11 +2870,11 @@ msgstr ""
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import Anyway"
-msgstr ""
+msgstr "Внасяне въпреки това"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import & Open"
-msgstr ""
+msgstr "Внасяне и отваряне"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Edited scene has not been saved, open imported scene anyway?"
@@ -2839,11 +2883,11 @@ msgstr ""
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import Scene"
-msgstr ""
+msgstr "Внасяне на сцена"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Importing Scene.."
-msgstr ""
+msgstr "Внасяне на сцената.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Running Custom Script.."
@@ -2863,7 +2907,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import Image:"
-msgstr ""
+msgstr "Внасяне на изображение:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Can't import a file over itself:"
@@ -2919,7 +2963,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Error importing:"
-msgstr ""
+msgstr "Имаше грешка при внасянето:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Only one file is required for large texture."
@@ -2931,7 +2975,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for Atlas (2D)"
-msgstr ""
+msgstr "Внасяне на текстури за Атлас (двуизмерно)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Cell Size:"
@@ -2943,7 +2987,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Large Textures (2D)"
-msgstr ""
+msgstr "Внасяне на големи текстури (двуизмерно)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture"
@@ -2967,15 +3011,15 @@ msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures"
-msgstr ""
+msgstr "Внасяне на текстури"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "2D Texture"
-msgstr ""
+msgstr "Двуизмерна текстура"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "3D Texture"
-msgstr ""
+msgstr "Триизмерна текстура"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Atlas Texture"
@@ -2997,7 +3041,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Large Texture"
-msgstr ""
+msgstr "Внасяне на голяма текстура"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Load Source Image"
@@ -3070,7 +3114,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "No items to import!"
-msgstr ""
+msgstr "Няма артикули за внасяне!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "No target path!"
@@ -3078,15 +3122,15 @@ msgstr ""
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Translations"
-msgstr ""
+msgstr "Внасяне на преводи"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Couldn't import!"
-msgstr ""
+msgstr "Неуспешно внасяне!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Translation"
-msgstr ""
+msgstr "Внасяне на превода"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Source CSV:"
@@ -3106,7 +3150,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Languages:"
-msgstr ""
+msgstr "Внасяне на езици:"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Translation"
@@ -3118,7 +3162,7 @@ msgstr ""
#: tools/editor/node_dock.cpp
msgid "Node"
-msgstr ""
+msgstr "Възел"
#: tools/editor/node_dock.cpp
msgid "Groups"
@@ -3436,7 +3480,7 @@ msgstr ""
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr ""
+msgstr "Внасяне на анимации.."
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
@@ -3793,11 +3837,11 @@ msgstr ""
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import from Scene"
-msgstr ""
+msgstr "Внасяне от сцена"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Update from Scene"
-msgstr ""
+msgstr "Обновяване от сцена"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
@@ -4334,15 +4378,15 @@ msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Error importing theme"
-msgstr ""
+msgstr "Имаше грешка при внасянето на сцената"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Error importing"
-msgstr ""
+msgstr "Имаше грешка при внасянето"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Import Theme"
-msgstr ""
+msgstr "Внасяне на тема"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As.."
@@ -4412,7 +4456,7 @@ msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr ""
+msgstr "Отстраняване на грешки"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
@@ -4436,7 +4480,7 @@ msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr ""
+msgstr "Отстранителя на грешки да седи отворен"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Window"
@@ -4499,7 +4543,7 @@ msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
msgid "Debugger"
-msgstr ""
+msgstr "Отстранител на грешки"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid ""
@@ -5063,7 +5107,7 @@ msgstr ""
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed (FPS):"
-msgstr ""
+msgstr "Скорост (кадри в секунда):"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animation Frames"
@@ -5328,11 +5372,11 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Please export outside the project folder!"
-msgstr ""
+msgstr "Моля, изнесете извън папката на проекта!"
#: tools/editor/project_export.cpp
msgid "Error exporting project!"
-msgstr ""
+msgstr "Имаше грешка при изнасяне на проекта!"
#: tools/editor/project_export.cpp
msgid "Error writing the project PCK!"
@@ -5376,7 +5420,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Project Export Settings"
-msgstr ""
+msgstr "Настройки за изнасяне на проекта"
#: tools/editor/project_export.cpp
msgid "Target"
@@ -5384,7 +5428,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Export to Platform"
-msgstr ""
+msgstr "Изнасяне към платформа"
#: tools/editor/project_export.cpp
msgid "Resources"
@@ -5392,23 +5436,23 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Export selected resources (including dependencies)."
-msgstr ""
+msgstr "Изнасяне на избраните ресурси (включително зависимостите)."
#: tools/editor/project_export.cpp
msgid "Export all resources in the project."
-msgstr ""
+msgstr "Изнасяне на всички ресурси в проекта."
#: tools/editor/project_export.cpp
msgid "Export all files in the project directory."
-msgstr ""
+msgstr "Изнасяне на всички файлове в папката на проекта."
#: tools/editor/project_export.cpp
msgid "Export Mode:"
-msgstr ""
+msgstr "Режим на изнасяне:"
#: tools/editor/project_export.cpp
msgid "Resources to Export:"
-msgstr ""
+msgstr "Ресурси за изнасяне:"
#: tools/editor/project_export.cpp
msgid "Action"
@@ -5573,7 +5617,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Export.."
-msgstr ""
+msgstr "Изнасяне.."
#: tools/editor/project_export.cpp
msgid "Project Export"
@@ -5597,7 +5641,7 @@ msgstr ""
#: tools/editor/project_manager.cpp
msgid "Imported Project"
-msgstr ""
+msgstr "Внесен проект"
#: tools/editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
@@ -5617,7 +5661,7 @@ msgstr ""
#: tools/editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr ""
+msgstr "Внасяне на съществуващ проект"
#: tools/editor/project_manager.cpp
msgid "Project Path (Must Exist):"
@@ -5811,7 +5855,7 @@ msgstr ""
#: tools/editor/project_settings.cpp
msgid "Settings saved OK."
-msgstr ""
+msgstr "Настройките са запазени."
#: tools/editor/project_settings.cpp
msgid "Add Translation"
@@ -5989,6 +6033,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Избиране на всичко"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Избиране на всичко"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6051,7 +6105,7 @@ msgstr ""
#: tools/editor/run_settings_dialog.cpp
msgid "Scene Run Settings"
-msgstr ""
+msgstr "Настройки за пускане на сцена"
#: tools/editor/scene_tree_dock.cpp
msgid "OK :("
@@ -6368,7 +6422,7 @@ msgstr ""
#: tools/editor/script_editor_debugger.cpp
msgid "Errors"
-msgstr ""
+msgstr "Грешки"
#: tools/editor/script_editor_debugger.cpp
msgid "Child Process Connected"
@@ -6392,7 +6446,7 @@ msgstr ""
#: tools/editor/script_editor_debugger.cpp
msgid "Errors:"
-msgstr ""
+msgstr "Грешки:"
#: tools/editor/script_editor_debugger.cpp
msgid "Stack Trace (if applicable):"
@@ -6420,7 +6474,7 @@ msgstr ""
#: tools/editor/script_editor_debugger.cpp
msgid "Value"
-msgstr ""
+msgstr "Стойност"
#: tools/editor/script_editor_debugger.cpp
msgid "Monitors"
@@ -6452,7 +6506,7 @@ msgstr ""
#: tools/editor/script_editor_debugger.cpp
msgid "Misc"
-msgstr ""
+msgstr "Разни"
#: tools/editor/script_editor_debugger.cpp
msgid "Clicked Control:"
diff --git a/tools/translations/bn.po b/tools/translations/bn.po
index fac96be0bb..d0827bf38f 100644
--- a/tools/translations/bn.po
+++ b/tools/translations/bn.po
@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-10 17:10+0000\n"
+"PO-Revision-Date: 2016-08-12 06:37+0000\n"
"Last-Translator: ABU MD. MARUF SARKER <maruf.webdev@gmail.com>\n"
"Language-Team: Bengali <https://hosted.weblate.org/projects/godot-engine/"
"godot/bn/>\n"
@@ -65,34 +65,40 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"একটি নোড কার্যকর মেমোরি ছাড়াই উৎপন্ন হয়েছে, কি করে সঠিকভাবে সরবারহ করতে হয় তা "
+"অনুগ্রহ করে ডকুমেন্টেশনে পড়ুন!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"নোড ডাকা হয়েছে, কিন্তু প্রথম কার্যকর মেমোরিতে ফাংশনের কোনো অবস্থা ফেরত পাঠায়নি।"
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"নোডের কার্যকর মেমোরির প্রাথমিক উপাদানে অবশ্যই ফিরতি মান নির্দিষ্ট করতে হবে! অনুগ্রহ "
+"করে আপনার নোডটি মেরামত করুন।"
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "নোড অনিয়মিত ক্রমের ফলাফল পাঠিয়েছে: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
+"ক্রম বিট (bit) পাওয়া গিয়েছে কিন্তু নোডটি স্ট্যাক/তাক-এ নেই, সমস্যাটি রিপোর্ট করুন!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "স্ট্যাক/তাক-এর গভীরতায় স্ট্যাক/তাক অধিপ্রবাহিত/প্লাবিত হয়েছে: "
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr ""
+msgstr "ফাংশনগুলি:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
@@ -111,9 +117,8 @@ msgid "Name already in use by another func/var/signal:"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "নির্বাচিত সমূহ অপসারণ করুন"
+msgstr "ফাংশনের (Function) নতুন নামকরণ করুন"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Variable"
@@ -136,9 +141,8 @@ msgid "Add Signal"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "নির্বাচিত সমূহ অপসারণ করুন"
+msgstr "ফাংশন (Function) অপসারণ করুন"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
@@ -149,9 +153,8 @@ msgid "Editing Variable:"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "নির্বাচিত সমূহ অপসারণ করুন"
+msgstr "সংকেত (Signal) অপসারণ করুন"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
@@ -162,11 +165,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -174,6 +201,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -224,9 +255,8 @@ msgid "Change"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "নির্বাচিত সমূহ অনুলিপি করুন"
+msgstr "নির্বাচিত সমূহ অপসারণ করুন"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -234,9 +264,22 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "প্রতিলেপন/পেস্ট করুন"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -282,12 +325,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -532,7 +569,8 @@ msgstr "সব ফাইল (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "খুলুন"
@@ -1075,7 +1113,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1324,10 +1363,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1646,10 +1691,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -3579,9 +3620,8 @@ msgid "Paste Pose"
msgstr ""
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "সবগুলি বাছাই করুন"
+msgstr "মোড (Mode) বাছাই করুন"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3600,9 +3640,8 @@ msgid "Alt+RMB: Depth list selection"
msgstr ""
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "সংযোগ (অ্যাড) বোতাম সরান"
+msgstr "মোড (Mode) সরান"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate Mode"
@@ -6011,6 +6050,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "মোড (Mode) বাছাই করুন"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "মোড (Mode) বাছাই করুন"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6216,9 +6265,8 @@ msgid "Save Branch as Scene"
msgstr ""
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "অনুগ্রহ করে নিশ্চিত করুন..."
+msgstr "অপসারণ করুন (নিশ্চয়তাকরণ নেই)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
diff --git a/tools/translations/ca.po b/tools/translations/ca.po
new file mode 100644
index 0000000000..14d523b88b
--- /dev/null
+++ b/tools/translations/ca.po
@@ -0,0 +1,6616 @@
+# LANGUAGE translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+#
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2016-09-01 11:46+0000\n"
+"Last-Translator: Roger BR <drai_kin@hotmail.com>\n"
+"Language-Team: Catalan <https://hosted.weblate.org/projects/godot-engine/"
+"godot/ca/>\n"
+"Language: ca\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.8\n"
+
+#: modules/gdscript/gd_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr "Argument de tipus invàlid per a convert(), utilitzi constants TYPE_*."
+
+#: modules/gdscript/gd_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+"Nombre insuficient de bytes per a descodificar els bytes, o el format és "
+"invàlid."
+
+#: modules/gdscript/gd_functions.cpp
+msgid "step argument is zero!"
+msgstr "L'argument pas (step) és zero!"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not a script with an instance"
+msgstr "Script sense instància"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not based on a script"
+msgstr "No basat en un script"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not based on a resource file"
+msgstr "No basat en un arxiu de recursos"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr "Format del diccionari d'instàncies invàlid (manca @path)"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+"Format del diccionari d'instàncies invàlid (no es pot carregar l'script a "
+"@path)"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr "Format del diccionari d'instàncies invàlid (script invàlid a @path)"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr "Diccionari d'instàncies invàlid (subclasses invàlides)"
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+"Node cedit sense memòria de treball. Llegiu la documentació per cedir "
+"(yield) nodes correctament!"
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+"Node cedit, però no ha retornat cap estat de funció en la primera memòria de "
+"treball."
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+"El valor de retorn s'ha d'assignar al primer element de la memòria de "
+"treball de nodes! Repareu el node."
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr "El node ha retornat un seqüencia de sortida invàlida: "
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+"S'ha trobat un bit de seqüencia però cap node en la pila (stack), reporteu "
+"el bug!"
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr "Pila desbordada (stack overflow) amb profunditat de Pila: "
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr "Funcions:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr "Variables:"
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "Senyals:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr "El nom no és un identificador vàlid:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr "Nom usat en un altra funció/variable/senyal:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr "Reanomena Funció"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr "Reanomena Variable"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr "Reanomena Senyal"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr "Afegeix Funció"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr "Afegeix Variable"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr "Afegeix Senyal"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr "Treu Funció"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr "Treu Variable"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr "Editant Variable:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr "Treu Senyal"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr "Editant Senyal:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr "Afegeix Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Afegeix Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Afegeix Node(s) des d'Arbre"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Afegir Captador de Propietat (Getter)"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Afegeix Col.locador de Proprietat (Setter)"
+
+#: modules/visual_script/visual_script_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "Edita"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr "Tipus Base:"
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "Membres:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr "Nodes disponibles:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr "Selecciona o crea una funció per editar la corba"
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "Tanca"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr "Edita els Arguments del Senyal:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr "Edita Variable:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr "Canvia"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr "Elimina Seleccionats"
+
+#: modules/visual_script/visual_script_editor.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr "Commuta el punt d'Interrupció"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "Troba el Tipus del Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Camí al Node:"
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr "Tipus d'entrada no iterable: "
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr "L'Iterador ha esdevingut invàlid"
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr "L'Iterador ha esdevingut invàlid: "
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr "El Nom de la propietat index és invàlid."
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr "L'objecte de Base no és un Node!"
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr "El camí no condueix a cap Node!"
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr "El nom de la propietat index '%s' és invàlid en el node %s."
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ": Argument invàlid del tipus: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ": Arguments invàlids: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr "Variable Get no trobada en el script: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr "Variable Set no trobada en el script: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+"El node personalitzat no té cap mètode _step(), no es pot processar la corba."
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+"Valor de retorn de _step() invàlid. Ha de ser un nombre enter (seq out), o "
+"una cadena de text (error)."
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"Un recurs del tipus SpriteFrames s'ha de crear or especificar en la "
+"propietat \"Quadres (Frames)\" perquè AnimatedSprite pugui mostrar els "
+"quadres."
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"Només es permet un sol CanvasModulate per escena (o conjunt d'escenes "
+"instanciades). El primer funcionara, mentre que la resta seran ignorats."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D només proporciona formes de col·lisió a nodes derivats de "
+"CollisionObject2D. Utilitzeu-lo només per donar una forma a nodes com "
+"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "Un CollisionPolygon2D buit no té cap efecte en la col·lisió."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D només proporciona formes de col·lisió nodes de derivats de "
+"CollisionObject2D. Utilitzeu-lo només per donar una forma a nodes com "
+"Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"S'ha de proporcionar una forma perquè *CollisionShape2D pugui funcionar. "
+"Creeu-li un recurs de forma (shape)!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+"S'ha de proveir la propietat 'textura' amb una textura amb la forma de la "
+"llum."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"Cal establir (o dibuixar) un polígon oclusiu perquè aquest oclusor "
+"(occluder) faci efecte."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr "El polígon oclusiu és buit. Dibuixeu un polígon!"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"Cal especificar un recurs de tipus NavigationPolygon per al correcte "
+"funcionament del Node. Si us plau especifiqueu una propietat o dibuixeu un "
+"polígon."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance ha de ser fill o nét d'un node Navigation2D. Només "
+"proporciona dades de navegació."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"Un node ParallaxLayer només funciona quan s'estableix com a fill d'un node "
+"ParallaxBackground."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr ""
+"Cal que la propietat Camí (Path) assenyali cap a un node Particles2D vàlid."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+"PathFollow2D només funciona si s'estableix com a fill d'un node Path2D."
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr "Cal que la propietat Camí (Path) assenyali un Node2D vàlid."
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"Cal crear o especificar un recurs SampleLibrary en la propietat 'samples' "
+"perquè SamplePlayer pugui reproduir so."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport "
+"must be set to 'render target' mode."
+msgstr ""
+"Cal que la propietat Camí (Path) assenyali un node de Vista (Viewport) "
+"vàlid. Aquest ha de ser especificat en el mode \"destí de renderització"
+"\" (render target)."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in "
+"order for this sprite to work."
+msgstr ""
+"L'àrea de Visualització (Viewport) especificada en la propietat \"Camí"
+"\" (Path) ha d'utilitzar el mode 'destí de renderització' (render target) "
+"perquè l'sprite funcioni."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+"VisibilityEnable2D funciona millor quan l'arrel de l'escena editada "
+"s'utilitza com a pare."
+
+#: scene/3d/baked_light_instance.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "BakedLightInstance no conté cap recurs BakedLight."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape només proporciona formes de col·lisió a nodes derivats de "
+"CollisionObject. Utilitzeu-lo només per donar una forma a nodes com Area, "
+"StaticBody, RigidBody, KinematicBody, etc."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"Cal proveir una forma perquè CollisionShape funcioni. Creeu-li un recurs de "
+"forma!"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon només proporciona formes de col·lisió a nodes derivats de "
+"CollisionObject. Utilitzeu-lo només per donar una forma a nodes com Area, "
+"StaticBody, RigidBody, KinematicBody, etc."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "Un CollisionPolygon buit no afecta les col·lisions."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"Cal crear o establir un recurs de tipus NavigationMesh per al correcte "
+"funcionament d'aquest node."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+"NavigationMeshInstance ha de ser fill o nét d'un node Navigation. Només "
+"proporciona dades de navegació."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"Només es permet un sol WorldEnvironment per escena ( o conjunt d'escenes "
+"instanciades)."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"Cal crear o establir un recurs SampleLibrary en la propietat 'samples' "
+"perquè SpatialSamplePlayer pugui reproduir so."
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+"Cal crear o establir un recurs SpriteFrames en la propietat 'Frames' perquè "
+"AnimatedSprite3D dibuixi els quadres."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Cancel·la"
+
+#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp
+msgid "OK"
+msgstr "D'acord"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "Ep!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Confirmeu..."
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "Fitxer Existent, Sobreescriure?"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "Tots Reconeguts"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Tots els Fitxers (*)"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/filesystem_dock.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+msgid "Open"
+msgstr "Obre"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr "Obre un Fitxer"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr "Obre Fitxer(s)"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr "Obre un Directori"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr "Obre un Fitxer o Directori"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "Desa"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "Desa un Fitxer"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Crea una Carpeta"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "Camí:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Directoris i Fitxers:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "Fitxer:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Filtre:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "Nom:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "No s'ha pogut crear la carpeta."
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Cal utilitzar una extensió vàlida."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr "Maj +"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr "Alt +"
+
+#: scene/gui/input_action.cpp
+msgid "Ctrl+"
+msgstr "Ctrl +"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Meta+"
+msgstr "Meta +"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Dispositiu"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Botó"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Botó Esquerre."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Botó Dret."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Botó del Mig."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "Roda Amunt."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "Roda Avall."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "Eix"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "Talla"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "Copia"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "Enganxa"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "Selecciona-ho Tot"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "Neteja"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "Desfés"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+"Les finestres emergents s'oculten per defecte tret que s'invoqui popup() o "
+"qualsevol de les funcions popup*(). És possible fer-les visibles mentre "
+"s'edita, però s'ocultaran durant l'execució."
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+"L'àrea de Visualització (Viewport) no és el Destí de Renderització (render "
+"target). Per mostrar-ne el contingut, especifiqueu-la com a filla d'un "
+"Control de forma per tal d'obtenir-ne la mida. Altrament, establiu-la com a "
+"Destí de Renderització i assigneu la textura interna a algun node."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "Error inicialitzant FreeType."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Format de lletra desconegut."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Error carregant lletra."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "La mida de la lletra no és vàlida."
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Desactivat"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "Tota la Selecció"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Mou Afegir Clau"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Canvia Transició"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Canvia Transformació"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Canvia Valor"
+
+#: tools/editor/animation_editor.cpp
+#, fuzzy
+msgid "Anim Change Call"
+msgstr "Canvia Crida (Call)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Afegeix Pista"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Duplica Claus"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Mou Pista Amunt"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Mou Pista Avall"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Treu Pista"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Posa les Transicions a:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Reanomena Pista"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Canvia Interpolació de Pista"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Canvia Valor del Mode de Pista"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Edita Corba del Node"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Edita Corba de Selecció"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Esborra Claus"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Duplica la Selecció"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "Duplica Transposats"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr "Treu la Selecció"
+
+#: tools/editor/animation_editor.cpp
+msgid "Continuous"
+msgstr "Continu"
+
+#: tools/editor/animation_editor.cpp
+msgid "Discrete"
+msgstr "Discret"
+
+#: tools/editor/animation_editor.cpp
+msgid "Trigger"
+msgstr "Activador"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Afegeix Clau"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Mou Claus"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Escala la Selecció"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Escala des del Cursor"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Vés al Pas Següent"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Vés al Pas Previ"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Lineal"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Constant"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "Entrada"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Sortida"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "Entrada-Sortida"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Sortida-Entrada"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Transicions"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Optimitza l'Animació"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Poleix l'Animació"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Vol crear una NOVA pista per a %s i inserir-hi una clau?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Vol crear %d noves pistes i inserir-hi claus?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Crea"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Crea i Insereix"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Insereix Pista i Clau"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Insereix Clau"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Canvia durada"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Canvia bucle"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Crea Clau de Valor Tipat"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Insereix Animació"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Escala Claus"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Afegeix Pista de Crida"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Zoom d'animació."
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Durada (s):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Durada de l'Animació (en segons)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Pas (s):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Pas de desplaçament del cursor (s)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Activa/Desactiva el bucle de l'animació."
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Afegeix noves pistes."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Mou amunt la pista actual."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Mou avall la pista actual."
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Treu la pista seleccionada."
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "Eines de Pista"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Activa l'editatge individual de claus en clicar-hi."
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Optimitzador d'Animació"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "Error Lineal Max.:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "Error Angular Max.:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "Max. Angle Optimitzable:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Optimitza"
+
+#: tools/editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr ""
+"Selecciona un AnimationPlayer a l'Arbre de l'Escena per editar-ne l'animació."
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "Clau"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Transició"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Relació d'Escala:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Cridar Funcions en el Node \"Which\"?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Treu claus invàlides"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Treu pistes buides o sense resoldre"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Poleix totes les animacions"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Poleix la/les Animació/ns (NO ES POT DESFER!)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Poleix"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Redimensiona Matriu"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Canvia Tipus de la Matriu"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Canvia Valor de la Matriu"
+
+#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Cerca:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Ordena:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Inverteix"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "Categoria:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Tot"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr "Lloc:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr "Suport..."
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr "Oficial"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr "Comunitat"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr "Provant"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "Arxiu ZIP d'Actius"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "Llista de mètodes de '%s':"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "Crida"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "Llista de mètodes:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "Arguments:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "Retorn:"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Vés a la Línia"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Línia:"
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Cap Coincidència"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr "Substituïdes %d ocurrència/es."
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Reemplaça"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Reemplaça-hoTot"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Distingeix entre majúscules i minúscules"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Paraules senceres"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Selecció Només"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "Cerca"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Troba"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Següent"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "Reemplaçades %d ocurrència/es."
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "No s'ha trobat!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Reemplaça per"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr "Majúscules i minúscules"
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "Enrere"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Indica en reemplaçar"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Omet"
+
+#: tools/editor/code_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "Apropa"
+
+#: tools/editor/code_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "Allunya"
+
+#: tools/editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "Reinicia el Zoom"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Línia:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Col:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "Cal especificar un mètode per al Node objectiu!"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Connecta al Node:"
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "Afegeix"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "Treu"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr "Afegeix Argument de Crida Extra:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr "Arguments de Crida Extra:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr "Camí al Node:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Crea Funció"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Diferit"
+
+#: tools/editor/connections_dialog.cpp
+#, fuzzy
+msgid "Oneshot"
+msgstr "D'un cop"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Connecta"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Connecta '%s' amb '%s'"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr "Connectant Senyal:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "Crea Subscripció"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Connecta.."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Desconnecta"
+
+#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp
+msgid "Signals"
+msgstr "Senyals"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Crea Nou"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Coincidències:"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descripció:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Cerca Reemplaçant per a:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Dependències per a:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"S'està editant l'Escena '%s'.\n"
+"Els canvis s'actualitzaran recarregar."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"S'està usant el Recurs '%s'.\n"
+"Els canvis s'actualitzaran en recarregar."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Dependències"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "Recurs"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "Camí"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Dependències:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Arregla Trencats"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Editor de Dependències"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr "Cerca Recurs Reemplaçant:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr "Propietaris de:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+"Els fitxers eliminats son necessaris per a altres recursos.\n"
+"Eliminar de totes formes? (No es pot desfer)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr "Elimina fitxer seleccionats del project? (no es pot desfer)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr "Error en carregar:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr "No s'ha pogut carregar l'escena. Manquen dependències:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr "Obre igualment"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr "Amb quina acció s'ha de procedir?"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr "Arregla Dependències"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr "Errors de càrrega!"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr "Eliminar permanentment %d element(s)? (No es pot desfer!)"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr "Posseeix"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr "Recursos Sense Propietat Explícita:"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr "Navegador de Recursos Orfes"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr "Esborra fitxers seleccionats?"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/filesystem_dock.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr "Esborra"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr "Nom no vàlid."
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr "Caràcters vàlids:"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+"Nom no vàlid. No pot coincidir amb noms de classe del motor ja existents."
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+"Nom no vàlid. No pot coincidir amb noms de tipus integrats ja existents."
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+"Nom no vàlid. No pot coincidir amb noms de constants globals ja existents."
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr "Camí no vàlid."
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr "El Fitxer no existeix."
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr "Fora del camí dels recursos."
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr "Afegeix AutoCàrrega"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr "l'AutoCàrrega '%s' ja existeix!"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr "Reanomena AutoCàrrega"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr "Commuta les Globals d'AutoCàrrega"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr "Mou AutoCàrrega"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr "Treure Autocàrrega"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr "Activa"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr "Reorganitza AutoCàrregues"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr "Nom del node:"
+
+#: tools/editor/editor_autoload_settings.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Name"
+msgstr "Nom"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr "Singleton"
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr "Llista:"
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr "Actualitzant Escena"
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr "Emmagatzemant canvis locals.."
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr "Actualitzant escena.."
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr "Tria un Directori"
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr "Tria"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr "Enrere"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr "Endavant"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr "Puja"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr "Refresca"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr "Commuta Fitxers Ocults"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr "Commuta Favorit"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr "Commuta Mode"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr "Enfoca Camí"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr "Mou Favorit Amunt"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr "Mou Favorit Avall"
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr "Favorits:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr "Recents:"
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr "Previsualització:"
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr "Escaneja Fonts"
+
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr "Cerca Ajuda"
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr "Llista de Classes:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr "Cerca Classes"
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr "Classe:"
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr "Hereta:"
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr "Heretat per:"
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr "Descripció breu:"
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr "Mètodes públics:"
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr "Elements del Tema de la GUI:"
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr "Constants:"
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr "Descripció del mètode:"
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr "Cerca Text"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr "Afegit:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr "Eliminat:"
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr "Error en desar atles:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr "No s'ha pogut desar la subtextura de l'atles:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr "Emmagatzemant Fitxer:"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr "Compressió"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr "Exportació per a %s"
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr "Instal·lant.."
+
+#: tools/editor/editor_log.cpp
+msgid " Output:"
+msgstr " Sortida:"
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr "Re-Importació"
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr "Importació:"
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr "Node de l'Escena"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr "Error en desar recurs!"
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr "Desar Recurs com..."
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr "Vaja..."
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in later in \"Project Settings\" under the "
+"'application' category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Fullscreen Mode"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Filter Files.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Can't operate on '..'"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "No files selected!"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Rename or Move.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Info"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Re-Import.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "No bit masks to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "Import BitMasks"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "Bit Mask"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"Invalid file extension.\n"
+"Please use .fnt."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr ""
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Node"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr ""
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr ""
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "File"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr ""
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Manager"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Afegeix Col.locador de Proprietat (Setter)"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Mètodes públics:"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create a new script for the selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "El node personalitzat no té _get_output_port_unsequenced(idx,wmem), però "
+#~ "s'han especificat ports sense seqüenciar."
diff --git a/tools/translations/cs.po b/tools/translations/cs.po
index 43c0027d11..bbe2142bcb 100644
--- a/tools/translations/cs.po
+++ b/tools/translations/cs.po
@@ -8,7 +8,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-10 14:59+0000\n"
+"PO-Revision-Date: 2016-08-11 15:01+0000\n"
"Last-Translator: Luděk Novotný <gladosicek@gmail.com>\n"
"Language-Team: Czech <https://hosted.weblate.org/projects/godot-engine/godot/"
"cs/>\n"
@@ -61,139 +61,175 @@ msgid "Invalid instance dictionary (invalid subclasses)"
msgstr "Neplatná instance slovníku (neplatné podtřídy)"
#: modules/visual_script/visual_script.cpp
+#, fuzzy
msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Uzel zavolal yield bez pracovní paměti. Přečtěte si prosím v dokumentaci, "
+"jak správně používat yield!"
#: modules/visual_script/visual_script.cpp
+#, fuzzy
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
-msgstr ""
+msgstr "Uzel zavolal yield, ale nevrátil stav funkce v první pracovní paměti."
#: modules/visual_script/visual_script.cpp
+#, fuzzy
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"Návratová hodnota musí být přiřazena prvnímu prvku uzlu pracovní paměti. "
+"Opravte prosím váš uzel."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Uzel vrátil neplatnou posloupnost výstupu: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
-msgstr ""
+msgstr "Nalezen bit posloupnosti ale ne uzel v zásobníku. Nahlaste chybu!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Přetečení zásobníku s hloubkou: "
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr ""
+msgstr "Funkce:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
-msgstr ""
+msgstr "Proměnné:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
-msgstr ""
+msgstr "Signály:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Jméno není platný identifikátor:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Jméno už je použito jinou funkcí/proměnnou/signálem:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Function"
-msgstr ""
+msgstr "Přejmenovat funkci"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Variable"
-msgstr ""
+msgstr "Přejmenovat proměnnou"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Signal"
-msgstr ""
+msgstr "Přejmenovat signál"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function"
-msgstr ""
+msgstr "Přidat funkci"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
-msgstr ""
+msgstr "Přidat proměnnou"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr ""
+msgstr "Přidat signál"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
-msgstr ""
+msgstr "Odstranit funkci"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr ""
+msgstr "Odstranit proměnnou"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
-msgstr ""
+msgstr "Úprava proměnné:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr ""
+msgstr "Odstranit signál"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
-msgstr ""
+msgstr "Úprava signálu:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
+msgstr "Přidat uzel"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Meta to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Přidat uzel"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Přidat uzel (uzly) ze stromu"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Přidat vlastnost getter"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Přidat vlastnost setter"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Edit"
-msgstr ""
+msgstr "Upravit"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
-msgstr ""
+msgstr "Základní typ:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
-msgstr ""
+msgstr "Členové:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "Dostupné uzly:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Pro úpravu grafu vyber nebo vytvoř funkci"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -206,33 +242,47 @@ msgstr ""
#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
msgid "Close"
-msgstr ""
+msgstr "Zavřít"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr ""
+msgstr "Upravit argumenty signálu:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
-msgstr ""
+msgstr "Upravit proměnnou:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change"
-msgstr ""
+msgstr "Změnit"
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete Selected"
-msgstr ""
+msgstr "Smazat vybraný"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
+msgstr "Přepnout breakpoint"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "Vyhledat typ uzlu"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Cut Nodes"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Cesta k uzlu:"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -247,45 +297,39 @@ msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name."
-msgstr ""
+msgstr "Neplatné jméno vlastnosti."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "Základní objekt není Node!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
-msgstr ""
+msgstr "Cesta nevede k uzlu!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Neplatné jméno vlastnosti '%s' v uzlu %s."
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ""
+msgstr ": Neplatný argument typu: "
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid arguments: "
-msgstr ""
+msgstr ": Neplatné argumenty: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "Proměnná pro získání nebyla ve skriptu nalezena: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "Proměnná pro nastavení nebyla ve skriptu nalezena: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
-msgstr ""
+msgstr "Vlastní uzel nemá metodu _step(), takže nelze postupovat grafem."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
@@ -422,7 +466,7 @@ msgstr ""
#: scene/3d/baked_light_instance.cpp
msgid "BakedLightInstance does not contain a BakedLight resource."
-msgstr ""
+msgstr "BakedLightInstance neobsahuje zdroj BakedLight."
#: scene/3d/body_shape.cpp
msgid ""
@@ -524,7 +568,8 @@ msgstr "Všechny soubory (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Otevřít"
@@ -598,16 +643,16 @@ msgstr "Je nutné použít platnou příponu."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Shift+"
-msgstr ""
+msgstr "Shift+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Alt+"
-msgstr ""
+msgstr "Alt+"
#: scene/gui/input_action.cpp
msgid "Ctrl+"
-msgstr ""
+msgstr "Ctrl+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
@@ -732,11 +777,11 @@ msgstr "Neplatná velikost fontu."
#: tools/editor/animation_editor.cpp
msgid "Disabled"
-msgstr ""
+msgstr "Vypnuto"
#: tools/editor/animation_editor.cpp
msgid "All Selection"
-msgstr ""
+msgstr "Všechny vybrané"
#: tools/editor/animation_editor.cpp
msgid "Move Add Key"
@@ -744,72 +789,72 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr ""
+msgstr "Animace: změna přechodu"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Animace: změna transformace"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr ""
+msgstr "Animace: změna hodnoty"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr ""
+msgstr "Animace: změna volání"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr ""
+msgstr "Animace: přidat stopu"
#: tools/editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr ""
+msgstr "Animace: duplikovat klíče"
#: tools/editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr ""
+msgstr "Posun stopy animace nahoru"
#: tools/editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr ""
+msgstr "Posun stopy animace dolů"
#: tools/editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr ""
+msgstr "Odstranit stopu animace"
#: tools/editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr ""
+msgstr "Změna přechodů na:"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr ""
+msgstr "Animace: přejmenování stopy"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr ""
+msgstr "Animace: změna interpolace stopy"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr ""
+msgstr "Animace: změna typu hodnot"
#: tools/editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr ""
+msgstr "Úprava křivky uzlu"
#: tools/editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr ""
+msgstr "Úprava vybraných křivek"
#: tools/editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr ""
+msgstr "Animace: smazat klíče"
#: tools/editor/animation_editor.cpp
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr ""
+msgstr "Duplikovat výběr"
#: tools/editor/animation_editor.cpp
msgid "Duplicate Transposed"
@@ -817,88 +862,88 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Remove Selection"
-msgstr ""
+msgstr "Odstranit výběr"
#: tools/editor/animation_editor.cpp
msgid "Continuous"
-msgstr ""
+msgstr "Spojité"
#: tools/editor/animation_editor.cpp
msgid "Discrete"
-msgstr ""
+msgstr "Diskrétní"
#: tools/editor/animation_editor.cpp
msgid "Trigger"
-msgstr ""
+msgstr "Spoušť"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr ""
+msgstr "Animace: přidat klíč"
#: tools/editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr ""
+msgstr "Animace: přesunout klíče"
#: tools/editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr ""
+msgstr "Změnit měřítko výběru"
#: tools/editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr ""
+msgstr "Změnit měřítko od kurzoru"
#: tools/editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr ""
+msgstr "Jít k dalšímu kroku"
#: tools/editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr ""
+msgstr "Jít k předchozímu kroku"
#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
msgid "Linear"
-msgstr ""
+msgstr "Lineární"
#: tools/editor/animation_editor.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Constant"
-msgstr ""
+msgstr "Konstantní"
#: tools/editor/animation_editor.cpp
msgid "In"
-msgstr ""
+msgstr "In"
#: tools/editor/animation_editor.cpp
msgid "Out"
-msgstr ""
+msgstr "Out"
#: tools/editor/animation_editor.cpp
msgid "In-Out"
-msgstr ""
+msgstr "In-Out"
#: tools/editor/animation_editor.cpp
msgid "Out-In"
-msgstr ""
+msgstr "Out-In"
#: tools/editor/animation_editor.cpp
msgid "Transitions"
-msgstr ""
+msgstr "Přechody"
#: tools/editor/animation_editor.cpp
msgid "Optimize Animation"
-msgstr ""
+msgstr "Optimalizovat animaci"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr ""
+msgstr "Pročistit animaci"
#: tools/editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "Vytvořit NOVOU stopu pro %s a vložit klíč?"
#: tools/editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "Vytvořit %d NOVÝCH stop a vložit klíče?"
#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -907,27 +952,27 @@ msgstr ""
#: tools/editor/plugins/particles_editor_plugin.cpp
#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
msgid "Create"
-msgstr ""
+msgstr "Vytvořit"
#: tools/editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "Animace: Vytvořit a vložit"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "Animace: Vložit stopu a klíč"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr ""
+msgstr "Animace: vložit klíč"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr ""
+msgstr "Změnit délku animace"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr ""
+msgstr "Změnit opakování animace"
#: tools/editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
@@ -935,95 +980,95 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "Animace: vložit"
#: tools/editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr ""
+msgstr "Animace: změnit měřítko klíčů"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr ""
+msgstr "Animace: přidat stopu volání"
#: tools/editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr ""
+msgstr "Přiblížení animace."
#: tools/editor/animation_editor.cpp
msgid "Length (s):"
-msgstr ""
+msgstr "Délka (s):"
#: tools/editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr ""
+msgstr "Délka animace (v sekundách)."
#: tools/editor/animation_editor.cpp
msgid "Step (s):"
-msgstr ""
+msgstr "Krok (s):"
#: tools/editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr ""
+msgstr "Krokování kurzoru (v sekundách)."
#: tools/editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr ""
+msgstr "Zapnout/vypnout opakování animace."
#: tools/editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr ""
+msgstr "Přidat nové stopy."
#: tools/editor/animation_editor.cpp
msgid "Move current track up."
-msgstr ""
+msgstr "Posunout aktuální stopu nahoru."
#: tools/editor/animation_editor.cpp
msgid "Move current track down."
-msgstr ""
+msgstr "Posunout aktuální stopu dolů."
#: tools/editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr ""
+msgstr "Odstranit vybranou stopu."
#: tools/editor/animation_editor.cpp
msgid "Track tools"
-msgstr ""
+msgstr "Nástroje stopy"
#: tools/editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr ""
+msgstr "Kliknutím na klíče zapnete jejich individuální úpravu."
#: tools/editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr ""
+msgstr "Optimalizátor animace"
#: tools/editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr ""
+msgstr "Maximální lineární chyba:"
#: tools/editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr ""
+msgstr "Maximální úhlová chyba:"
#: tools/editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr ""
+msgstr "Maximální optimalizovatelný úhel:"
#: tools/editor/animation_editor.cpp
msgid "Optimize"
-msgstr ""
+msgstr "Optimalizuj"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr ""
+msgstr "Pro úpravu animací vyberte ze stromu scény uzel AnimationPlayer."
#: tools/editor/animation_editor.cpp
msgid "Key"
-msgstr ""
+msgstr "Klíč"
#: tools/editor/animation_editor.cpp
msgid "Transition"
-msgstr ""
+msgstr "Přechod"
#: tools/editor/animation_editor.cpp
msgid "Scale Ratio:"
@@ -1031,11 +1076,11 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr ""
+msgstr "Ze kterého uzlu volej funkce?"
#: tools/editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr ""
+msgstr "Odstranit neplatné klíče"
#: tools/editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
@@ -1043,131 +1088,132 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr ""
+msgstr "Pročistit všechny animace"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr ""
+msgstr "Pročistit animaci (NELZE VZÍT ZPĚT!)"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "Pročistit"
#: tools/editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr ""
+msgstr "Změnit velikost pole"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr ""
+msgstr "Změnit typ hodnot pole"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr ""
+msgstr "Změnit hodnotu pole"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
-msgstr ""
+msgstr "Hledat:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Sort:"
-msgstr ""
+msgstr "Řadit:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Reverse"
-msgstr ""
+msgstr "Naopak"
#: tools/editor/asset_library_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Category:"
-msgstr ""
+msgstr "Kategorie:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "All"
-msgstr ""
+msgstr "Všechny"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Site:"
-msgstr ""
+msgstr "Web:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Support.."
-msgstr ""
+msgstr "Podpora.."
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Official"
-msgstr ""
+msgstr "Oficiální"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr ""
+msgstr "Z komunity"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr ""
+msgstr "Testované"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr ""
+msgstr "ZIP soubor asetů"
#: tools/editor/call_dialog.cpp
msgid "Method List For '%s':"
-msgstr ""
+msgstr "Seznam metod '%s':"
#: tools/editor/call_dialog.cpp
msgid "Call"
-msgstr ""
+msgstr "Volat"
#: tools/editor/call_dialog.cpp
msgid "Method List:"
-msgstr ""
+msgstr "Seznam metod:"
#: tools/editor/call_dialog.cpp
msgid "Arguments:"
-msgstr ""
+msgstr "Argumenty:"
#: tools/editor/call_dialog.cpp
msgid "Return:"
-msgstr ""
+msgstr "Vrátit:"
#: tools/editor/code_editor.cpp
msgid "Go to Line"
-msgstr ""
+msgstr "Běž na řádek"
#: tools/editor/code_editor.cpp
msgid "Line Number:"
-msgstr ""
+msgstr "Číslo řádku:"
#: tools/editor/code_editor.cpp
msgid "No Matches"
-msgstr ""
+msgstr "Žádné shody"
#: tools/editor/code_editor.cpp
msgid "Replaced %d Ocurrence(s)."
-msgstr ""
+msgstr "Nahrazeno %d výskytů."
#: tools/editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "Nahradit"
#: tools/editor/code_editor.cpp
msgid "Replace All"
-msgstr ""
+msgstr "Nahradit všechny"
#: tools/editor/code_editor.cpp
msgid "Match Case"
-msgstr ""
+msgstr "Rozlišovat malá/velká"
#: tools/editor/code_editor.cpp
msgid "Whole Words"
-msgstr ""
+msgstr "Celá slova"
#: tools/editor/code_editor.cpp
msgid "Selection Only"
-msgstr ""
+msgstr "Pouze výběr"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
#: tools/editor/plugins/script_editor_plugin.cpp
@@ -1175,27 +1221,27 @@ msgstr ""
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Search"
-msgstr ""
+msgstr "Hledat"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
msgid "Find"
-msgstr ""
+msgstr "Najít"
#: tools/editor/code_editor.cpp
msgid "Next"
-msgstr ""
+msgstr "Další"
#: tools/editor/code_editor.cpp
msgid "Replaced %d ocurrence(s)."
-msgstr ""
+msgstr "Nahrazeno %d výskytů."
#: tools/editor/code_editor.cpp
msgid "Not found!"
-msgstr ""
+msgstr "Nenalezeno!"
#: tools/editor/code_editor.cpp
msgid "Replace By"
-msgstr ""
+msgstr "Nahradit"
#: tools/editor/code_editor.cpp
msgid "Case Sensitive"
@@ -1207,41 +1253,41 @@ msgstr ""
#: tools/editor/code_editor.cpp
msgid "Prompt On Replace"
-msgstr ""
+msgstr "Potvrzovat nahrazení"
#: tools/editor/code_editor.cpp
msgid "Skip"
-msgstr ""
+msgstr "Přeskočit"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "Přiblížit"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "Oddálit"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Obnovit původní přiblížení"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr ""
+msgstr "Řádek:"
#: tools/editor/code_editor.cpp
msgid "Col:"
-msgstr ""
+msgstr "Sloupec:"
#: tools/editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr ""
+msgstr "Je nutné zadat metodu v cílovém uzlu!"
#: tools/editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr ""
+msgstr "Připojit k uzlu:"
#: tools/editor/connections_dialog.cpp
#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
@@ -1249,129 +1295,139 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Add"
-msgstr ""
+msgstr "Přidat"
#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Remove"
-msgstr ""
+msgstr "Odebrat"
#: tools/editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr ""
+msgstr "Přidat další argument volání:"
#: tools/editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr ""
+msgstr "Další argumenty volání:"
#: tools/editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr ""
+msgstr "Cesta k uzlu:"
#: tools/editor/connections_dialog.cpp
msgid "Make Function"
-msgstr ""
+msgstr "Vytvořit funkci"
#: tools/editor/connections_dialog.cpp
msgid "Deferred"
-msgstr ""
+msgstr "Odloženě"
#: tools/editor/connections_dialog.cpp
msgid "Oneshot"
-msgstr ""
+msgstr "Jednorázově"
#: tools/editor/connections_dialog.cpp
msgid "Connect"
-msgstr ""
+msgstr "Připojit"
#: tools/editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr ""
+msgstr "Připojit '%s' k '%s'"
#: tools/editor/connections_dialog.cpp
msgid "Connecting Signal:"
-msgstr ""
+msgstr "Připojuji signál:"
#: tools/editor/connections_dialog.cpp
msgid "Create Subscription"
-msgstr ""
+msgstr "Vytvořit odběr"
#: tools/editor/connections_dialog.cpp
msgid "Connect.."
-msgstr ""
+msgstr "Připojit.."
#: tools/editor/connections_dialog.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Disconnect"
-msgstr ""
+msgstr "Odpojit"
#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "Signály"
#: tools/editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "Vytvořit nový"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
+msgstr "Shody:"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
msgstr ""
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr ""
+msgstr "Hledat náhradu za:"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies For:"
-msgstr ""
+msgstr "Závislosti na:"
#: tools/editor/dependency_editor.cpp
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
msgstr ""
+"Scéna '%s' se právě upravuje.\n"
+"Změny se projeví po opětovném načtení."
#: tools/editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will take effect when reloaded."
msgstr ""
+"Zdroj '%s' se právě používá.\n"
+"Změny se projeví po opětovném načtení."
#: tools/editor/dependency_editor.cpp
msgid "Dependencies"
-msgstr ""
+msgstr "Závislosti"
#: tools/editor/dependency_editor.cpp
msgid "Resource"
-msgstr ""
+msgstr "Zdroj"
#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp
#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
msgid "Path"
-msgstr ""
+msgstr "Cesta"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies:"
-msgstr ""
+msgstr "Závislosti:"
#: tools/editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr ""
+msgstr "Opravit nefunkční"
#: tools/editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr ""
+msgstr "Editor závislostí"
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "Hledat náhradní zdroj:"
#: tools/editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "Vlastníci:"
#: tools/editor/dependency_editor.cpp
msgid ""
@@ -1379,42 +1435,44 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
+"Soubory ke smazání potřebují jiné zdroje ke své činnosti.\n"
+"Přesto je chcete smazat? (nelze vrátit zpět)"
#: tools/editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "Odebrat vybrané soubory z projektu? (nelze vrátit zpět)"
#: tools/editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr ""
+msgstr "Chyba při načítání:"
#: tools/editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "Scénu se nepodařilo načíst kvůli chybějícím závislostem:"
#: tools/editor/dependency_editor.cpp
msgid "Open Anyway"
-msgstr ""
+msgstr "Přesto otevřít"
#: tools/editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr ""
+msgstr "Jaká akce by se měla provést?"
#: tools/editor/dependency_editor.cpp
msgid "Fix Dependencies"
-msgstr ""
+msgstr "Opravit závislosti"
#: tools/editor/dependency_editor.cpp
msgid "Errors loading!"
-msgstr ""
+msgstr "Chyby při načítání!"
#: tools/editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "Permanentně smazat %d položek? (nelze vrátit zpět!)"
#: tools/editor/dependency_editor.cpp
msgid "Owns"
-msgstr ""
+msgstr "Vlastní"
#: tools/editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
@@ -1422,62 +1480,64 @@ msgstr ""
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "Průzkumník sirotků zdrojů"
#: tools/editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr ""
+msgstr "Odstranit vybrané soubory?"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
#: tools/editor/plugins/item_list_editor_plugin.cpp
#: tools/editor/scene_tree_dock.cpp
msgid "Delete"
-msgstr ""
+msgstr "Odstranit"
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr ""
+msgstr "Neplatný název."
#: tools/editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr ""
+msgstr "Platné znaky:"
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing engine class name."
-msgstr ""
+msgstr "Neplatný název. Nesmí kolidovat s existující názvem třídy enginu."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
msgstr ""
+"Neplatný název. Nesmí kolidovat s existujícím jménem zabudovaného typu."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
+"Neplatný název. Nesmí kolidovat s existujícím názvem globální konstanty."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid Path."
-msgstr ""
+msgstr "Neplatná cesta."
#: tools/editor/editor_autoload_settings.cpp
msgid "File does not exist."
-msgstr ""
+msgstr "Soubor neexistuje."
#: tools/editor/editor_autoload_settings.cpp
msgid "Not in resource path."
-msgstr ""
+msgstr "Není v cestě ke zdroji."
#: tools/editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "Přidat AutoLoad"
#: tools/editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Autoload '%s' už existuje!"
#: tools/editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "Přejmenovat AutoLoad"
#: tools/editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
@@ -1635,10 +1695,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5999,6 +6055,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Přidat vlastnost setter"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Vybrat vše"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/da.po b/tools/translations/da.po
new file mode 100644
index 0000000000..640babcf07
--- /dev/null
+++ b/tools/translations/da.po
@@ -0,0 +1,6596 @@
+# Danish translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+#
+# David Lamhauge <davidlamhauge@gmail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2016-08-27 07:06+0000\n"
+"Last-Translator: David Lamhauge <davidlamhauge@gmail.com>\n"
+"Language-Team: Danish <https://hosted.weblate.org/projects/godot-engine/"
+"godot/da/>\n"
+"Language: da\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.8-dev\n"
+
+#: modules/gdscript/gd_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr "Ugyldigt type argument til convert(), brug TYPE_* konstanter."
+
+#: modules/gdscript/gd_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr "Ikke nok bytes til afkodning af bytes, eller ugyldigt format."
+
+#: modules/gdscript/gd_functions.cpp
+msgid "step argument is zero!"
+msgstr "trin argument er nul!"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not a script with an instance"
+msgstr "Ikke et script med en instans"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not based on a script"
+msgstr "Ikke baseret på et script"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not based on a resource file"
+msgstr "Ikke baseret på en ressource fil"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr "Ugyldig instans ordbogs format (mangler @path)"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr "Ugyldig instans ordbogs format (kan ikke indlæse script ved @path)"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr "Ugyldig forekomst ordbog format (ugyldigt script på @path)"
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr "Ugyldig forekomst ordbog (ugyldige underklasser)"
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+"En node yielded uden arbejdshukommelse, læs venligst dokumenterne for at se "
+"hvordan man yielder rigtigt!"
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+"Node givet, men returnerede ikke en funktion tilstand i den første "
+"arbejdshukommelse."
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+"Returværdien skal tildeles første element af nodens arbejdshukommelse! Fix "
+"din node venligst."
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr "Node returnerede en ugyldig sekvens output: "
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr "Fundet sekvens bit men ikke noden i stakken, reporter bug!"
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr "Stakoverløb med stak dybde: "
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr "Funktioner:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr "Variable:"
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr "Signaler:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr "Navnet er ikke et gyldigt id:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr "Navnet allerede bruges af en anden func/var/signal:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr "Omdøb Funktion"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr "Omdøbe variablen"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr "Omdøb Signal"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr "Tilføj Funktion"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr "Tilføj variabel"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr "Tilføj Signal"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr "Fjern Funktion"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr "Fjern Variabel"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr "Redigerer Variabel:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr "Fjern Signal"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr "Redigerer Signal:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr "Tilføj Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Tilføj Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Tilføj Node(r) fra Tree"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Tilføj Getter Egenskab"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Tilføj Setter Egenskab"
+
+#: modules/visual_script/visual_script_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr "Rediger"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr "Basis Type:"
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr "Medlemmer:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr "Tilgængelige Noder:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr "Vælg eller Opret en funktion til at redigere graf"
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr "Luk"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr "Rediger Signal argumenter:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr "Rediger Variabel:"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr "Skift"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr "Slet Valgte"
+
+#: modules/visual_script/visual_script_editor.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr "Skift/Toggle Breakpoint"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "Find Node Type"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Sti til Node:"
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr "Input type ikke iterabel: "
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr "Iterator blev ugyldig"
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr "Iterator blev ugyldig: "
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr "Ugyldigt index egenskabsnavn."
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr "Base-objekt er ikke en Node!"
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr "Stien fører ikke til Node!"
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr "Ugyldigt indeks egenskabsnavn '%s' i noden %s."
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ": Ugyldigt argument af typen: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ": Ugyldige argumenter: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr "VariableGet blev ikke fundet i scriptet: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr "VariableSet blev ikke fundet i scriptet: "
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+"Brugerdefinerede node har ingen _step() metode, kan ikke behandle graf."
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+"Ugyldig retur værdi fra _step(), skal være heltal (seq ud), eller en streng "
+"(fejl)."
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+"En SpriteFrames ressource skal oprettes eller angives i egenskaben 'Frames' "
+"for at AnimatedSprite kan vise frames."
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+"Kun et synligt CanvasModulate er tilladt pr. scene (eller et sæt af "
+"instanserede scener). Den første vil blive brugt, mens resten vil blive "
+"ignoreret."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon2D tjener kun til at give en kollisionsfigur til et "
+"CollisionObject2D afledte node. Du skal kun bruge det som et barn af Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. til at give dem en form."
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr "En tom CollisionPolygon2D har ingen effekt på kollision."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+"CollisionShape2D tjener kun til at give en kollision figur til en "
+"CollisionObject2D afledte node. Du skal kun bruge det som et barn af Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. til at give dem en form."
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"En figur skal gives CollisionShape2D for at det fungerer. Opret venligst en "
+"figur ressource for den!"
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr "En tekstur med formen på lyset skal gives til egenskaben 'teksture'."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+"En occluder polygon skal angives (eller tegnes) for at denne occluder træder "
+"i kraft."
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr "Occluder polygon for denne occluder er tom. Tegn venligst en polygon!"
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+"En NavigationPolygon ressource skal sættes eller laves for at denne node kan "
+"virke. Sæt venligst en egenskab eller tegn en polygon."
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+"NavigationPolygonInstance skal være et barn eller barnebarn til en "
+"Navigation2D node. Det giver kun navigationsdata."
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+"ParallaxLayer node virker kun, når den angives som barn af en "
+"ParallaxBackground node."
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr "Egenskaben Path skal pege på en gyldig Particles2D node for at virke."
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+"PathFollow2D virker kun, når den angives som et barn af en Path2D node."
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr "Egenskaben Path skal pege på en gyldig Node2D node for at virke."
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+"En SampleLibrary ressource skal oprettes eller angives i egenskaben "
+"'samples' for at SamplePlayer kan afspille lyd."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport "
+"must be set to 'render target' mode."
+msgstr ""
+"Egenskaben Path skal pege på en gyldig Viewport node for at virke. Sådan en "
+"Viewport skal indstilles til 'render target' tilstand."
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in "
+"order for this sprite to work."
+msgstr ""
+"Viewport angivet i egenskaben path skal indstilles som 'render target' for "
+"at denne sprite kan virke."
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+"VisibilityEnable2D fungerer bedst, når det bruges med den redigerede "
+"scenerod direkte som parent."
+
+#: scene/3d/baked_light_instance.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr "BakedLightInstance indeholder ikke en BakedLight ressource."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionShape tjener kun til at give en kollision figur til en "
+"CollisionObject afledte node. Du skal kun bruge det som et barn af Area, "
+"StaticBody, RigidBody, KinematicBody, etc. til at give dem en form."
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+"En figur skal gives for at CollisionShape fungerer. Opret en figur ressource "
+"til det!"
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+"CollisionPolygon tjener kun til at give en kollision figur til en "
+"CollisionObject afledte node. Du skal kun bruge det som et barn af Area, "
+"StaticBody, RigidBody, KinematicBody, etc. til at give dem en form."
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr "En tom CollisionPolygon har ingen effekt på kollision."
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+"En NavigationMesh ressource skal laves eller oprettes for at denne node kan "
+"fungere."
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+"NavigationMeshInstance skal være et barn eller barnebarn til en Navigation "
+"node. Det giver kun navigationsdata."
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+"Kun én WorldEnvironment er tilladt pr. scene (eller et sæt af instanserede "
+"scener)."
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+"En SampleLibrary ressource skal oprettes eller angives i egenskaben "
+"'samples' for at SpatialSamplePlayer kan afspille lyd."
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+"En SpriteFrames ressource skal oprettes eller angivets i egenskaben 'Frames' "
+"for at AnimatedSprite3D kan vise frames."
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr "Annuller"
+
+#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp
+msgid "OK"
+msgstr "Ok"
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr "Advarsel!"
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr "Bekræft venligst..."
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr "Filen findes, overskrives?"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr "Alle Genkendte"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr "Alle filer (*)"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/filesystem_dock.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+msgid "Open"
+msgstr "Åben"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr "Åben en Fil"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr "Åben fil(er)"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr "Åbn en mappe"
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr "Åbne en fil eller mappe"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr "Gem"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr "Gem en fil"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr "Opret mappe"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr "Sti:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr "Mapper & filer:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr "Fil:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr "Filter:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr "Navn:"
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr "Kunne ikke oprette mappe."
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr "Skal bruge en gyldig udvidelse."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr "Shift+"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr "Alt +"
+
+#: scene/gui/input_action.cpp
+msgid "Ctrl+"
+msgstr "CTRL +"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Meta+"
+msgstr "Meta +"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Device"
+msgstr "Enhed"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Button"
+msgstr "Knap"
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr "Venstre knap."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr "Højre knap."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr "Midterste knap."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr "Hjulet op."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr "Hjulet ned."
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr "Akse"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr "Cut"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr "Kopier"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr "Indsæt"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "Select All"
+msgstr "Vælg alle"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr "Clear"
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr "Fortryd"
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+"Popups er skjulte som standard, medmindre du kalder popup() eller nogen af "
+"popup*() funktionerne. At gøre dem synlige for redigering er fint, men de "
+"bliver skjult under afvikling."
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+"Denne viewport er ikke angivet som render target. Hvis du har tænkt dig for "
+"at vise dens indhold direkte til skærmen, gør det til et barn af Control, så "
+"den kan opnå en størrelse. Ellers gør den til en RenderTarget og tildel dens "
+"indre textur til en node så den kan vises."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr "Fejl under initialisering af FreeType."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr "Ukendt skrifttypeformat."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr "Error loading skrifttype."
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr "Ugyldig skriftstørrelse."
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr "Deaktiveret"
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr "All selection"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr "Flyt Add Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr "Anim Skift Overgang"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr "Anim Skift transformering"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr "Anim Skift værdi"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr "Anim Skift Call"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr "Anim tilføj spor"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr "Anim Dubliker Keys"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr "Flyt Anim spor op"
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr "Flyt Anim spor ned"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr "Fjern Anim spor"
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr "Sæt overgange til:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr "Anim spor Omdøb"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr "Anim spor Skift Interpolation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr "Anim spor Skift værdi Mode"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr "Redigere Node kurve"
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr "Rediger udvalg kurve"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr "Anim slet Keys"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr "Dubler valg"
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr "Duplicate transposed"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr "Fjern markering"
+
+#: tools/editor/animation_editor.cpp
+msgid "Continuous"
+msgstr "Kontinuerlig"
+
+#: tools/editor/animation_editor.cpp
+msgid "Discrete"
+msgstr "Diskret"
+
+#: tools/editor/animation_editor.cpp
+msgid "Trigger"
+msgstr "Udløser"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr "Anim Tilføj Key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr "Anim Flyt Keys"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr "Skalering Valg"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr "Skaler fra Cursor"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr "Goto næste skridt"
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr "Goto forrige trin"
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr "Lineær"
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr "Konstant"
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr "I"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr "Ud"
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr "Ind-Ud"
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr "Out-in"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr "Overgange"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr "Optimer Animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr "Clean-up Animation"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr "Oprette nye spor til %s og indsætte key?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr "Oprette %d nye numre og indsætte nøgler?"
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr "Opret"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr "Anim opret & indsæt"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr "Anim Indsæt spor & key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr "Anim Indsæt key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr "Ændre Anim Len"
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr "Ændre Anim løkke"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr "Anim opret indtastet Value key"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr "Anim Indsæt"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr "Anim Skaler keys"
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr "Anim tilføj Call Track"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr "Animation Zoom."
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr "Længde (s):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr "Animation Længde (i sekunder)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr "Trin (s):"
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr "Cursor trin snap (i sekunder)."
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr "Aktiver/Deaktiver løkker i animation."
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr "Tilføje nye tracks."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr "Flyt aktuelle spor op."
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr "Flyt aktuelle spor ned."
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr "Fjern markerede spor."
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr "Spor værktøjer"
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr "Aktivere redigering af individuelle keys ved at klikke på dem."
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr "Anim. optimizer"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr "Max. Lineær fejl:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr "Max. Azimutal fejl:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr "Max optimerbar vinkel:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr "Optimer"
+
+#: tools/editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr "Vælg en AnimationPlayer fra Scene Tree for at redigere animationer."
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr "Key/Nøgle"
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr "Overgang"
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr "Skala forholdet:"
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr "Kald funktioner i hvilken Node?"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr "Fjerne ugyldige keys"
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr "Fjerne uløste og tomme spor"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr "Clean-up alle animationer"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr "Clean-Up Animation(-er) (ingen FORTRYD!)"
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr "Clean-up"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr "Ændre størrelsen på Array"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr "Skift Array værditype"
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr "Ændre Array-værdi"
+
+#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr "Søgning:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr "Sorter:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr "Omvendt"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr "Kategori:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr "Alle"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr "Websted:"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr "Støtte..."
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr "Officiel"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr "Fællesskabet"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr "Tester"
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr "Assets zipfil"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr "Metode liste For '%s':"
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr "Kald"
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr "Metode liste:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr "Argumenter:"
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr "Tilbage:"
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr "Gå til linje"
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr "Linjenummer:"
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr "Ingen Match"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr "Erstattede %d tilfælde."
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr "Erstat"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr "Erstat alle"
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr "Match stor/lille"
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr "Hele ord"
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr "Kun Valgte"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr "Søg"
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr "Find"
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr "Næste"
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr "Erstattede %d tilfælde."
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr "Ikke fundet!"
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr "Erstattes af"
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr "Baglæns"
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr "Spørg ved Erstat"
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr "Spring over"
+
+#: tools/editor/code_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr "Zoom ind"
+
+#: tools/editor/code_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr "Zoom ud"
+
+#: tools/editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr "Nulstil Zoom"
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr "Linje:"
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr "Kol:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr "Metode i target Node skal angives!"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr "Opret forbindelse til Node:"
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr "Tilføj"
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr "Fjern"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr "Tilføje ekstra Call Argument:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr "Ekstra call argumenter:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr "Sti til Node:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr "Lav funktion"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr "Udskudt"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr "OneShot"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr "Tilslut"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr "Tilslut '%s' til '%s'"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr "Forbindelses signal:"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr "Opret abonnement"
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr "Forbind..."
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr "Afbryd"
+
+#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp
+msgid "Signals"
+msgstr "Signaler"
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr "Opret en ny"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr "Matches:"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr "Søg erstatning For:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr "Afhængigheder For:"
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+"Scene '%s' er i øjeblikket ved at blive redigeret.\n"
+"Ændringer træder ikke i kraft, medmindre reloaded."
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+"Ressource '%s' er i brug.\n"
+"Ændringer træder i kraft når genindlæses."
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr "Afhængigheder"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr "Ressource"
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Path"
+msgstr "Sti"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr "Afhængigheder:"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr "Fix brudt"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr "Afhængigheds Editor"
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/filesystem_dock.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Name"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr ""
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr ""
+
+#: tools/editor/editor_log.cpp
+msgid " Output:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in later in \"Project Settings\" under the "
+"'application' category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Fullscreen Mode"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Filter Files.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Can't operate on '..'"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "No files selected!"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Rename or Move.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Info"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Re-Import.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "No bit masks to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "Import BitMasks"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "Bit Mask"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"Invalid file extension.\n"
+"Please use .fnt."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr ""
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Node"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr ""
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr ""
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "File"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr ""
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Manager"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Tilføj Setter Egenskab"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Vælg alle"
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create a new script for the selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
+
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "Brugerdefineret node har ingen _get_output_port_unsequenced(idx,wmem), "
+#~ "men unsequenced porte blev angivet."
diff --git a/tools/translations/de.po b/tools/translations/de.po
index b4393682e6..4b1fb9d166 100644
--- a/tools/translations/de.po
+++ b/tools/translations/de.po
@@ -2,12 +2,14 @@
# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
# This file is distributed under the same license as the Godot source code.
#
+# Alexander Mahr <alex.mahr@gmail.com>, 2016.
# Andreas Esau <andreasesau@gmail.com>, 2016.
# Andreas Haas <liu.gam3@gmail.com>, 2016.
# Andreas Hirschauer <andreas@hirschauer-it.de>, 2016.
# Christian Fisch <christian.fiesel@gmail.com>, 2016.
# danjo <atze@libra.uberspace.de>, 2016.
# hyperglow <greensoma@web.de>, 2016.
+# Jan Groß <jan@grossit.de>, 2016.
# Oliver Ruehl <oliver@ruehldesign.co>, 2016.
# Paul-Vincent Roll <paviro@me.com>, 2016.
# Peter Friedland <peter_friedland@gmx.de>, 2016.
@@ -19,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-08-10 13:41+0000\n"
+"PO-Revision-Date: 2016-08-31 15:37+0000\n"
"Last-Translator: So Wieso <sowieso@dukun.de>\n"
"Language-Team: German <https://hosted.weblate.org/projects/godot-engine/"
"godot/de/>\n"
@@ -28,7 +30,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.8-dev\n"
+"X-Generator: Weblate 2.8\n"
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -39,11 +41,12 @@ msgstr ""
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr "Nicht genügend Speicher zum Byte-Dekodieren oder ungültiges Format."
+msgstr ""
+"Nicht genügend Bytes zum dekodieren des Byte-Strings, oder ungültiges Format."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
-msgstr "Parameter step ist null!"
+msgstr "Schrittargument ist null!"
#: modules/gdscript/gd_functions.cpp
msgid "Not a script with an instance"
@@ -51,11 +54,11 @@ msgstr "Skript hat keine Instanz"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a script"
-msgstr "Basiert nicht auf einem Skript"
+msgstr "Nicht auf einem Skript basierend"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a resource file"
-msgstr "Basiert nicht auf einer Ressource-Datei"
+msgstr "Nicht auf einer Resourcendatei basierend"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
@@ -80,40 +83,46 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Ein Node wurde übergeben ohne nötigen Speicher bereitzustellen, korrektes "
+"Vorgehen wird in der Dokumentation beschrieben (Stichwort ‚yield‘)!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"Node wurde übergeben, gab aber keinen Funktionszustand am Anfang des Node-"
+"Speichers zurück."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"Zurückgegebener Wert muss dem ersten Element im Node-Speicher zugewiesen "
+"sein! Bitte entsprechendes Node anpassen."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Node gab ungültige Sequenzausgabe zurück: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
+"Sequenzbit gefunden aber kein entsprechendes Node auf dem Stack, bitte "
+"melden Sie den Bug!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Stack-Overflow mit Stack-Tiefe: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Funktion:"
+msgstr "Funktionen:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Variable"
+msgstr "Variablen:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -121,86 +130,102 @@ msgstr "Signale:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Name ist kein gültiger Bezeichner:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Name wird schon von anderer Funktion, Variablen oder Signal verwendet:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Erstelle Funktion"
+msgstr "Funktion umbenennen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Sample umbenennen"
+msgstr "Variable umbenennen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Sample umbenennen"
+msgstr "Signal umbenennen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Funktion:"
+msgstr "Funktion hinzufügen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Variable"
+msgstr "Variable hinzufügen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Signale"
+msgstr "Signal hinzufügen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Auswahl entfernen"
+msgstr "Funktion entfernen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Variable"
+msgstr "Variable entfernen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Variable"
+msgstr "bearbeite Variable:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Auswahl entfernen"
+msgstr "Signal entfernen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Verbinde Signal:"
+msgstr "bearbeite Signal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "Node"
+msgstr "Node hinzufügen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
-msgid "Add Node(s) From Tree"
-msgstr "Node aus Szene"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Meta to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Node hier anhängen"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Node(s) aus Szenenbaum hinzufügen"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Getter-Eigenschaft hinzufügen"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Setter-Eigenschaft hinzufügen"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -210,9 +235,8 @@ msgid "Edit"
msgstr "Bearbeiten"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "Typ:"
+msgstr "Basistyp:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
@@ -220,11 +244,12 @@ msgstr "Mitglieder:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "Verfügbare Nodes:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
msgstr ""
+"Zum bearbeiten des Graphen muss eine Funktion ausgewählt oder erstellt weden"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -240,104 +265,110 @@ msgid "Close"
msgstr "Schließen"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "zusätzliche Aufrufparameter:"
+msgstr "Signalparameter bearbeiten:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Variable"
+msgstr "Variable bearbeiten:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Änderungen aktualisieren"
+msgstr "Ändern"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Ausgewählten Dateien löschen?"
+msgstr "Ausgewähltes löschen"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
-msgstr "Setze Haltepunkt"
+msgstr "Haltepunkt umschalten"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Finde Nächstes"
+msgid "Find Node Type"
+msgstr "Finde Node-Typ"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Pose kopieren"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Erzeuge Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Pose einfügen"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "Eingabetyp nicht iterierbar: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "Iterator wurde ungültig"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "Iterator wurde ungültig: "
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Invalid index property name."
-msgstr "Ungültiger Name."
+msgstr "Ungültiger Name der Index-Eigenschaft."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "Basis-Objekt ist kein Node!"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "Pfad ist nicht lokal"
+msgstr "Pfad führt nicht zu einem Node!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Ungültiger Indexeigenschaftsname ‚%s‘ in Node %s."
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ""
+msgstr ": Ungültiger Parameter vom Typ: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Ungültiger Name."
+msgstr ": Ungültige Parameter: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet nicht im Skript gefunden: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet nicht im Skript gefunden: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
+"Eigens erstelltes Node hat keine _step()-Methode, Graph kann nicht "
+"verarbeitet werden."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"Ungültiger Rückgabewert von _step(), muss Integer (für Sequenzausgabe) oder "
+"String (für Fehler) sein."
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
"order for AnimatedSprite to display frames."
msgstr ""
-"Eine SpriteFrames Ressource muss in der 'Frames' Variable erstellt oder "
+"Eine SpriteFrames-Ressource muss in der ‚Frames‘-Eigenschaft erstellt oder "
"gesetzt werden, damit AnimatedSprite Einzelbilder darstellen kann."
#: scene/2d/canvas_modulate.cpp
@@ -345,9 +376,9 @@ msgid ""
"Only one visible CanvasModulate is allowed per scene (or set of instanced "
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
-"Nur ein sichtbares CanvasModulate ist pro Szene (oder ein Satz von "
-"instanzierten Szenen) erlaubt. Das zuerst erstellte wird funktionieren, "
-"während der Rest ignoriert wird."
+"Nur ein sichtbares CanvasModulate-Node ist pro Szene (oder einem Satz von "
+"instantiierten Szenen) erlaubt. Der zuerst erstellte wird verwendet, der "
+"Rest wird ignoriert."
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -355,10 +386,10 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionPolygon2D dient nur dazu, einem CollisionObject2D abgeleiteten "
-"Knoten eine Form bereitzustellen. Bitte verwenden Sie es nur als Unterobjekt "
-"von Area2D, StaticBody2D, RigidBody2D, KinematicBody2D usw. um ihnen eine "
-"Form zu geben."
+"CollisionPolygon2D liefert nur eine Kollisionsform für ein von "
+"CollisionObject2D abgeleitetes Node. Es kann nur als Unterobjekt von Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D usw. eingehängt werden um diesen "
+"eine Form zu geben."
#: scene/2d/collision_polygon_2d.cpp
msgid "An empty CollisionPolygon2D has no effect on collision."
@@ -370,9 +401,10 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
-"CollisionShape2D definiert eine Kollisionsmaske für von CollisionObject2D "
-"abgeleitete Nodes. Benutze es mit Area2D, StaticBody2D, RigidBody2D, "
-"KinematicBody2D usw. um eine Form zu definieren."
+"CollisionShape2D liefert nur eine Kollisionsform für ein von "
+"CollisionObject2D abgeleitetes Node. Es kann nur als Unterobjekt von Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D usw. eingehängt werden um diesen "
+"eine Form zu geben."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -387,7 +419,7 @@ msgid ""
"A texture with the shape of the light must be supplied to the 'texture' "
"property."
msgstr ""
-"Eine Textur mit der Form des Lichtkegels muss in der Eigenschaft 'texture' "
+"Eine Textur mit der Form des Lichtkegels muss in der ‚Texture‘-Eigenschaft "
"angegeben werden."
#: scene/2d/light_occluder_2d.cpp
@@ -400,16 +432,15 @@ msgstr ""
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
msgstr ""
-"Das Occluder Polygon für diesen Occlluder ist leer. Bitte zeichne ein "
-"Polygon!"
+"Das Occluder-Polygon für diesen Occluder ist leer. Bitte zeichne ein Polygon!"
#: scene/2d/navigation_polygon.cpp
msgid ""
"A NavigationPolygon resource must be set or created for this node to work. "
"Please set a property or draw a polygon."
msgstr ""
-"Eine NavigationPolygon Ressource muss für diesen Node gesetzt oder erstellt "
-"werden, damit er funktioniert. Bitte setze eine Variable oder zeichne ein "
+"Eine NavigationPolygon-Ressource muss für dieses Node erstellt oder ihm "
+"zugewiesen. Bitte trage die entsprechende Eigenschaft ein oder zeichne ein "
"Polygon."
#: scene/2d/navigation_polygon.cpp
@@ -417,30 +448,31 @@ msgid ""
"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
"node. It only provides navigation data."
msgstr ""
-"NavigationPolygonInstance muss ein Unterobjekt erster oder zweiter Ordnung "
-"unterhalb einer Navigation2D Node sein. Es liefert nur Navigationsdaten."
+"Eine NavigationPolygon-Instanz muss ein Unterobjekt erster oder zweiter "
+"Ordnung unterhalb eines Navigation2D-Node sein. Sie liefert nur "
+"Navigationsdaten."
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
-"Die ParallaxLayer Node funktioniert nur als Unterobjekt einer "
-"ParallaxBackground Node."
+"Das ParallaxLayer-Node lässt sich nur als Unterobjekt eines "
+"ParallaxBackground-Node verwenden."
#: scene/2d/particles_2d.cpp
msgid "Path property must point to a valid Particles2D node to work."
-msgstr "Die Pfad-Variable muss auf einen gültigen Particles2D Node verweisen."
+msgstr "Die Pfad-Eigenschaft muss auf ein gültiges Particles2D-Node verweisen."
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
msgstr ""
-"PathFollow2D funktioniert nur, wenn sie als Unterobjekt eines Path2D Nodes "
+"PathFollow2D funktioniert nur, wenn es als Unterobjekt eines Path2D-Nodes "
"gesetzt wird."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
-"Die Pfad-Variable muss auf einen gültigen Node2D Node zeigen um zu "
+"Die Pfad-Eigenschaft muss auf ein gültiges Node2D-Node zeigen um zu "
"funktionieren."
#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
@@ -448,8 +480,8 @@ msgid ""
"A SampleLibrary resource must be created or set in the 'samples' property in "
"order for SamplePlayer to play sound."
msgstr ""
-"Eine SampleLibrary Ressource muss in der 'samples' Variable erzeugt oder "
-"definiert werden, damit SamplePlayer einen Sound abspielen kann."
+"Eine SampleLibrary-Ressource muss unter der Eigenschaft ‚Samples‘ erzeugt "
+"oder ausgewählt werden, damit SamplePlayer Ton abspielen kann."
#: scene/2d/sprite.cpp
msgid ""
@@ -464,8 +496,8 @@ msgid ""
"The Viewport set in the path property must be set as 'render target' in "
"order for this sprite to work."
msgstr ""
-"Der Viewport der in der Pfad-Variable gesetzt wurde, muss als 'render "
-"target' definiert werden, damit das Sprite funktioniert."
+"Der Viewport, der in der Pfad-Eigenschaft gesetzt wurde, muss als ‚Render "
+"Target‘ definiert sein, damit das Sprite funktioniert."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
@@ -473,7 +505,7 @@ msgid ""
"as parent."
msgstr ""
"VisibilityEnable2D funktioniert am besten, wenn es ein Unterobjekt erster "
-"Ordnung der bearbeiteten Hauptszene ist."
+"Ordnung der bearbeiteten Szene ist."
#: scene/3d/baked_light_instance.cpp
msgid "BakedLightInstance does not contain a BakedLight resource."
@@ -485,10 +517,9 @@ msgid ""
"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
"KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionShape dient nur dazu einer dem CollisionObject abgeleiteten Node "
-"eine Kollisionsform bereitzustellen. Bitte nutze es nur als ein Unterobjekt "
-"von Area, StaticBody, RigidBody, KinematicBody usw. um diesem eine Form zu "
-"geben."
+"CollisionShape liefert nur eine Kollisionsform für ein von CollisionObject "
+"abgeleitetes Node. Es kann nur als Unterobjekt von Area, StaticBody, "
+"RigidBody, KinematicBody usw. eingehängt werden um diesen eine Form zu geben."
#: scene/3d/body_shape.cpp
msgid ""
@@ -504,10 +535,9 @@ msgid ""
"CollisionObject derived node. Please only use it as a child of Area, "
"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
-"CollisionPolygon liefert nur eine Kollisionsform für eine vom "
-"CollisionObject abgeleiteten Node. Bitte nutze es nur als eine Unterobjekt "
-"von Area, StaticBody, RigidBody, KinematicBody, usw. um diesen eine Form zu "
-"geben."
+"CollisionPolygon liefert nur eine Kollisionsform für ein von CollisionObject "
+"abgeleitetes Node. Es kann nur als Unterobjekt von Area, StaticBody, "
+"RigidBody, KinematicBody usw. eingehängt werden um diesen eine Form zu geben."
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
@@ -524,30 +554,31 @@ msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
-"NavigationMeshinstance muss ein Unterobjekt oder Unterunterobjekt von einem "
-"Navigations Node sein. Es liefert nur Navigationsdaten."
+"Eine NavigationMesh-Instanz muss ein Unterobjekt erster oder höherer Ordnung "
+"eines Navigation-Nodes sein. Es liefert nur Navigationsdaten."
#: scene/3d/scenario_fx.cpp
msgid ""
"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
msgstr ""
-"Nur ein WorldEnvironment pro Szene oder (instanzierter Szene) ist erlaubt."
+"Pro Szene (oder einem Satz von instanzierten Szenen) ist nur ein einziges "
+"WorldEnvironment erlaubt."
#: scene/3d/spatial_sample_player.cpp
msgid ""
"A SampleLibrary resource must be created or set in the 'samples' property in "
"order for SpatialSamplePlayer to play sound."
msgstr ""
-"Eine SampleLibrary Ressource muss in der 'samples' Eigenschaft erzeugt oder "
-"definiert werden damit SpatialSamplePlayer einen Sound abspielen kann."
+"Eine SampleLibrary-Ressource muss unter der ‚Samples‘-Eigenschaft erzeugt "
+"oder ausgewählt werden, damit SpatialSamplePlayer Ton abspielen kann."
#: scene/3d/sprite_3d.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
-"Eine SpriteFrames Ressource muss in der Eigenschaft 'Frames' erzeugt oder "
-"definiert werden, damit AnimatedSprite3D Frames anzeigen kann."
+"Eine SpriteFrames-Ressource muss in der ‚Frames‘-Eigenschaft erzeugt oder "
+"definiert werden, damit AnimatedSprite3D Einzelbilder anzeigen kann."
#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Cancel"
@@ -571,7 +602,7 @@ msgstr "Datei existiert bereits. Überschreiben?"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Recognized"
-msgstr "Alle bekannten Dateien"
+msgstr "Alle bekannte Dateitypen"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Files (*)"
@@ -580,7 +611,8 @@ msgstr "Alle Dateien (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Öffnen"
@@ -654,7 +686,7 @@ msgstr "Eine gültige Datei-Endung muss verwendet werden."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Shift+"
-msgstr "Shift+"
+msgstr "Umschalt+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
@@ -663,7 +695,7 @@ msgstr "Alt+"
#: scene/gui/input_action.cpp
msgid "Ctrl+"
-msgstr "Ctrl+"
+msgstr "Strg+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
@@ -684,7 +716,7 @@ msgstr "Linke Taste."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Right Button."
-msgstr "Rechte Schaltfläche."
+msgstr "Rechte Taste."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Middle Button."
@@ -762,11 +794,11 @@ msgid ""
"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
"texture to some node for display."
msgstr ""
-"Dieser Viewport ist nicht als Render-Target gesetzt. Wenn Sie vor haben "
-"seinen Inhalt direkt auf dem Bildschirm anzuzeigen, machen Sie es zu einem "
-"Kind eines Control-Nodes, damit es eine Größe erben kann. Ansonsten setzen "
-"Sie es als Render-Target und weisen Sie der internen Textur einen Knoten zum "
-"Anzeigen zu."
+"Dieser Viewport ist nicht als Render-Ziel eingestellt. Soll sein Inhalt "
+"direkt auf dem Bildschirm angezeigt werden, muss er als Unterobjekt eines "
+"Controls eingehängt werden um dessen Größe zu erben. Andernfalls sollte die "
+"Eigenschaft ‚Render Target‘ des Viewports aktiviert und seine Textur "
+"irgendeinem Node zum Anzeigen zugewiesen werden."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -854,11 +886,11 @@ msgstr "Anim Spur ändere Wert Modus"
#: tools/editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr "Node Kurve editieren"
+msgstr "Node Kurve bearbeiten"
#: tools/editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr "Selektions-Kurve editieren"
+msgstr "Selektions-Kurve bearbeiten"
#: tools/editor/animation_editor.cpp
msgid "Anim Delete Keys"
@@ -895,15 +927,15 @@ msgstr "Anim Schlüsselszene hinzufügen"
#: tools/editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr "Animation Bewegungstasten"
+msgstr "Schlüsselbilder bewegen"
#: tools/editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr "Skalierung Auswahl"
+msgstr "Auswahl skalieren"
#: tools/editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr "Skalierung vom Cursor"
+msgstr "Vom Cursor skalieren"
#: tools/editor/animation_editor.cpp
msgid "Goto Next Step"
@@ -952,11 +984,11 @@ msgstr "Animation aufräumen"
#: tools/editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr "Erstelle einen NEUEN Track für %s und füge einen Key ein?"
+msgstr "Erstelle eine NEUE Spur für %s und füge ein Schlüsselbild hinzu?"
#: tools/editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr "Erstelle %d NEUE Tracks und füge Keys ein?"
+msgstr "Erstelle %d NEUE Spuren und füge Schlüsselbilder hinzu?"
#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -973,11 +1005,11 @@ msgstr "Animation Erstellen & Einfügen"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr "Animation Track & Key Einfügen"
+msgstr "Spur & Schlüsselbild einfügen"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr "Animation Key Einfügen"
+msgstr "Schlüsselbild einfügen"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Len"
@@ -997,11 +1029,11 @@ msgstr "Anim einfügen"
#: tools/editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr "Animation Skaliere Keys"
+msgstr "Skaliere Schlüsselbilder"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr "Animation Call Track Einfügen"
+msgstr "Aufruf-Spur zu Animation hinzufügen"
#: tools/editor/animation_editor.cpp
msgid "Animation zoom."
@@ -1049,8 +1081,7 @@ msgstr "Spur-Werkzeuge"
#: tools/editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr ""
-"Aktiviere das editieren von individuellen Keys in dem auf sie geclickt wird."
+msgstr "Aktiviere individuelle Schlüsselbildbearbeitung durch Anklicken."
#: tools/editor/animation_editor.cpp
msgid "Anim. Optimizer"
@@ -1075,6 +1106,7 @@ msgstr "Optimieren"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
+"Wähle einen AnimationPlayer aus dem Szenenbaum um Animationen zu bearbeiten."
#: tools/editor/animation_editor.cpp
msgid "Key"
@@ -1114,19 +1146,20 @@ msgstr "Aufräumen"
#: tools/editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr "Größe des Feldes ändern"
+msgstr "Größe des Arrays ändern"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr "Ändere Array Wert Typ"
+msgstr "Wertetyp des Arrays ändern"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr "Ändere Array Wert"
+msgstr "Array-Wert ändern"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Suche:"
@@ -1162,15 +1195,15 @@ msgstr "Offiziell"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr "Community"
+msgstr "Gemeinschaft"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr "Testen"
+msgstr "Testphase"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr "ZIP Datei der Projektdaten"
+msgstr "Projektdaten als ZIP-Datei"
#: tools/editor/call_dialog.cpp
msgid "Method List For '%s':"
@@ -1206,7 +1239,7 @@ msgstr "Keine Übereinstimmungen"
#: tools/editor/code_editor.cpp
msgid "Replaced %d Ocurrence(s)."
-msgstr "%d mal wurde das Vorkommen ersetzt."
+msgstr "Suchbegriff wurde %d mal ersetzt."
#: tools/editor/code_editor.cpp
msgid "Replace"
@@ -1246,7 +1279,7 @@ msgstr "Nächste"
#: tools/editor/code_editor.cpp
msgid "Replaced %d ocurrence(s)."
-msgstr "%d mal wurde das Vorkommen ersetzt."
+msgstr "Suchbegriff wurde %d mal ersetzt."
#: tools/editor/code_editor.cpp
msgid "Not found!"
@@ -1284,7 +1317,7 @@ msgstr "Verkleinern"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Vergrößerung zurücksetzen"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1300,7 +1333,7 @@ msgstr "Methode in Ziel-Node muss angegeben werden!"
#: tools/editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr "Verbinden mit Node:"
+msgstr "Verbinde mit Node:"
#: tools/editor/connections_dialog.cpp
#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
@@ -1327,15 +1360,15 @@ msgstr "zusätzliche Aufrufparameter:"
#: tools/editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr "Pfad zur Node:"
+msgstr "Pfad zu Node:"
#: tools/editor/connections_dialog.cpp
msgid "Make Function"
-msgstr "Erstelle Funktion"
+msgstr "Funktion erstellen"
#: tools/editor/connections_dialog.cpp
msgid "Deferred"
-msgstr "Ausgesetzt"
+msgstr "Verzögert"
#: tools/editor/connections_dialog.cpp
msgid "Oneshot"
@@ -1375,10 +1408,16 @@ msgid "Create New"
msgstr "Neu erstellen"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Treffer:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Beschreibung:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Suche Ersatz für:"
@@ -1401,7 +1440,7 @@ msgid ""
"Changes will take effect when reloaded."
msgstr ""
"Ressource '%s' wird momentan benutzt.\n"
-"Änderungen werden erst nach neu laden aktiv."
+"Änderungen werden erst dann aktiv, nachdem neu geladen wurde."
#: tools/editor/dependency_editor.cpp
msgid "Dependencies"
@@ -1422,15 +1461,15 @@ msgstr "Abhängigkeiten:"
#: tools/editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr "Repariere Nichtfunktionierende"
+msgstr "Defekte reparieren"
#: tools/editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr "Abhängigkeiten-Editor"
+msgstr "Abhängigkeiteneditor"
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr "Suche Ersetzbare Ressource:"
+msgstr "Ersatz-Ressource suchen:"
#: tools/editor/dependency_editor.cpp
msgid "Owners Of:"
@@ -1480,19 +1519,19 @@ msgstr "Entferne %d Datei(en) dauerhaft? (Nicht Wiederherstellbar)"
#: tools/editor/dependency_editor.cpp
msgid "Owns"
-msgstr "Gehört zu"
+msgstr "Besitzt"
#: tools/editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr "Ressource Ohne Direkte Zugehörigkeit:"
+msgstr "Ressource ohne direkte Zugehörigkeit:"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr "Ressourcen Explorer Für Verwaiste Dateien"
+msgstr "Ressourcenauflistung verwaister Dateien"
#: tools/editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr "Ausgewählten Dateien löschen?"
+msgstr "Ausgewählte Dateien löschen?"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
@@ -1552,7 +1591,6 @@ msgid "Rename Autoload"
msgstr "Autoload umbenennen"
#: tools/editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Toggle AutoLoad Globals"
msgstr "Autoload-Globals umschalten"
@@ -1589,7 +1627,7 @@ msgstr "Singleton"
#: tools/editor/editor_autoload_settings.cpp
msgid "List:"
-msgstr ""
+msgstr "Liste:"
#: tools/editor/editor_data.cpp
msgid "Updating Scene"
@@ -1625,7 +1663,7 @@ msgstr "Hoch"
#: tools/editor/editor_file_dialog.cpp
msgid "Refresh"
-msgstr "Neu laden"
+msgstr "Aktualisieren"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
@@ -1640,17 +1678,16 @@ msgid "Toggle Mode"
msgstr "Modus umschalten"
#: tools/editor/editor_file_dialog.cpp
-#, fuzzy
msgid "Focus Path"
msgstr "Zu Pfad springen"
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr "Favoriten nach oben schieben"
+msgstr "Favorit nach oben schieben"
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr "Favoriten nach unten schieben"
+msgstr "Favorit nach unten schieben"
#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
msgid "Favorites:"
@@ -1666,7 +1703,7 @@ msgstr "Vorschau:"
#: tools/editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr "Scanne Quellen"
+msgstr "Lese Quellen"
#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
@@ -1699,20 +1736,16 @@ msgstr "Kurze Beschreibung:"
#: tools/editor/editor_help.cpp
msgid "Public Methods:"
-msgstr "Public Methoden:"
+msgstr "Öffentliche Methoden:"
#: tools/editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr "GUI Theme Einträge:"
+msgstr "GUI-Theme-Elemente:"
#: tools/editor/editor_help.cpp
msgid "Constants:"
msgstr "Konstanten:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Beschreibung:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Methoden Beschreibung:"
@@ -1759,7 +1792,7 @@ msgstr " Ausgabe:"
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Importing"
-msgstr "Re-Import"
+msgstr "Importiere erneut"
#: tools/editor/editor_node.cpp
msgid "Importing:"
@@ -1787,7 +1820,7 @@ msgstr "Verstehe..."
#: tools/editor/editor_node.cpp
msgid "Can't open file for writing:"
-msgstr "Kann Datei zum schreiben nicht öffnen:"
+msgstr "Datei kann nicht zum schreiben geöffnet werden:"
#: tools/editor/editor_node.cpp
msgid "Requested file format unknown:"
@@ -1813,8 +1846,8 @@ msgstr "Erzeuge Miniaturansicht"
msgid ""
"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
msgstr ""
-"Szene konnte nicht gespeichert werden. Wahrscheinliche Abhängigkeiten "
-"(Instanzen) sind nicht erfüllt."
+"Szene konnte nicht gespeichert werden. Wahrscheinlich werden Abhängigkeiten "
+"(Instanzen) nicht erfüllt."
#: tools/editor/editor_node.cpp
msgid "Failed to load resource."
@@ -1822,7 +1855,7 @@ msgstr "Laden der Ressource gescheitert."
#: tools/editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
-msgstr "MeshLibrary zum vereinen konnte nicht geladen werden!"
+msgstr "MeshLibrary konnte nicht zum vereinen geladen werden!"
#: tools/editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
@@ -1830,7 +1863,7 @@ msgstr "Fehler beim speichern der MeshLibrary!"
#: tools/editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
-msgstr "TileSet zum vereinen kann nicht geladen werden!"
+msgstr "TileSet konnte nicht zum vereinen geladen werden!"
#: tools/editor/editor_node.cpp
msgid "Error saving TileSet!"
@@ -1838,11 +1871,11 @@ msgstr "Fehler beim speichern des TileSet!"
#: tools/editor/editor_node.cpp
msgid "Can't open export templates zip."
-msgstr "\"Export Templates Zip\" kann nicht geöffnet werden."
+msgstr "Exportvorlagen-ZIP-Datei konnte nicht geöffnet werden."
#: tools/editor/editor_node.cpp
msgid "Loading Export Templates"
-msgstr "Lade Export Templates"
+msgstr "Lade Exportvorlagen"
#: tools/editor/editor_node.cpp
msgid "Error trying to save layout!"
@@ -1850,7 +1883,7 @@ msgstr "Fehler beim speichern des Layouts!"
#: tools/editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr "Standard Editor Layout überschrieben."
+msgstr "Standard-Editorlayout überschrieben."
#: tools/editor/editor_node.cpp
msgid "Layout name not found!"
@@ -1858,24 +1891,24 @@ msgstr "Layout Name nicht gefunden!"
#: tools/editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr "Layout zu Standard Einstellungen zurückgesetzt."
+msgstr "Layout wurde auf die Standardeinstellungen zurückgesetzt."
#: tools/editor/editor_node.cpp
msgid "Copy Params"
-msgstr "Parameter Kopieren"
+msgstr "Parameter kopieren"
#: tools/editor/editor_node.cpp
msgid "Paste Params"
-msgstr "Parameter Einfügen"
+msgstr "Parameter einfügen"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Paste Resource"
-msgstr "Ressource Einfügen"
+msgstr "Ressource einfügen"
#: tools/editor/editor_node.cpp
msgid "Copy Resource"
-msgstr "Ressource Kopieren"
+msgstr "Ressource kopieren"
#: tools/editor/editor_node.cpp
msgid "Make Built-In"
@@ -1926,7 +1959,7 @@ msgstr ""
msgid "Current scene was never saved, please save it prior to running."
msgstr ""
"Die aktuelle Szene wurde noch nicht gespeichert, bitte speichere sie vor dem "
-"starten."
+"Starten."
#: tools/editor/editor_node.cpp
msgid "Could not start subprocess!"
@@ -1934,19 +1967,19 @@ msgstr "Unterprozess konnte nicht gestartet werden!"
#: tools/editor/editor_node.cpp
msgid "Open Scene"
-msgstr "Szene Öffnen"
+msgstr "Szene öffnen"
#: tools/editor/editor_node.cpp
msgid "Open Base Scene"
-msgstr "Basis Szene Öffnen"
+msgstr "Basisszene öffnen"
#: tools/editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr "Schnelles Szenen Öffnen.."
+msgstr "Schnell Szenen öffnen.."
#: tools/editor/editor_node.cpp
msgid "Quick Open Script.."
-msgstr "Schnelles Script Öffnen.."
+msgstr "Schnell Skripte öffnen.."
#: tools/editor/editor_node.cpp
msgid "Yes"
@@ -1958,11 +1991,11 @@ msgstr "Szene schließen? (Nicht gespeicherte Änderungen gehen verloren)"
#: tools/editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr "Szene Speichern Als.."
+msgstr "Szene speichern als.."
#: tools/editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
-msgstr "Diese Szene wurde nie gespeichert. Speichern vor dem starten?"
+msgstr "Diese Szene wurde nie gespeichert. Speichern vorm Starten?"
#: tools/editor/editor_node.cpp
msgid "Please save the scene first."
@@ -1970,15 +2003,15 @@ msgstr "Bitte speichere die Szene zuerst."
#: tools/editor/editor_node.cpp
msgid "Save Translatable Strings"
-msgstr "Speichere Übersetzbare Zeichen"
+msgstr "Speichere übersetzbare Zeichenketten"
#: tools/editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr "Mesh Library exportieren"
+msgstr "MeshLibrary exportieren"
#: tools/editor/editor_node.cpp
msgid "Export Tile Set"
-msgstr "Tile Set Exportieren"
+msgstr "Tileset exportieren"
#: tools/editor/editor_node.cpp
msgid "Quit"
@@ -1995,7 +2028,7 @@ msgstr "Die aktuelle Szene ist nicht gespeichert. Trotzdem öffnen?"
#: tools/editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
msgstr ""
-"Szene kann nicht neu geladen werden wenn sie vorher nicht gespeichert wurde."
+"Szene kann nicht neu geladen werden, wenn sie vorher nicht gespeichert wurde."
#: tools/editor/editor_node.cpp
msgid "Revert"
@@ -2008,15 +2041,15 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr "Szene Schnell Starten.."
+msgstr "Schnell Szene starten.."
#: tools/editor/editor_node.cpp
msgid ""
"Open Project Manager? \n"
"(Unsaved changes will be lost)"
msgstr ""
-"Projektmanager Öffnen?\n"
-"(Nichtgespeicherte Änderungen gehen verloren)"
+"Projektverwaltung öffnen?\n"
+"(Nicht gespeicherte Änderungen gehen verloren)"
#: tools/editor/editor_node.cpp
msgid "Pick a Main Scene"
@@ -2031,9 +2064,9 @@ msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
-"Fehler beim laden der Szene, sie muss innerhalb des Projekt Pfades liegen. "
-"Nutze 'Import' um die Szene zu öffnen, dann speichere sie innherhalb des "
-"Projekt Pfades."
+"Fehler beim Laden der Szene. Sie muss innerhalb des Projektpfads liegen. Zum "
+"Beheben kann ‚Import→Szene‘ verwendet werden um sie zu öffnen. Danach sollte "
+"die Szene innerhalb des Projektpfades gespeichert werden."
#: tools/editor/editor_node.cpp
msgid "Error loading scene."
@@ -2041,15 +2074,15 @@ msgstr "Fehler beim laden der Szene."
#: tools/editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr "Szene '%s' hat ungelöste Abhängigkeiten:"
+msgstr "Szene '%s' hat defekte Abhängigkeiten:"
#: tools/editor/editor_node.cpp
msgid "Save Layout"
-msgstr "Layout Speichern"
+msgstr "Layout speichern"
#: tools/editor/editor_node.cpp
msgid "Delete Layout"
-msgstr "Layout Löschen"
+msgstr "Layout löschen"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Default"
@@ -2057,7 +2090,7 @@ msgstr "Standard"
#: tools/editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr "Wechsle Szenen Tab"
+msgstr "Szenentab wechseln"
#: tools/editor/editor_node.cpp
msgid "%d more file(s)"
@@ -2089,9 +2122,8 @@ msgid "Next tab"
msgstr "Nächster Tab"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Previous tab"
-msgstr "Voriger Tab"
+msgstr "Vorheriger Tab"
#: tools/editor/editor_node.cpp
msgid "Operations with scene files."
@@ -2103,15 +2135,15 @@ msgstr "Neue Szene"
#: tools/editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr "Neue vererbte Szene.."
+msgstr "Neue gererbte Szene.."
#: tools/editor/editor_node.cpp
msgid "Open Scene.."
-msgstr "Szene Öffnen.."
+msgstr "Szene öffnen.."
#: tools/editor/editor_node.cpp
msgid "Save Scene"
-msgstr "Szene Speichern"
+msgstr "Szene speichern"
#: tools/editor/editor_node.cpp
msgid "Save all Scenes"
@@ -2119,27 +2151,27 @@ msgstr "Alle Szenen speichern"
#: tools/editor/editor_node.cpp
msgid "Close Scene"
-msgstr "Szene Schliessen"
+msgstr "Szene schließen"
#: tools/editor/editor_node.cpp
msgid "Close Goto Prev. Scene"
-msgstr "Schließen Zu Vorh. Szene Gehen"
+msgstr "Schließen und zur letzten Szene wechseln"
#: tools/editor/editor_node.cpp
msgid "Open Recent"
-msgstr "Zuletzt benutzte Scenen"
+msgstr "Zuletzt benutzte Szenen"
#: tools/editor/editor_node.cpp
msgid "Quick Filter Files.."
-msgstr "Schnelle Filter Dateien.."
+msgstr "Schnell Dateien filtern.."
#: tools/editor/editor_node.cpp
msgid "Convert To.."
-msgstr "Umwandeln Zu.."
+msgstr "Umwandeln zu.."
#: tools/editor/editor_node.cpp
msgid "Translatable Strings.."
-msgstr "Übersetzbare Zeichen.."
+msgstr "Übersetzbare Textbausteine.."
#: tools/editor/editor_node.cpp
msgid "MeshLibrary.."
@@ -2156,7 +2188,7 @@ msgstr "Wiederherstellen"
#: tools/editor/editor_node.cpp
msgid "Run Script"
-msgstr "Script Starten"
+msgstr "Skript ausführen"
#: tools/editor/editor_node.cpp
msgid "Project Settings"
@@ -2164,15 +2196,15 @@ msgstr "Projekteinstellungen"
#: tools/editor/editor_node.cpp
msgid "Revert Scene"
-msgstr "Szene Zurücksetzen"
+msgstr "Szene zurücksetzen"
#: tools/editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr "Verlasse zu Projekt Liste"
+msgstr "Verlasse zur Projektverwaltung"
#: tools/editor/editor_node.cpp
msgid "Import assets to the project."
-msgstr "Importiere Assets zum Projekt."
+msgstr "Importiere Medieninhalte ins Projekt."
#: tools/editor/editor_node.cpp
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
@@ -2188,7 +2220,7 @@ msgstr "Import"
#: tools/editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr "Verschiedene Projekte oder Szenenweite Werkzeuge."
+msgstr "Sonstiges Projekt oder szenenübergreifende Werkzeuge."
#: tools/editor/editor_node.cpp
msgid "Tools"
@@ -2196,7 +2228,7 @@ msgstr "Werkzeuge"
#: tools/editor/editor_node.cpp
msgid "Export the project to many platforms."
-msgstr "Exportiere Projekt für viele Plattformen."
+msgstr "Exportiere das Projekt für viele Plattformen."
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Export"
@@ -2213,7 +2245,7 @@ msgstr "Abspielen"
#: tools/editor/editor_node.cpp
msgid "Pause the scene"
-msgstr "Pausiere die Szene"
+msgstr "Szene pausieren"
#: tools/editor/editor_node.cpp
msgid "Pause Scene"
@@ -2221,7 +2253,7 @@ msgstr "Szene pausieren"
#: tools/editor/editor_node.cpp
msgid "Stop the scene."
-msgstr "Stoppe die Szene."
+msgstr "Szene stoppen."
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
@@ -2230,7 +2262,7 @@ msgstr "Stop"
#: tools/editor/editor_node.cpp
msgid "Play the edited scene."
-msgstr "Spiele die editierte Szene."
+msgstr "Spiele die bearbeitete Szene."
#: tools/editor/editor_node.cpp
msgid "Play Scene"
@@ -2241,17 +2273,16 @@ msgid "Play custom scene"
msgstr "Spiele angepasste Szene"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Play Custom Scene"
msgstr "Spiele angepasste Szene"
#: tools/editor/editor_node.cpp
msgid "Debug options"
-msgstr "Debug Optionen"
+msgstr "Fehlerbehebungsoptionen"
#: tools/editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr "Mit Remote Debug starten"
+msgstr "Mit Fern-Fehlerbehebung starten"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2259,11 +2290,11 @@ msgid ""
"connect to the IP of this computer in order to be debugged."
msgstr ""
"Beim Exportieren oder Starten wird das Programm versuchen, sich mit der IP-"
-"Adresse dieses Computers zu verbinden, um debugged werden zu können."
+"Adresse dieses Computers zu verbinden, um Fehler beheben zu können."
#: tools/editor/editor_node.cpp
msgid "Small Deploy with Network FS"
-msgstr "Small Deploy mit Netzwerkdateisystem"
+msgstr "Kleine Programmdatei über ein Netzwerkdateisystem"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2307,7 +2338,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Sync Scene Changes"
-msgstr "Synchronisiere Szene Änderungen"
+msgstr "Szenenänderungen synchronisieren"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2318,12 +2349,12 @@ msgid ""
msgstr ""
"Wenn diese Option gewählt ist, werden jegliche Änderungen der Szene im "
"Editor im laufenden Spiel dargestellt.\n"
-"Wenn dies über die Remote Funktion genutzt wird ist es effizienter mit dem "
-"Netzwerk Dateisystem."
+"Sollte dies beim Abspielen auf externen Geräten genutzt werden, ist es am "
+"effizientesten das Netzwerk-Dateisystem zu nutzen."
#: tools/editor/editor_node.cpp
msgid "Sync Script Changes"
-msgstr "Synchronisiere Script Änderungen"
+msgstr "Skriptänderungen synchronisieren"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2332,10 +2363,10 @@ msgid ""
"When used remotely on a device, this is more efficient with network "
"filesystem."
msgstr ""
-"Wenn diese Option gewählt ist, wird jeglich gespeichertes Script während des "
-"laufenden Spiels neu geladen.\n"
-"Wenn dies über die Remote Funktion genutzt wird ist es effizienter mit dem "
-"Netzwerk Dateisystem."
+"Wenn diese Option gewählt ist, werden erneut gespeicherte Skripte während "
+"des laufenden Spiels neu geladen.\n"
+"Sollte dies beim Abspielen auf externen Geräten genutzt werden, ist es am "
+"effizientesten das Netzwerk-Dateisystem zu nutzen."
#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Settings"
@@ -2343,15 +2374,15 @@ msgstr "Einstellungen"
#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr "Editor-Einstellungen"
+msgstr "Editoreinstellungen"
#: tools/editor/editor_node.cpp
msgid "Editor Layout"
-msgstr "Editor Layout"
+msgstr "Editorlayout"
#: tools/editor/editor_node.cpp
msgid "Install Export Templates"
-msgstr "Export Templates installieren"
+msgstr "Exportvorlagen installieren"
#: tools/editor/editor_node.cpp
msgid "About"
@@ -2359,11 +2390,11 @@ msgstr "Über"
#: tools/editor/editor_node.cpp
msgid "Alerts when an external resource has changed."
-msgstr "Schlägt Alarm falls sich eine externe Ressource verändert hat."
+msgstr "Signalisiert, wenn sich eine externe Ressource verändert hat."
#: tools/editor/editor_node.cpp
msgid "Spins when the editor window repaints!"
-msgstr "Rotiert wenn das Editor Fenster neu gezeichnet wird!"
+msgstr "Dreht sich, wenn das Editorfenster neu gezeichnet wird!"
#: tools/editor/editor_node.cpp
msgid "Update Always"
@@ -2379,15 +2410,15 @@ msgstr "Inspektor"
#: tools/editor/editor_node.cpp
msgid "Create a new resource in memory and edit it."
-msgstr "Erstelle eine neue Ressource im Speicher und editiere sie."
+msgstr "Erstelle eine neue Ressource im Speicher und bearbeite sie."
#: tools/editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
-msgstr "Lade eine bestehende Ressource von der Festplatte und editiere sie."
+msgstr "Lade eine bestehende Ressource von der Festplatte und bearbeite sie."
#: tools/editor/editor_node.cpp
msgid "Save the currently edited resource."
-msgstr "Speichere die so eben editierte Ressource."
+msgstr "Speichere die so eben bearbeitete Ressource."
#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
@@ -2395,19 +2426,19 @@ msgstr "Speichern als.."
#: tools/editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr "Gehe zum vorherigen editierten Objekt im Verlauf."
+msgstr "Gehe zum vorherigen bearbeiteten Objekt im Verlauf."
#: tools/editor/editor_node.cpp
msgid "Go to the next edited object in history."
-msgstr "Gehe zum nächsten editierten Objekt im Verlauf."
+msgstr "Gehe zum nächsten bearbeiteten Objekt im Verlauf."
#: tools/editor/editor_node.cpp
msgid "History of recently edited objects."
-msgstr "Verlauf der zuletzt editierten Objekte."
+msgstr "Verlauf der zuletzt bearbeiteten Objekte."
#: tools/editor/editor_node.cpp
msgid "Object properties."
-msgstr "Objekt Eigenschaften."
+msgstr "Objekteigenschaften."
#: tools/editor/editor_node.cpp
msgid "FileSystem"
@@ -2419,7 +2450,7 @@ msgstr "Ausgabe"
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import"
-msgstr "Re-Import"
+msgstr "Neuimport"
#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
msgid "Update"
@@ -2427,7 +2458,7 @@ msgstr "Update"
#: tools/editor/editor_node.cpp
msgid "Thanks from the Godot community!"
-msgstr "Ein Dank von der Godot Community!"
+msgstr "Danke von der Godot-Gemeinschaft!"
#: tools/editor/editor_node.cpp
msgid "Thanks!"
@@ -2435,7 +2466,7 @@ msgstr "Danke!"
#: tools/editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr "Importiere Templates Aus ZIP Datei"
+msgstr "Vorlagen aus ZIP-Datei importieren"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Export Project"
@@ -2443,11 +2474,11 @@ msgstr "Projekt exportieren"
#: tools/editor/editor_node.cpp
msgid "Export Library"
-msgstr "Export Bibliothek"
+msgstr "Bibliothek exportieren"
#: tools/editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr "Vereine Mit Existierenden"
+msgstr "Mit existierendem vereinen"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Password:"
@@ -2455,15 +2486,15 @@ msgstr "Passwort:"
#: tools/editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr "Script Öffnen & Starten"
+msgstr "Skript öffnen und ausführen"
#: tools/editor/editor_node.cpp
msgid "Load Errors"
-msgstr "Lade Fehler"
+msgstr "Ladefehler"
#: tools/editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr "Installierte Plugins:"
+msgstr "Installierte Erweiterungen:"
#: tools/editor/editor_plugin_settings.cpp
msgid "Version:"
@@ -2479,15 +2510,15 @@ msgstr "Status:"
#: tools/editor/editor_profiler.cpp
msgid "Stop Profiling"
-msgstr "Profiling Stoppen"
+msgstr "Laufzeitanalyse beenden"
#: tools/editor/editor_profiler.cpp
msgid "Start Profiling"
-msgstr "Profiling Starten"
+msgstr "Laufzeitanalyse starten"
#: tools/editor/editor_profiler.cpp
msgid "Measure:"
-msgstr "Maße:"
+msgstr "Messung:"
#: tools/editor/editor_profiler.cpp
msgid "Frame Time (sec)"
@@ -2495,7 +2526,7 @@ msgstr "Bild Zeit (Sek)"
#: tools/editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr "Durchschnitts Zeit (Sek)"
+msgstr "Durchschnittszeit (Sek)"
#: tools/editor/editor_profiler.cpp
msgid "Frame %"
@@ -2523,7 +2554,7 @@ msgstr "Bild #:"
#: tools/editor/editor_reimport_dialog.cpp
msgid "Please wait for scan to complete."
-msgstr "Bitte warten bis der Scan abgeschlossen ist."
+msgstr "Bitte warten bis Operation abgeschlossen ist."
#: tools/editor/editor_reimport_dialog.cpp
msgid "Current scene must be saved to re-import."
@@ -2531,19 +2562,19 @@ msgstr "Aktuelle Szene muss gespeichert sein um sie erneut zu importieren."
#: tools/editor/editor_reimport_dialog.cpp
msgid "Save & Re-Import"
-msgstr "Speichern & erneut importieren"
+msgstr "Speichern & neu importieren"
#: tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import Changed Resources"
-msgstr "Veränderte Ressourcen Neu Importieren"
+msgstr "Veränderte Ressourcen neu importieren"
#: tools/editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr "Schreibe die Logik in die _run() Methode."
+msgstr "Spiellogik sollte mit der _run()-Methode beginnen."
#: tools/editor/editor_run_script.cpp
msgid "There is an edited scene already."
-msgstr "Es besteht eine editierte Szene bereits."
+msgstr "Es besteht bereits eine bearbeitete Szene."
#: tools/editor/editor_run_script.cpp
msgid "Couldn't instance script:"
@@ -2563,7 +2594,7 @@ msgstr "Hast du die '_run' Methode vergessen?"
#: tools/editor/editor_settings.cpp
msgid "Default (Same as Editor)"
-msgstr "Standard (Dasselbe wie der Editor)"
+msgstr "Standard (wie Editor)"
#: tools/editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
@@ -2571,53 +2602,53 @@ msgstr "Selektiere Node(s) für den Import"
#: tools/editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr "Szenen Pfad:"
+msgstr "Szenenpfad:"
#: tools/editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr "Importiere Aus Einem Node:"
+msgstr "Aus Node importieren:"
#: tools/editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
msgstr ""
-"fil_type_cache.cch kann nicht mit Schreibzugriff geöffnet werden, file type "
-"cache wird nicht gespeichert!"
+"Die Datei 'file_type_cache.cch' konnte nicht zum schreiben geöffnet werden. "
+"Der Dateityp-Cache wird nicht gespeichert!"
#: tools/editor/filesystem_dock.cpp
msgid "Same source and destination files, doing nothing."
-msgstr ""
+msgstr "Quell- und Zieldatei sind gleich, ignoriere Anweisung."
#: tools/editor/filesystem_dock.cpp
msgid "Same source and destination paths, doing nothing."
-msgstr ""
+msgstr "Quell- und Zielpfad sind gleich, ignoriere Anweisung."
#: tools/editor/filesystem_dock.cpp
msgid "Can't move directories to within themselves."
-msgstr ""
+msgstr "Verzeichnisse lassen sich nicht in sich selbst verschieben."
#: tools/editor/filesystem_dock.cpp
msgid "Can't operate on '..'"
-msgstr ""
+msgstr "Kann mit ‚..‘ nicht arbeiten"
#: tools/editor/filesystem_dock.cpp
msgid "Pick New Name and Location For:"
-msgstr ""
+msgstr "Wähle neuen Namen und Ort für:"
#: tools/editor/filesystem_dock.cpp
msgid "No files selected!"
-msgstr ""
+msgstr "Keine Dateien ausgewählt!"
#: tools/editor/filesystem_dock.cpp
msgid "Instance"
-msgstr ""
+msgstr "Instanz"
#: tools/editor/filesystem_dock.cpp
msgid "Edit Dependencies.."
-msgstr "Bearbeiten Abhängigkeiten.."
+msgstr "Abhängigkeiten bearbeiten.."
#: tools/editor/filesystem_dock.cpp
msgid "View Owners.."
-msgstr ""
+msgstr "Zeige Besitzer.."
#: tools/editor/filesystem_dock.cpp
msgid "Copy Path"
@@ -2625,11 +2656,11 @@ msgstr "Pfad kopieren"
#: tools/editor/filesystem_dock.cpp
msgid "Rename or Move.."
-msgstr ""
+msgstr "Umbenennen oder Verschieben.."
#: tools/editor/filesystem_dock.cpp
msgid "Move To.."
-msgstr ""
+msgstr "Verschiebe zu.."
#: tools/editor/filesystem_dock.cpp
msgid "Info"
@@ -2641,11 +2672,11 @@ msgstr "Zeige im Dateimanager"
#: tools/editor/filesystem_dock.cpp
msgid "Re-Import.."
-msgstr "Re-Import.."
+msgstr "Neuimport.."
#: tools/editor/filesystem_dock.cpp
msgid "Previous Directory"
-msgstr ""
+msgstr "Vorheriges Verzeichnis"
#: tools/editor/filesystem_dock.cpp
msgid "Next Directory"
@@ -2653,67 +2684,67 @@ msgstr "Nächstes Verzeichnis"
#: tools/editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr ""
+msgstr "Dateisystem erneut einlesen"
#: tools/editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
-msgstr ""
+msgstr "Favoriten-Verzeichnisstatus umschalten"
#: tools/editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
-msgstr ""
+msgstr "Instantiiere gewählte Szene(n) als Unterobjekt des ausgewählten Nodes."
#: tools/editor/filesystem_dock.cpp
msgid "Move"
-msgstr ""
+msgstr "Verschieben"
#: tools/editor/groups_editor.cpp
msgid "Add to Group"
-msgstr "Füge Gruppe hinzu"
+msgstr "Zu Gruppe hinzufügen"
#: tools/editor/groups_editor.cpp
msgid "Remove from Group"
-msgstr "Entferne aus Gruppe"
+msgstr "Aus Gruppe entfernen"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
msgid "No bit masks to import!"
-msgstr "Keine Bit Masken zu importieren!"
+msgstr "Keine Bitmasken zu importieren!"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Target path is empty."
-msgstr "Ziel Pfad ist leer."
+msgstr "Zielpfad ist leer."
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Target path must be a complete resource path."
-msgstr "Ziel Pfad muss ein kompletter Ressourcen Pfad sein."
+msgstr "Zielpfad muss ein kompletter Ressourcenpfad sein."
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Target path must exist."
-msgstr "Ziel Pfad muss existieren."
+msgstr "Zielpfad muss existieren."
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Save path is empty!"
-msgstr "Speicher Pfad ist leer!"
+msgstr "Speicherpfad ist leer!"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
msgid "Import BitMasks"
-msgstr "Importiere BitMasks"
+msgstr "BitMasks importieren"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture(s):"
-msgstr "Quell Textur(en):"
+msgstr "Quelltextur(en):"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
@@ -2722,7 +2753,7 @@ msgstr "Quell Textur(en):"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Target Path:"
-msgstr "Ziel Pfad:"
+msgstr "Zielpfad:"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -2735,15 +2766,15 @@ msgstr "Akzeptieren"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
msgid "Bit Mask"
-msgstr "Bit Maske"
+msgstr "Bitmaske"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "No source font file!"
-msgstr "Kein Quell Font gefunden!"
+msgstr "Keine Quellschriftart-Datei gefunden!"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "No target font resource!"
-msgstr "Keine Ziel Font Ressource!"
+msgstr "Keine Zielschriftart-Ressource!"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid ""
@@ -2755,23 +2786,23 @@ msgstr ""
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Can't load/process source font."
-msgstr "Quell Font kann nicht geladen/verarbeitet werden."
+msgstr "Quellschriftart kann nicht geladen/verarbeitet werden."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Couldn't save font."
-msgstr "Font konnte nicht gespeichert werden."
+msgstr "Schriftart konnte nicht gespeichert werden."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Source Font:"
-msgstr "Quell Font:"
+msgstr "Quellschriftart:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Source Font Size:"
-msgstr "Quell Font Größe:"
+msgstr "Quellschriftgröße:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Dest Resource:"
-msgstr "Ziel Ressource:"
+msgstr "Ziel-Ressource:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "The quick brown fox jumps over the lazy dog."
@@ -2790,28 +2821,28 @@ msgstr "Optionen:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Font Import"
-msgstr "Font Import"
+msgstr "Schriftart importieren"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid ""
"This file is already a Godot font file, please supply a BMFont type file "
"instead."
msgstr ""
-"Diese Datei ist bereits eine Godot Font Datei, bitte gib eine BMFont Datei "
-"anstelle an."
+"Diese Datei ist bereits eine Godot Schriftart. Bitte stattdessen eine Datei "
+"im BMFont-Format angeben."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Failed opening as BMFont file."
-msgstr "Öffnen der BMFont Datei fehlgeschlagen."
+msgstr "Öffnen der BMFont-Datei fehlgeschlagen."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Invalid font custom source."
-msgstr "Unzulässige eigene Font Ressource."
+msgstr "Eigene Schriftart-Quelle ist ungültig."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Font"
-msgstr "Schrift"
+msgstr "Schriftart"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "No meshes to import!"
@@ -2819,7 +2850,7 @@ msgstr "Keine Meshes zu importieren!"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "Single Mesh Import"
-msgstr "Einzel Mesh Import"
+msgstr "Einzelnes Mesh importieren"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "Source Mesh(es):"
@@ -2836,11 +2867,11 @@ msgstr "Oberfläche %d"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "No samples to import!"
-msgstr "Keine Beispiele zu importieren!"
+msgstr "Keine Samples zu importieren!"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Import Audio Samples"
-msgstr "Audio Samples Importieren"
+msgstr "Audio-Samples importieren"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Source Sample(s):"
@@ -2848,7 +2879,7 @@ msgstr "Quell Sample(s):"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Audio Sample"
-msgstr "Audio Sample"
+msgstr "Audio-Sample"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "New Clip"
@@ -2856,7 +2887,7 @@ msgstr "Neuer Clip"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Animation Options"
-msgstr "Animations Einstellungen"
+msgstr "Animationseinstellungen"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Flags"
@@ -2864,26 +2895,25 @@ msgstr "Flags"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Bake FPS:"
-msgstr "FPS Backen:"
+msgstr "FPS fixieren:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Optimizer"
-msgstr "Optimierer"
+msgstr "Optimierung"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Linear Error"
-msgstr "Lineare Fehlergrenze"
+msgstr "Obere lineare Fehlergrenze"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Angular Error"
-msgstr "Angulare Fehlergrenze"
+msgstr "Obere Winkelfehlergrenze"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Angle"
msgstr "Maximaler Winkel"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
-#, fuzzy
msgid "Clips"
msgstr "Ausschnitte"
@@ -2906,7 +2936,7 @@ msgstr "Filter"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Source path is empty."
-msgstr "Quell Pfad ist leer."
+msgstr "Quellpfad ist leer."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Couldn't load post-import script."
@@ -2914,7 +2944,7 @@ msgstr "Post-Import Skript konnte nicht geladen werden."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Invalid/broken script for post-import."
-msgstr "Fehlerhaftes Skript für Post-Import."
+msgstr "Ungültiges / Fehlerhaftes Skript für Post-Import."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Error importing scene."
@@ -2922,11 +2952,11 @@ msgstr "Fehler beim importieren der Szene."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import 3D Scene"
-msgstr "3D Szene Importieren"
+msgstr "3D-Szene importieren"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Source Scene:"
-msgstr "Quell Szene:"
+msgstr "Quellszene:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Same as Target Scene"
@@ -2938,7 +2968,7 @@ msgstr "Geteilt"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Target Texture Folder:"
-msgstr "Ziel Texturen Ordner:"
+msgstr "Ziel-Texturenordner:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Post-Process Script:"
@@ -2967,20 +2997,20 @@ msgstr "Importieren & Öffnen"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Edited scene has not been saved, open imported scene anyway?"
msgstr ""
-"Editierte Szene wurde nicht gespeichert, trotzdem importierte Szene öffnen?"
+"Bearbeitete Szene wurde nicht gespeichert, trotzdem importierte Szene öffnen?"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import Scene"
-msgstr "Szene Importieren"
+msgstr "Szene importieren"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Importing Scene.."
-msgstr "Szene Wird Importiert.."
+msgstr "Szene wird importiert.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Running Custom Script.."
-msgstr "Angepasstes Skript Wird Ausgeführt.."
+msgstr "Angepasstes Skript wird ausgeführt.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Couldn't load post-import script:"
@@ -2996,11 +3026,11 @@ msgstr "Fehler beim ausführen des Post-Import Skripts:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import Image:"
-msgstr "Bild Importieren:"
+msgstr "Bild importieren:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Can't import a file over itself:"
-msgstr "Es kann keine Datei in sich selbst importiert werden:"
+msgstr "Datei kann nicht in sich selbst importiert werden:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Couldn't localize path: %s (already local)"
@@ -3012,7 +3042,7 @@ msgstr "Speichere.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "3D Scene Animation"
-msgstr "3D Szenen Animation"
+msgstr "3D-Szenenanimation"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Uncompressed"
@@ -3020,11 +3050,11 @@ msgstr "Unkomprimiert"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Compress Lossless (PNG)"
-msgstr "Verlustfrei Komprimieren (PNG)"
+msgstr "Verlustfrei komprimieren (PNG)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Compress Lossy (WebP)"
-msgstr "Verlustbehaftet Komprimieren (WebP)"
+msgstr "Verlustbehaftet komprimieren (WebP)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Compress (VRAM)"
@@ -3032,15 +3062,15 @@ msgstr "Komprimieren (VRAM)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture Format"
-msgstr "Textur-Format"
+msgstr "Texturformat"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture Compression Quality (WebP):"
-msgstr "Textur Kompressions-Qualität (WebP):"
+msgstr "Texturkompressionsqualität (WebP):"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture Options"
-msgstr "Textur Einstellungen"
+msgstr "Textureinstellungen"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Please specify some files!"
@@ -3048,7 +3078,7 @@ msgstr "Bitte gib einige Dateien an!"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "At least one file needed for Atlas."
-msgstr "Es wird zumindest eine Datei für den Atlas gebraucht."
+msgstr "Es wird zumindest eine Datei für den Atlas benötigt."
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Error importing:"
@@ -3060,15 +3090,15 @@ msgstr "Es ist nur eine Datei für eine große Textur erforderlich."
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Max Texture Size:"
-msgstr "Maximale Textur Größe:"
+msgstr "Maximale Texturgröße:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for Atlas (2D)"
-msgstr "Importiere Texturen für Atlas (2D)"
+msgstr "Texturen für Atlas (2D) importieren"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Cell Size:"
-msgstr "Zell-Größe:"
+msgstr "Zellgröße:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Large Texture"
@@ -3076,31 +3106,31 @@ msgstr "Große Textur"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Large Textures (2D)"
-msgstr "Importiere Große Texturen (2D)"
+msgstr "Große Texturen (2D) importieren"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture"
-msgstr "Quell-Textur"
+msgstr "Quelltextur"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Base Atlas Texture"
-msgstr "Basis Atlas-Textur"
+msgstr "Basis-Atlastextur"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture(s)"
-msgstr "Quell-Textur(en)"
+msgstr "Quelltextur(en)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for 2D"
-msgstr "Importiere Texturen für 2D"
+msgstr "Texturen für 2D importieren"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for 3D"
-msgstr "Importiere Texturen für 3D"
+msgstr "Texturen für 3D importieren"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures"
-msgstr "Texturen Importieren"
+msgstr "Texturen importieren"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "2D Texture"
@@ -3112,7 +3142,7 @@ msgstr "3D-Textur"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Atlas Texture"
-msgstr "Atlas-Textur"
+msgstr "Atlastextur"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid ""
@@ -3124,7 +3154,7 @@ msgstr ""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Crop empty space."
-msgstr "Beschneide leere Bereiche."
+msgstr "Leere Bereiche beschneiden."
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture"
@@ -3132,11 +3162,11 @@ msgstr "Textur"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Large Texture"
-msgstr "Große Textur Importieren"
+msgstr "Große Textur importieren"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Load Source Image"
-msgstr "Quell-Bild Laden"
+msgstr "Quellbild laden"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Slicing"
@@ -3156,7 +3186,7 @@ msgstr "Große Textur konnte nicht gespeichert werden:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Build Atlas For:"
-msgstr "Baue Atlas Für:"
+msgstr "Erstelle Atlas für:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Loading Image:"
@@ -3175,9 +3205,8 @@ msgid "Cropping Images"
msgstr "Bilder werden beschnitten"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
-#, fuzzy
msgid "Blitting Images"
-msgstr "Blitting der Bilder"
+msgstr "Blitting Bilder"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Couldn't save atlas image:"
@@ -3193,7 +3222,7 @@ msgstr "Fehlerhafte Quelle!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Invalid translation source!"
-msgstr "Fehlerhafte Übersetzungs-Quelle!"
+msgstr "Fehlerhafte Übersetzungsquelle!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Column"
@@ -3206,15 +3235,15 @@ msgstr "Sprache"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "No items to import!"
-msgstr "Keine Inhalte zu importieren!"
+msgstr "Keine Elemente zu importieren!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "No target path!"
-msgstr "Kein Ziel-Pfad!"
+msgstr "Kein Zielpfad!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Translations"
-msgstr "Übersetzungen Importieren"
+msgstr "Übersetzungen importieren"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Couldn't import!"
@@ -3222,7 +3251,7 @@ msgstr "Konnte nicht importiert werden!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Translation"
-msgstr "Übersetzung Importieren"
+msgstr "Übersetzung importieren"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Source CSV:"
@@ -3230,7 +3259,7 @@ msgstr "Quell-CSV:"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Ignore First Row"
-msgstr "Ignoriere Erste Zeile"
+msgstr "Erste Zeile ignorieren"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Compress"
@@ -3242,7 +3271,7 @@ msgstr "Zu Projekt hinzufügen (engine.cfg)"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Languages:"
-msgstr "Sprachen Importieren:"
+msgstr "Sprachen importieren:"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Translation"
@@ -3250,7 +3279,7 @@ msgstr "Übersetzung"
#: tools/editor/multi_node_edit.cpp
msgid "MultiNode Set"
-msgstr "MultiNode Setzen"
+msgstr "MultiNode setzen"
#: tools/editor/node_dock.cpp
msgid "Node"
@@ -3262,15 +3291,15 @@ msgstr "Gruppen"
#: tools/editor/node_dock.cpp
msgid "Select a Node to edit Signals and Groups."
-msgstr "Selektiere ein Node um Signale und Gruppen zu editieren."
+msgstr "Wähle ein Node um Signale und Gruppen zu bearbeiten."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr "Autoplay Umschalten"
+msgstr "Automatisches Abspielen umschalten"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr "Neuer Animations-Name:"
+msgstr "Neuer Animationsname:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
@@ -3278,46 +3307,47 @@ msgstr "Neue Animation"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr "Ändere Animations-Name:"
+msgstr "Animationsname ändern:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr "Animation Entfernen"
+msgstr "Animation entfernen"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr "FEHLER: Fehlerhafter Animations-Name!"
+msgstr "FEHLER: ungültiger Animationsname!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr "Fehler: Animations-Name existiert bereits!"
+msgstr "FEHLER: Animationsname existiert bereits!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr "Animation Umbenennen"
+msgstr "Animation umbenennen"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr "Animation Hinzufügen"
+msgstr "Animation hinzufügen"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
msgid "Blend Next Changed"
-msgstr "Überblende Nächsten Geänderten"
+msgstr "Überblende nächste Bearbeitung"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr "Blend-Zeit Ändern"
+msgstr "Überblendungszeit ändern"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr "Animation Laden"
+msgstr "Animation laden"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr "Animation Duplizieren"
+msgstr "Animation duplizieren"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
@@ -3333,11 +3363,11 @@ msgstr "Eingefügte Animation"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr "Animation Einfügen"
+msgstr "Animation einfügen"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr "FEHLER: Keine Animation zum editieren!"
+msgstr "FEHLER: Keine Animation zum bearbeiten!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
@@ -3345,7 +3375,7 @@ msgstr "Spiele ausgewählte Animation rückwärts von aktueller Position. (A)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
-msgstr "Spiele ausgewählte Animation rückwärts vom Ende. (Shift+A)"
+msgstr "Spiele ausgewählte Animation rückwärts vom Ende. (Umschalt+A)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Stop animation playback. (S)"
@@ -3353,7 +3383,7 @@ msgstr "Stoppe Animations-Wiedergabe. (S)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr "Spiele ausgewählte Animation vom Start. (Shift+D)"
+msgstr "Spiele ausgewählte Animation vom Start. (Umschalt+D)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
@@ -3364,9 +3394,8 @@ msgid "Animation position (in seconds)."
msgstr "Position der Animation (in Sekunden)."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Scale animation playback globally for the node."
-msgstr "Skaliere das Abspielen der Animation global für das gesamte Node"
+msgstr "Animationsablauf für dieses Node global skalieren."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
@@ -3394,12 +3423,11 @@ msgstr "Liste der Animationen im Player anzeigen."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr "Beim Laden automatisch abpielen"
+msgstr "Beim Laden automatisch abspielen"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Edit Target Blend Times"
-msgstr "Ändere Ziel-Blendzeiten"
+msgstr "Ziel-Übergangszeiten bearbeiten"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
@@ -3415,7 +3443,7 @@ msgstr "Neue Animation erstellen"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
-msgstr "Name der Animation:"
+msgstr "Animationsname:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
@@ -3426,9 +3454,8 @@ msgid "Error!"
msgstr "Fehler!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Blend Times:"
-msgstr "Blendzeiten:"
+msgstr "Übergangszeiten:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
@@ -3436,7 +3463,7 @@ msgstr "Nächste (Automatische Warteschlange):"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
-msgstr ""
+msgstr "Übergangszeiten kreuzender Animationen"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
@@ -3462,7 +3489,7 @@ msgstr "Ausblenden (s):"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend"
-msgstr ""
+msgstr "Blenden"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix"
@@ -3491,15 +3518,15 @@ msgstr "Menge:"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend:"
-msgstr ""
+msgstr "Blende:"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 0:"
-msgstr ""
+msgstr "Blende 0:"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend 1:"
-msgstr ""
+msgstr "Blende 1:"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "X-Fade Time (s):"
@@ -3514,12 +3541,14 @@ msgid "Add Input"
msgstr "Eingang hinzufügen"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
msgid "Clear Auto-Advance"
-msgstr ""
+msgstr "Stoppe automatisches Durchschalten"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#, fuzzy
msgid "Set Auto-Advance"
-msgstr ""
+msgstr "Setze automatisches Durchschalten"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Delete Input"
@@ -3539,39 +3568,39 @@ msgstr "Animationsbaum ist ungültig."
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr "Animationsknoten"
+msgstr "Animations-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
-msgstr ""
+msgstr "Einfach-Aufruf-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix Node"
-msgstr "Mixknoten"
+msgstr "Misch-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend2 Node"
-msgstr ""
+msgstr "Blende2-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend3 Node"
-msgstr ""
+msgstr "Blende3-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend4 Node"
-msgstr ""
+msgstr "Blende4-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "Zeitskalier-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeSeek Node"
-msgstr ""
+msgstr "Zeitsuch-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "Übergangs-Node"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
@@ -3579,7 +3608,7 @@ msgstr "Animationen importieren.."
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr "Node-Filter bearbeiten"
+msgstr "Nodefilter bearbeiten"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Filters.."
@@ -3587,7 +3616,7 @@ msgstr "Filter.."
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Parsing %d Triangles:"
-msgstr "Parse %d Dreiecke:"
+msgstr "Analysiere %d Dreiecke:"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Triangle #"
@@ -3595,15 +3624,15 @@ msgstr "Dreieck #"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Light Baker Setup:"
-msgstr "Einrichtung des Light-Bakers:"
+msgstr "Light-Baker einrichten:"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Parsing Geometry"
-msgstr "Parse Geometrie"
+msgstr "Analysiere Geometrie"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Fixing Lights"
-msgstr "Behebe Lampen"
+msgstr "Fixiere Lampen"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Making BVH"
@@ -3611,7 +3640,7 @@ msgstr "Erstelle BVH"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Creating Light Octree"
-msgstr "Erstelle Light-Octree"
+msgstr "erstelle Licht-Octree"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Creating Octree Texture"
@@ -3619,7 +3648,7 @@ msgstr "Erstelle Octree-Textur"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Transfer to Lightmaps:"
-msgstr "Übergang zu Lightmaps:"
+msgstr "übertrage zu Lightmaps:"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Allocating Texture #"
@@ -3653,7 +3682,7 @@ msgstr "Einrasten konfigurieren"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr "Gitterverschiebung:"
+msgstr "Gitterversatz:"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -3662,7 +3691,7 @@ msgstr "Gitterabstand:"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
-msgstr "Rotationsverschiebung:"
+msgstr "Rotationsversatz:"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Step:"
@@ -3678,7 +3707,7 @@ msgstr "Aktion verschieben"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
-msgstr "IK-Chain bearbeiten"
+msgstr "IK-Kette bearbeiten"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit CanvasItem"
@@ -3697,9 +3726,8 @@ msgid "Paste Pose"
msgstr "Pose einfügen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "Auswahlmodus (Q)"
+msgstr "Auswahlmodus"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3712,22 +3740,20 @@ msgstr "Alt+Ziehen = Verschieben"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
msgstr ""
-"Drücken Sie 'V', um den Pivotpunkt zu ändern, 'Shift+V', um den Pivotpunkt "
-"(während der Bewegung) zu verschieben."
+"‚V‘ drücken um Angelpunkt auf Mausposition zu setzen, ‚Umschalt+V‘ drücken "
+"um das Objekt ohne seinen Angelpunkt zu verschieben."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Alt+RMB: Depth list selection"
msgstr "Alt+Rechtsklick: Listenauswahl nach Tiefe"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "Bewegungsmodus (W)"
+msgstr "Bewegungsmodus"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate Mode"
-msgstr "Rotationsmodus (E)"
+msgstr "Rotationsmodus"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -3741,7 +3767,7 @@ msgstr ""
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Click to change object's rotation pivot."
-msgstr "Klicken Sie, um den Rotationsmittelpunkt des Objekts zu ändern."
+msgstr "Klicken um Angelpunkt des Objekts zu ändern."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
@@ -3758,13 +3784,11 @@ msgstr "Das ausgewählte Objekt entsperren (kann bewegt werden)."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
-msgstr ""
-"Versichert, dass die untergeordnete Knoten des Objektes nicht auswählbar "
-"sind."
+msgstr "Verhindert das Auswählen von Unterobjekten dieses Nodes."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Restores the object's children's ability to be selected."
-msgstr "Stellt die Eigenschaft des Objektes wieder her, ausgewählt zu werden."
+msgstr "Macht Unterobjekte dieses Objekts wieder auswählbar."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -3778,11 +3802,11 @@ msgstr "Raster anzeigen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr "Einrasten für Rotation aktivieren"
+msgstr "Rotationsraster benutzen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
-msgstr "Relatives Einrasten aktivieren"
+msgstr "Relatives Einrasten benutzen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -3791,11 +3815,11 @@ msgstr "Einrasten konfigurieren.."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr "Einrasten an Pixeln aktivieren"
+msgstr "Pixelraster benutzen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Expand to Parent"
-msgstr "Auf übergeordneten Knoten ausdehnen"
+msgstr "Auf übergeordnetes Node ausdehnen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton.."
@@ -3811,11 +3835,11 @@ msgstr "Knochen entfernen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr ""
+msgstr "IK-Kette erzeugen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr ""
+msgstr "IK-Kette zurücksetzen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -3828,7 +3852,7 @@ msgstr "Vergrößerung zurücksetzen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Set.."
-msgstr ""
+msgstr "Vergrößerung setzen.."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
@@ -3852,15 +3876,15 @@ msgstr "Schlüsselbild einfügen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr "Schlüsselbild einfügen (existierender Track)"
+msgstr "Schlüsselbild einfügen (in existierende Spuren)"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
-msgstr ""
+msgstr "Pose kopieren"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr ""
+msgstr "Pose zurücksetzen"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set a Value"
@@ -3899,7 +3923,7 @@ msgstr "Polygon bearbeiten (Punkt entfernen)"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create a new polygon from scratch."
-msgstr "Polygon neu von vorne erstellen."
+msgstr "Polygon von Grund auf neu erstellen."
#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Poly3D"
@@ -3907,7 +3931,7 @@ msgstr "Polygon3D erstellen"
#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
msgid "Set Handle"
-msgstr ""
+msgstr "Wähle Griff"
#: tools/editor/plugins/color_ramp_editor_plugin.cpp
msgid "Add/Remove Color Ramp Point"
@@ -3920,7 +3944,7 @@ msgstr "Farbverlauf anpassen"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Creating Mesh Library"
-msgstr ""
+msgstr "Erzeuge MeshLibrary"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Thumbnail.."
@@ -3928,7 +3952,7 @@ msgstr "Vorschau.."
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove item %d?"
-msgstr "%d entfernen?"
+msgstr "Element %d entfernen?"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
@@ -3946,7 +3970,7 @@ msgstr "Aus Szene importieren"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Update from Scene"
-msgstr "Aus Szene aktialisieren"
+msgstr "Aus Szene aktualisieren"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
@@ -3962,7 +3986,7 @@ msgstr "Auflistungseditor"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
-msgstr ""
+msgstr "Occluder-Polygon erzeugen"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
@@ -3986,23 +4010,23 @@ msgstr "RMT: Punkt entfernen."
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
-msgstr ""
+msgstr "Mesh ist leer!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
-msgstr ""
+msgstr "Statischen Trimesh-Körper erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Convex Body"
-msgstr ""
+msgstr "Statischen Konvex-Körper erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
-msgstr "Dies funktioniert nicht am Hauptknoten der Szene!"
+msgstr "Das geht nicht an der Wurzel der Szene!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Shape"
-msgstr ""
+msgstr "Trimesh-Form erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Shape"
@@ -4010,46 +4034,43 @@ msgstr "Konvexe Form erstellen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Navigation Mesh"
-msgstr ""
+msgstr "Navigations-Mesh erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
-msgstr ""
+msgstr "Mesh-Instanz fehlt ein Mesh!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh has not surface to create outlines from!"
-msgstr ""
+msgstr "Mesh hat keine Oberfläche von der Umrisse erzeugt werden könnten!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
-msgstr ""
+msgstr "Konnte keinen Umriss erzeugen!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline"
-msgstr "Erzeuge Umriss"
+msgstr "Umriss erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Trimesh Static Body"
-msgstr "Erzeuge trimesh statischen Körper"
+msgstr "Statischen Trimesh-Körper erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Static Body"
-msgstr "Erzeuge konvexen statischen Körper"
+msgstr "Statischen Konvex-Körper erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Trimesh Collision Sibling"
-msgstr "Erzeuge trimesh Kollisionselement"
+msgstr "Trimesh Kollisionselement erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
-#, fuzzy
msgid "Create Convex Collision Sibling"
-msgstr "Erzeuge konvexen Kollisionseintrag"
+msgstr "Konvexes Kollisionselement erzeugen"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh.."
-msgstr "Erzeuge Umriss-Mesh.."
+msgstr "Umriss-Mesh erzeugen.."
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh"
@@ -4060,9 +4081,9 @@ msgid "Outline Size:"
msgstr "Umrissgröße:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
-#, fuzzy
msgid "No mesh source specified (and no MultiMesh set in node)."
-msgstr "Keine Mesh-Quelle angegeben (und kein MultiMesh-Eintrag im Node)"
+msgstr ""
+"Keine Mesh-Quelle angegeben (und kein MultiMesh-Eintrag im Node gesetzt)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and MultiMesh contains no Mesh)."
@@ -4086,7 +4107,7 @@ msgstr "Keine Quelle für Oberfläche angegeben."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (invalid path)."
-msgstr ""
+msgstr "Oberflächen-Quelle ist ungültig (ungültiger Pfad)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no geometry)."
@@ -4553,9 +4574,8 @@ msgid "Save Theme As"
msgstr "Motiv speichern als"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "Klone herunter"
+msgstr "Dokumentation schließen"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -5283,7 +5303,6 @@ msgid "Step:"
msgstr "Schritt:"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
-#, fuzzy
msgid "Separation:"
msgstr "Trennung:"
@@ -5301,24 +5320,24 @@ msgstr "Kann Motiv nicht speichern in Datei:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add All Items"
-msgstr "Alle Items hinzufügen"
+msgstr "Alle Elemente hinzufügen"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add All"
-msgstr "Alles hinzufügen"
+msgstr "Alle hinzufügen"
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Item"
-msgstr ""
+msgstr "Entferne Element"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
-msgstr ""
+msgstr "Füge Klassen-Element hinzu"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
-msgstr ""
+msgstr "Entferne Klassen-Element"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Template"
@@ -5326,35 +5345,35 @@ msgstr "Leeres Template erstellen"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
-msgstr ""
+msgstr "Leeres Editor-Template erstellen"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
-msgstr ""
+msgstr "Kontrollkasten Radio1"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio2"
-msgstr ""
+msgstr "Kontrollkasten Radio2"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Item"
-msgstr ""
+msgstr "Element"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Check Item"
-msgstr ""
+msgstr "Überprüfe Element"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Checked Item"
-msgstr ""
+msgstr "Überprüftes Element"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Has"
-msgstr ""
+msgstr "Enthält"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Many"
-msgstr ""
+msgstr "Viele"
#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
msgid "Options"
@@ -5362,19 +5381,19 @@ msgstr "Optionen"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Have,Many,Several,Options!"
-msgstr ""
+msgstr "Enthalten,Viele,Einige,Optionen!"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Tab 1"
-msgstr ""
+msgstr "Tab 1"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Tab 2"
-msgstr ""
+msgstr "Tab 2"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Tab 3"
-msgstr ""
+msgstr "Tab 3"
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
@@ -5384,32 +5403,32 @@ msgstr "Typ:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Data Type:"
-msgstr ""
+msgstr "Datentyp:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Icon"
-msgstr ""
+msgstr "Symbol"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Style"
-msgstr ""
+msgstr "Stil"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Color"
-msgstr ""
+msgstr "Farbe"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint TileMap"
-msgstr ""
+msgstr "Zeichne TileMap"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
#: tools/editor/scene_tree_dock.cpp
msgid "Duplicate"
-msgstr ""
+msgstr "Duplizieren"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase TileMap"
-msgstr ""
+msgstr "Lösche TileMap"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase selection"
@@ -5421,7 +5440,7 @@ msgstr "Finde Kachel"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Transpose"
-msgstr ""
+msgstr "Transponieren"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Mirror X"
@@ -5433,55 +5452,55 @@ msgstr "Y-Koordinaten spiegeln"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Bucket"
-msgstr ""
+msgstr "Eimer"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
-msgstr ""
+msgstr "Wähle Kachel"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Select"
-msgstr ""
+msgstr "Auswählen"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 0 degrees"
-msgstr ""
+msgstr "Drehe auf 0 Grad"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 90 degrees"
-msgstr ""
+msgstr "Drehe auf 90 Grad"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 180 degrees"
-msgstr ""
+msgstr "Drehe auf 180 Grad"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Rotate 270 degrees"
-msgstr ""
+msgstr "Drehe auf 270 Grad"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Could not find tile:"
-msgstr ""
+msgstr "Konnte Kachel nicht finden:"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Item name or ID:"
-msgstr ""
+msgstr "Elementname oder ID:"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from scene?"
-msgstr ""
+msgstr "Von Szene erstellen?"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
-msgstr ""
+msgstr "Aus Szene vereinen?"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from Scene"
-msgstr ""
+msgstr "Von Szene erstellen"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from Scene"
-msgstr ""
+msgstr "Aus Szene vereinen"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
@@ -5502,47 +5521,47 @@ msgstr "Fehler beim Exportieren des Projekts!"
#: tools/editor/project_export.cpp
msgid "Error writing the project PCK!"
-msgstr ""
+msgstr "Fehler beim Schreiben des Projekt-PCK!"
#: tools/editor/project_export.cpp
msgid "No exporter for platform '%s' yet."
-msgstr ""
+msgstr "Kein Exporter für Plattform ‚%s‘ verfügbar."
#: tools/editor/project_export.cpp
msgid "Include"
-msgstr ""
+msgstr "Einbeziehen"
#: tools/editor/project_export.cpp
msgid "Change Image Group"
-msgstr ""
+msgstr "Ändere Bildergruppe"
#: tools/editor/project_export.cpp
msgid "Group name can't be empty!"
-msgstr ""
+msgstr "Gruppenname muss vorhanden sein!"
#: tools/editor/project_export.cpp
msgid "Invalid character in group name!"
-msgstr ""
+msgstr "Ungültiges Zeichen in Gruppenname!"
#: tools/editor/project_export.cpp
msgid "Group name already exists!"
-msgstr ""
+msgstr "Gruppenname existiert bereits!"
#: tools/editor/project_export.cpp
msgid "Add Image Group"
-msgstr ""
+msgstr "Füge Bildergruppe hinzu"
#: tools/editor/project_export.cpp
msgid "Delete Image Group"
-msgstr ""
+msgstr "Lösche Bildergruppe"
#: tools/editor/project_export.cpp
msgid "Atlas Preview"
-msgstr ""
+msgstr "Atlas-Vorschau"
#: tools/editor/project_export.cpp
msgid "Project Export Settings"
-msgstr ""
+msgstr "Projektexporteinstellungen"
#: tools/editor/project_export.cpp
msgid "Target"
@@ -5550,7 +5569,7 @@ msgstr "Ziel"
#: tools/editor/project_export.cpp
msgid "Export to Platform"
-msgstr ""
+msgstr "Export zu Plattform"
#: tools/editor/project_export.cpp
msgid "Resources"
@@ -5558,15 +5577,15 @@ msgstr "Ressourcen"
#: tools/editor/project_export.cpp
msgid "Export selected resources (including dependencies)."
-msgstr ""
+msgstr "Exportiere ausgewählte Ressourcen (inklusive Abhängigkeiten)."
#: tools/editor/project_export.cpp
msgid "Export all resources in the project."
-msgstr ""
+msgstr "Exportiere alle Ressourcen des Projekts."
#: tools/editor/project_export.cpp
msgid "Export all files in the project directory."
-msgstr ""
+msgstr "Exportiere alle Dateien im Projektverzeichnis."
#: tools/editor/project_export.cpp
msgid "Export Mode:"
@@ -5584,14 +5603,18 @@ msgstr "Aktion"
msgid ""
"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
msgstr ""
+"Filter um Nicht-Ressourcendateien zu exportieren (durch Kommata getrennt, z."
+"B.: *.json, *.txt):"
#: tools/editor/project_export.cpp
msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
msgstr ""
+"Filter um vom Export auszuschließen (durch Kommata getrennt, z.B.: *.json, *."
+"txt):"
#: tools/editor/project_export.cpp
msgid "Convert text scenes to binary on export."
-msgstr ""
+msgstr "Konvertiere Textszenen in Binärformat beim Exportieren."
#: tools/editor/project_export.cpp
msgid "Images"
@@ -5603,19 +5626,20 @@ msgstr "Original behalten"
#: tools/editor/project_export.cpp
msgid "Compress for Disk (Lossy, WebP)"
-msgstr ""
+msgstr "Komprimiere für Festplattenspeicher (verlustbehaftet, WebP)"
#: tools/editor/project_export.cpp
msgid "Compress for RAM (BC/PVRTC/ETC)"
-msgstr ""
+msgstr "Komprimiere für Arbeitsspeicher (BC/PVRTC/ETC)"
#: tools/editor/project_export.cpp
msgid "Convert Images (*.png):"
-msgstr ""
+msgstr "Konvertiere Bilder (*.png):"
#: tools/editor/project_export.cpp
msgid "Compress for Disk (Lossy) Quality:"
msgstr ""
+"Qualitätseinstellungen für Kompression (verlustbehaftet, auf Festplatte):"
#: tools/editor/project_export.cpp
msgid "Shrink All Images:"
@@ -5635,35 +5659,35 @@ msgstr "Gruppen:"
#: tools/editor/project_export.cpp
msgid "Compress Disk"
-msgstr ""
+msgstr "Komprimiere für Festplatte"
#: tools/editor/project_export.cpp
msgid "Compress RAM"
-msgstr ""
+msgstr "Komprimiere für Arbeitsspeicher"
#: tools/editor/project_export.cpp
msgid "Compress Mode:"
-msgstr ""
+msgstr "Kompressionsmodus:"
#: tools/editor/project_export.cpp
msgid "Lossy Quality:"
-msgstr "Verlustbehaftete-Qualität:"
+msgstr "Verlustbehaftete Qualität:"
#: tools/editor/project_export.cpp
msgid "Atlas:"
-msgstr ""
+msgstr "Atlas:"
#: tools/editor/project_export.cpp
msgid "Shrink By:"
-msgstr ""
+msgstr "Verkleinern nach:"
#: tools/editor/project_export.cpp
msgid "Preview Atlas"
-msgstr ""
+msgstr "Zeige Atlas-Vorschau"
#: tools/editor/project_export.cpp
msgid "Image Filter:"
-msgstr ""
+msgstr "Bildfilter:"
#: tools/editor/project_export.cpp
msgid "Images:"
@@ -5671,40 +5695,39 @@ msgstr "Bilder:"
#: tools/editor/project_export.cpp
msgid "Select None"
-msgstr ""
+msgstr "Nichts auswählen"
#: tools/editor/project_export.cpp
msgid "Group"
msgstr "Gruppe"
#: tools/editor/project_export.cpp
-#, fuzzy
msgid "Samples"
msgstr "Samples"
#: tools/editor/project_export.cpp
msgid "Sample Conversion Mode: (.wav files):"
-msgstr ""
+msgstr "Audio-Umwandlungs-Modus: (.wav-Dateien):"
#: tools/editor/project_export.cpp
msgid "Keep"
-msgstr ""
+msgstr "Behalten"
#: tools/editor/project_export.cpp
msgid "Compress (RAM - IMA-ADPCM)"
-msgstr ""
+msgstr "Komprimieren (RAM - IMA-ADPCM)"
#: tools/editor/project_export.cpp
msgid "Sampling Rate Limit (Hz):"
-msgstr ""
+msgstr "Grenze der Abtastrate (Hz):"
#: tools/editor/project_export.cpp
msgid "Trim"
-msgstr ""
+msgstr "Zuschneiden"
#: tools/editor/project_export.cpp
msgid "Trailing Silence:"
-msgstr ""
+msgstr "Auslaufende Stille:"
#: tools/editor/project_export.cpp
msgid "Script"
@@ -5712,7 +5735,7 @@ msgstr "Skript"
#: tools/editor/project_export.cpp
msgid "Script Export Mode:"
-msgstr ""
+msgstr "Skript-Exportmodus:"
#: tools/editor/project_export.cpp
msgid "Text"
@@ -5724,19 +5747,19 @@ msgstr "Kompiliert"
#: tools/editor/project_export.cpp
msgid "Encrypted (Provide Key Below)"
-msgstr ""
+msgstr "Verschlüsselt (Schlüssel unten angeben)"
#: tools/editor/project_export.cpp
msgid "Script Encryption Key (256-bits as hex):"
-msgstr ""
+msgstr "Skript-Schlüssel (256 Bit hexadezimal):"
#: tools/editor/project_export.cpp
msgid "Export PCK/Zip"
-msgstr ""
+msgstr "Exportiere PCK/Zip"
#: tools/editor/project_export.cpp
msgid "Export Project PCK"
-msgstr ""
+msgstr "Exportiere Projekt-PCK"
#: tools/editor/project_export.cpp
msgid "Export.."
@@ -5752,27 +5775,27 @@ msgstr "Exportvorlage:"
#: tools/editor/project_manager.cpp
msgid "Invalid project path, the path must exist!"
-msgstr ""
+msgstr "Ungültiger Projektpfad, der Pfad muss existieren!"
#: tools/editor/project_manager.cpp
msgid "Invalid project path, engine.cfg must not exist."
-msgstr ""
+msgstr "Ungültiger Projektpfad, engine.cfg darf nicht existieren."
#: tools/editor/project_manager.cpp
msgid "Invalid project path, engine.cfg must exist."
-msgstr ""
+msgstr "Ungültiger Projektpfad, engine.cfg muss existieren."
#: tools/editor/project_manager.cpp
msgid "Imported Project"
-msgstr ""
+msgstr "Importiertes Projekt"
#: tools/editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
-msgstr ""
+msgstr "Ungültiger Projektpfad (etwas geändert?)."
#: tools/editor/project_manager.cpp
msgid "Couldn't create engine.cfg in project path."
-msgstr ""
+msgstr "Konnte engine.cfg in Projektpfad nicht erzeugen."
#: tools/editor/project_manager.cpp
msgid "The following files failed extraction from package:"
@@ -5780,27 +5803,27 @@ msgstr "Die folgenden Dateien ließen sich nicht aus dem Paket extrahieren:"
#: tools/editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "Paket erfolgreich installiert!"
#: tools/editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr ""
+msgstr "Existierendes Projekt importieren"
#: tools/editor/project_manager.cpp
msgid "Project Path (Must Exist):"
-msgstr ""
+msgstr "Projektpfad (muss existieren):"
#: tools/editor/project_manager.cpp
msgid "Project Name:"
-msgstr ""
+msgstr "Projektname:"
#: tools/editor/project_manager.cpp
msgid "Create New Project"
-msgstr ""
+msgstr "Erstelle neues Projekt"
#: tools/editor/project_manager.cpp
msgid "Project Path:"
-msgstr ""
+msgstr "Projektpfad:"
#: tools/editor/project_manager.cpp
msgid "Install Project:"
@@ -5812,29 +5835,27 @@ msgstr "Installieren"
#: tools/editor/project_manager.cpp
msgid "Browse"
-msgstr ""
+msgstr "Durchstöbern"
#: tools/editor/project_manager.cpp
msgid "New Game Project"
-msgstr ""
+msgstr "Neues Spiel"
#: tools/editor/project_manager.cpp
msgid "That's a BINGO!"
-msgstr ""
+msgstr "Aber klar :-) !"
#: tools/editor/project_manager.cpp
msgid "Unnamed Project"
msgstr "Unbenanntes Projekt"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to open more than one project?"
-msgstr "Wollen Sie wirklich mehr als ein Projekt öffnen?"
+msgstr "Sollen wirklich mehrere Projekte geöffnet werden?"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to run more than one project?"
-msgstr "Wollen Sie wirklich mehr als ein Projekt ausführen?"
+msgstr "Sollen wirklich mehrere Projekte ausgeführt werden?"
#: tools/editor/project_manager.cpp
msgid "Remove project from the list? (Folder contents will not be modified)"
@@ -5846,11 +5867,11 @@ msgstr ""
msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
-msgstr ""
+msgstr "Sollen wirklich %s Ordner nach Godot-Projekten durchsucht werden?"
#: tools/editor/project_manager.cpp
msgid "Project Manager"
-msgstr "Projektmanager"
+msgstr "Projektverwaltung"
#: tools/editor/project_manager.cpp
msgid "Project List"
@@ -5866,7 +5887,7 @@ msgstr "Scannen"
#: tools/editor/project_manager.cpp
msgid "Select a Folder to Scan"
-msgstr ""
+msgstr "Wähle zu durchsuchenden Ordner"
#: tools/editor/project_manager.cpp
msgid "New Project"
@@ -5878,7 +5899,7 @@ msgstr "Verlassen"
#: tools/editor/project_settings.cpp
msgid "Key "
-msgstr ""
+msgstr "Taste "
#: tools/editor/project_settings.cpp
msgid "Joy Button"
@@ -5886,31 +5907,31 @@ msgstr "Joysticktaste"
#: tools/editor/project_settings.cpp
msgid "Joy Axis"
-msgstr ""
+msgstr "Joystickachse"
#: tools/editor/project_settings.cpp
msgid "Mouse Button"
-msgstr "Maus-Taste"
+msgstr "Maustaste"
#: tools/editor/project_settings.cpp
msgid "Invalid action (anything goes but '/' or ':')."
-msgstr ""
+msgstr "Ungültiger Name für Aktion (alle Zeichen außer ‚/‘ und ‚:‘ möglich)."
#: tools/editor/project_settings.cpp
msgid "Action '%s' already exists!"
-msgstr "Aktion '%s' existiert bereits!"
+msgstr "Aktion ‚%s‘ existiert bereits!"
#: tools/editor/project_settings.cpp
msgid "Rename Input Action Event"
-msgstr ""
+msgstr "Eingabeaktionsereignis umbenennen"
#: tools/editor/project_settings.cpp
msgid "Add Input Action Event"
-msgstr ""
+msgstr "Eingabeaktionsereignis hinzufügen"
#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
msgid "Control+"
-msgstr ""
+msgstr "Steuerung+"
#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
msgid "Press a Key.."
@@ -5918,7 +5939,7 @@ msgstr "Drücke eine Taste.."
#: tools/editor/project_settings.cpp
msgid "Mouse Button Index:"
-msgstr ""
+msgstr "Maustasten-Index:"
#: tools/editor/project_settings.cpp
msgid "Left Button"
@@ -5934,11 +5955,11 @@ msgstr "Mittlere Taste"
#: tools/editor/project_settings.cpp
msgid "Wheel Up Button"
-msgstr ""
+msgstr "Mausrad hoch"
#: tools/editor/project_settings.cpp
msgid "Wheel Down Button"
-msgstr ""
+msgstr "Mausrad herunter"
#: tools/editor/project_settings.cpp
msgid "Button 6"
@@ -5958,23 +5979,24 @@ msgstr "Taste 9"
#: tools/editor/project_settings.cpp
msgid "Joystick Axis Index:"
-msgstr ""
+msgstr "Joystickachsen-Index:"
#: tools/editor/project_settings.cpp
msgid "Joystick Button Index:"
-msgstr ""
+msgstr "Joysticktasten-Index:"
#: tools/editor/project_settings.cpp
msgid "Add Input Action"
-msgstr ""
+msgstr "Füge Eingabeaktion hinzu"
#: tools/editor/project_settings.cpp
msgid "Erase Input Action Event"
-msgstr ""
+msgstr "Lösche Eingabeaktionsereignis"
#: tools/editor/project_settings.cpp
+#, fuzzy
msgid "Toggle Persisting"
-msgstr ""
+msgstr "Dauerhaft umschalten"
#: tools/editor/project_settings.cpp
msgid "Error saving settings."
@@ -5990,27 +6012,27 @@ msgstr "Übersetzung hinzufügen"
#: tools/editor/project_settings.cpp
msgid "Remove Translation"
-msgstr ""
+msgstr "Übersetzung entfernen"
#: tools/editor/project_settings.cpp
msgid "Add Remapped Path"
-msgstr ""
+msgstr "Remap-Pfad hinzufügen"
#: tools/editor/project_settings.cpp
msgid "Resource Remap Add Remap"
-msgstr ""
+msgstr "Ressourcen-Remap hinzufügen"
#: tools/editor/project_settings.cpp
msgid "Change Resource Remap Language"
-msgstr ""
+msgstr "Ändere Zielsprache des Ressourcen-Remaps"
#: tools/editor/project_settings.cpp
msgid "Remove Resource Remap"
-msgstr ""
+msgstr "Ressourcen-Remap entfernen"
#: tools/editor/project_settings.cpp
msgid "Remove Resource Remap Option"
-msgstr ""
+msgstr "Ressourcen-Remap-Option entfernen"
#: tools/editor/project_settings.cpp
msgid "Project Settings (engine.cfg)"
@@ -6026,15 +6048,15 @@ msgstr "Eigenschaft:"
#: tools/editor/project_settings.cpp
msgid "Del"
-msgstr ""
+msgstr "Entfernen"
#: tools/editor/project_settings.cpp
msgid "Copy To Platform.."
-msgstr ""
+msgstr "Kopiere zu Plattform.."
#: tools/editor/project_settings.cpp
msgid "Input Map"
-msgstr ""
+msgstr "Eingabe Zuordnung"
#: tools/editor/project_settings.cpp
msgid "Action:"
@@ -6046,7 +6068,7 @@ msgstr "Gerät:"
#: tools/editor/project_settings.cpp
msgid "Index:"
-msgstr ""
+msgstr "Index:"
#: tools/editor/project_settings.cpp
msgid "Localization"
@@ -6066,7 +6088,7 @@ msgstr "Hinzufügen.."
#: tools/editor/project_settings.cpp
msgid "Remaps"
-msgstr ""
+msgstr "Remaps"
#: tools/editor/project_settings.cpp
msgid "Resources:"
@@ -6074,15 +6096,15 @@ msgstr "Ressourcen:"
#: tools/editor/project_settings.cpp
msgid "Remaps by Locale:"
-msgstr ""
+msgstr "Remaps nach Lokalisierung:"
#: tools/editor/project_settings.cpp
msgid "Locale"
-msgstr ""
+msgstr "Lokalisierung"
#: tools/editor/project_settings.cpp
msgid "AutoLoad"
-msgstr ""
+msgstr "Autoload"
#: tools/editor/project_settings.cpp
msgid "Plugins"
@@ -6090,15 +6112,17 @@ msgstr "Erweiterungen"
#: tools/editor/property_editor.cpp
msgid "Preset.."
-msgstr ""
+msgstr "Voreinstellungen.."
#: tools/editor/property_editor.cpp
+#, fuzzy
msgid "Ease In"
-msgstr ""
+msgstr "Einfahren"
#: tools/editor/property_editor.cpp
+#, fuzzy
msgid "Ease Out"
-msgstr ""
+msgstr "Ausfahren"
#: tools/editor/property_editor.cpp
msgid "Zero"
@@ -6106,19 +6130,19 @@ msgstr "Null"
#: tools/editor/property_editor.cpp
msgid "Easing In-Out"
-msgstr ""
+msgstr "Glätten Ein-Aus"
#: tools/editor/property_editor.cpp
msgid "Easing Out-In"
-msgstr ""
+msgstr "Glätten Aus-Ein"
#: tools/editor/property_editor.cpp
msgid "File.."
-msgstr ""
+msgstr "Datei.."
#: tools/editor/property_editor.cpp
msgid "Dir.."
-msgstr ""
+msgstr "Verzeichnis.."
#: tools/editor/property_editor.cpp
msgid "Load"
@@ -6126,67 +6150,79 @@ msgstr "Lade"
#: tools/editor/property_editor.cpp
msgid "Assign"
-msgstr ""
+msgstr "Zuweisen"
#: tools/editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr ""
+msgstr "Fehler beim Laden der Datei: Keine Ressource!"
#: tools/editor/property_editor.cpp
msgid "Couldn't load image"
-msgstr ""
+msgstr "Konnte Bild nicht laden"
#: tools/editor/property_editor.cpp
msgid "Bit %d, val %d."
-msgstr ""
+msgstr "Bit %d, Wert %d."
#: tools/editor/property_editor.cpp
msgid "On"
msgstr "An"
#: tools/editor/property_editor.cpp
+#, fuzzy
msgid "Set"
-msgstr ""
+msgstr "Setzen"
#: tools/editor/property_editor.cpp
msgid "Properties:"
-msgstr ""
+msgstr "Eigenschaften:"
#: tools/editor/property_editor.cpp
msgid "Global"
-msgstr ""
+msgstr "Global"
#: tools/editor/property_editor.cpp
msgid "Sections:"
-msgstr ""
+msgstr "Abschnitte:"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Punkte auswählen"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Auswahlmodus"
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
-msgstr ""
+msgstr "Konnte PVRTC-Werkzeug nicht ausführen:"
#: tools/editor/pvrtc_compress.cpp
msgid "Can't load back converted image using PVRTC tool:"
msgstr ""
+"Konnte PVRTC-Werkzeug nicht benutzen um konvertiertes Bild zurück zu laden:"
#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
msgid "Reparent Node"
-msgstr ""
+msgstr "Node umhängen"
#: tools/editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr ""
+msgstr "Ort umhängen (neue Eltern auswählen):"
#: tools/editor/reparent_dialog.cpp
msgid "Keep Global Transform"
-msgstr ""
+msgstr "Behalte globale Transformation"
#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
msgid "Reparent"
-msgstr ""
+msgstr "Umhängen"
#: tools/editor/resources_dock.cpp
msgid "Create New Resource"
-msgstr ""
+msgstr "Erstelle neue Ressource"
#: tools/editor/resources_dock.cpp
msgid "Open Resource"
@@ -6198,19 +6234,19 @@ msgstr "Ressource speichern"
#: tools/editor/resources_dock.cpp
msgid "Resource Tools"
-msgstr ""
+msgstr "Ressourcenwerkzeuge"
#: tools/editor/resources_dock.cpp
msgid "Make Local"
-msgstr ""
+msgstr "Lokal machen"
#: tools/editor/run_settings_dialog.cpp
msgid "Run Mode:"
-msgstr ""
+msgstr "Ausführungsmodus:"
#: tools/editor/run_settings_dialog.cpp
msgid "Current Scene"
-msgstr ""
+msgstr "Aktuelle Szene"
#: tools/editor/run_settings_dialog.cpp
msgid "Main Scene"
@@ -6222,181 +6258,190 @@ msgstr "Hauptszenen Parameter:"
#: tools/editor/run_settings_dialog.cpp
msgid "Scene Run Settings"
-msgstr ""
+msgstr "Szenenausführungseinstellungen"
#: tools/editor/scene_tree_dock.cpp
msgid "OK :("
-msgstr ""
+msgstr "Verstehe"
#: tools/editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
-msgstr ""
+msgstr "Kein Node unter dem Unterobjekt instantiiert werden könnte vorhanden."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "No parent to instance the scenes at."
-msgstr "Konnte Szene nicht instantiieren!"
+msgstr ""
+"Kein Eltern-Node unter dem Szenen instantiiert werden könnten vorhanden."
#: tools/editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
-msgstr ""
+msgstr "Fehler beim Laden der Szene von %s"
#: tools/editor/scene_tree_dock.cpp
msgid "Error instancing scene from %s"
-msgstr ""
+msgstr "Fehler beim Instanziieren von %s"
#: tools/editor/scene_tree_dock.cpp
msgid "Ok"
-msgstr ""
+msgstr "Ok"
#: tools/editor/scene_tree_dock.cpp
msgid ""
"Cannot instance the scene '%s' because the current scene exists within one "
"of its nodes."
msgstr ""
+"Kann Szene %s nicht instanziieren da die aktuelle Szene in einer ihrer Nodes "
+"existiert."
#: tools/editor/scene_tree_dock.cpp
msgid "Instance Scene(s)"
-msgstr ""
+msgstr "Instanz-Szene(n)"
#: tools/editor/scene_tree_dock.cpp
+#, fuzzy
msgid "This operation can't be done on the tree root."
msgstr ""
+"Diese Aktion kann nicht auf der Wurzel des Szenenbaums ausgeführt werden."
#: tools/editor/scene_tree_dock.cpp
msgid "Move Node In Parent"
-msgstr ""
+msgstr "Bewege Node innerhalb des Eltern-Nodes"
#: tools/editor/scene_tree_dock.cpp
msgid "Move Nodes In Parent"
-msgstr ""
+msgstr "Bewege Nodes innerhalb des Eltern-Nodes"
#: tools/editor/scene_tree_dock.cpp
msgid "Duplicate Node(s)"
-msgstr ""
+msgstr "Dupliziere Node(s)"
#: tools/editor/scene_tree_dock.cpp
msgid "Delete Node(s)?"
-msgstr ""
+msgstr "Lösche Node(s)?"
#: tools/editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr ""
+msgstr "Diese Aktion kann nicht ohne eine Szene ausgeführt werden."
#: tools/editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
-msgstr ""
+msgstr "Diese Aktion benötigt ein einzelnes ausgewähltes Node."
#: tools/editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
-msgstr ""
+msgstr "Diese Aktion kann nicht auf instantiierten Szenen ausgeführt werden."
#: tools/editor/scene_tree_dock.cpp
msgid "Save New Scene As.."
-msgstr ""
+msgstr "Speichere neue Szene als.."
#: tools/editor/scene_tree_dock.cpp
msgid "Makes Sense!"
-msgstr ""
+msgstr "Verstehe!"
#: tools/editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr ""
+msgstr "Kann nicht an Nodes von fremden Szenen arbeiten!"
#: tools/editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
-msgstr ""
+msgstr "Kann nicht an Nodes von denen die aktuelle Szene erbt arbeiten!"
#: tools/editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
-msgstr ""
+msgstr "Entferne Node(s)"
#: tools/editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr ""
+msgstr "Erzeuge Node"
#: tools/editor/scene_tree_dock.cpp
msgid ""
"Couldn't save new scene. Likely dependencies (instances) couldn't be "
"satisfied."
msgstr ""
+"Konnte neue Szene nicht speichern. Wahrscheinlich konnten (Instanz-) "
+"Abhängigkeiten nicht erfüllt werden."
#: tools/editor/scene_tree_dock.cpp
msgid "Error saving scene."
-msgstr ""
+msgstr "Fehler beim Speichern der Szene."
#: tools/editor/scene_tree_dock.cpp
msgid "Error duplicating scene to save it."
-msgstr ""
+msgstr "Fehler beim Duplizieren der Szene zum Speichern."
#: tools/editor/scene_tree_dock.cpp
msgid "Edit Groups"
-msgstr ""
+msgstr "Gruppen bearbeiten"
#: tools/editor/scene_tree_dock.cpp
msgid "Edit Connections"
-msgstr ""
+msgstr "Verbindungen bearbeiten"
#: tools/editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr ""
+msgstr "Node(s) löschen"
#: tools/editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr ""
+msgstr "Node hier anhängen"
#: tools/editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr ""
+msgstr "Szene hier instantiieren"
#: tools/editor/scene_tree_dock.cpp
msgid "Change Type"
-msgstr ""
+msgstr "Typ ändern"
#: tools/editor/scene_tree_dock.cpp
msgid "Add Script"
-msgstr ""
+msgstr "Skript hinzufügen"
#: tools/editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr ""
+msgstr "Aus Szene zusammenführen"
#: tools/editor/scene_tree_dock.cpp
msgid "Save Branch as Scene"
-msgstr ""
+msgstr "Speichere Verzweigung als Szene"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "Bitte bestätigen..."
+msgstr "Löschen (keine Bestätigung)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
-msgstr ""
+msgstr "Hinzufügen/Erstellen eines neuen Nodes"
#: tools/editor/scene_tree_dock.cpp
msgid ""
"Instance a scene file as a Node. Creates an inherited scene if no root node "
"exists."
msgstr ""
+"Instantiiere eine Szenendatei als Node. Erzeugt eine geerbte Szene falls "
+"keine Root-Node existiert."
#: tools/editor/scene_tree_dock.cpp
msgid "Create a new script for the selected node."
-msgstr ""
+msgstr "Erzeuge ein neues Skript für das ausgewählte Node."
#: tools/editor/scene_tree_editor.cpp
msgid ""
"This item cannot be made visible because the parent is hidden. Unhide the "
"parent first."
msgstr ""
+"Diese Element kann nicht sichtbar gemacht werden solange das Elternelement "
+"versteckt ist. Elternelement zuerst sichtbar machen."
#: tools/editor/scene_tree_editor.cpp
msgid "Toggle Spatial Visible"
-msgstr ""
+msgstr "Spatial-Sichtbarkeit umschalten"
#: tools/editor/scene_tree_editor.cpp
msgid "Toggle CanvasItem Visible"
-msgstr ""
+msgstr "CanvasItem-Sichtbarkeit umschalten"
#: tools/editor/scene_tree_editor.cpp
msgid "Instance:"
@@ -6405,26 +6450,27 @@ msgstr "Instanz:"
#: tools/editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
msgstr ""
+"Ungültiger Name für ein Node, die folgenden Zeichen sind nicht gestattet:"
#: tools/editor/scene_tree_editor.cpp
msgid "Rename Node"
-msgstr ""
+msgstr "Node umbenennen"
#: tools/editor/scene_tree_editor.cpp
msgid "Scene Tree (Nodes):"
-msgstr ""
+msgstr "Szenenbaum (Nodes):"
#: tools/editor/scene_tree_editor.cpp
msgid "Editable Children"
-msgstr ""
+msgstr "bearbeitbare Unterobjekte"
#: tools/editor/scene_tree_editor.cpp
msgid "Load As Placeholder"
-msgstr ""
+msgstr "Als Platzhalter laden"
#: tools/editor/scene_tree_editor.cpp
msgid "Discard Instancing"
-msgstr ""
+msgstr "Instantiierung verwerfen"
#: tools/editor/scene_tree_editor.cpp
msgid "Open in Editor"
@@ -6432,31 +6478,31 @@ msgstr "Im Editor öffnen"
#: tools/editor/scene_tree_editor.cpp
msgid "Clear Inheritance"
-msgstr ""
+msgstr "Leere Vererbung"
#: tools/editor/scene_tree_editor.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr ""
+msgstr "Vererbung wirklich leeren? (Lässt sich nicht rückgängig machen!)"
#: tools/editor/scene_tree_editor.cpp
msgid "Clear!"
-msgstr ""
+msgstr "Leeren!"
#: tools/editor/scene_tree_editor.cpp
msgid "Select a Node"
-msgstr ""
+msgstr "Wähle ein Node"
#: tools/editor/script_create_dialog.cpp
msgid "Invalid parent class name"
-msgstr ""
+msgstr "Ungültiger Name für Elternklasse"
#: tools/editor/script_create_dialog.cpp
msgid "Valid chars:"
-msgstr ""
+msgstr "Gültige Zeichen:"
#: tools/editor/script_create_dialog.cpp
msgid "Invalid class name"
-msgstr ""
+msgstr "Ungültiger Klassenname"
#: tools/editor/script_create_dialog.cpp
msgid "Valid name"
@@ -6516,11 +6562,11 @@ msgstr "Built-In-Skript"
#: tools/editor/script_create_dialog.cpp
msgid "Create Node Script"
-msgstr ""
+msgstr "Erstelle Node-Skript"
#: tools/editor/script_editor_debugger.cpp
msgid "Bytes:"
-msgstr ""
+msgstr "Bytes:"
#: tools/editor/script_editor_debugger.cpp
msgid "Warning"
@@ -6532,7 +6578,7 @@ msgstr "Fehler:"
#: tools/editor/script_editor_debugger.cpp
msgid "Source:"
-msgstr ""
+msgstr "Quelle:"
#: tools/editor/script_editor_debugger.cpp
msgid "Function:"
@@ -6544,19 +6590,19 @@ msgstr "Fehler"
#: tools/editor/script_editor_debugger.cpp
msgid "Child Process Connected"
-msgstr ""
+msgstr "Unterprozess verbunden"
#: tools/editor/script_editor_debugger.cpp
msgid "Inspect Previous Instance"
-msgstr ""
+msgstr "Vorherige Instanz untersuchen"
#: tools/editor/script_editor_debugger.cpp
msgid "Inspect Next Instance"
-msgstr ""
+msgstr "Nächste Instanz untersuchen"
#: tools/editor/script_editor_debugger.cpp
msgid "Stack Frames"
-msgstr ""
+msgstr "Stack Frames"
#: tools/editor/script_editor_debugger.cpp
msgid "Variable"
@@ -6568,27 +6614,29 @@ msgstr "Fehler:"
#: tools/editor/script_editor_debugger.cpp
msgid "Stack Trace (if applicable):"
-msgstr ""
+msgstr "Stack Trace (falls geeignet):"
#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
msgid "Remote Inspector"
-msgstr ""
+msgstr "Ferninspektor"
#: tools/editor/script_editor_debugger.cpp
msgid "Live Scene Tree:"
-msgstr ""
+msgstr "Echtzeit Szenenbaum:"
#: tools/editor/script_editor_debugger.cpp
+#, fuzzy
msgid "Remote Object Properties: "
-msgstr ""
+msgstr "Eigenschaften entfernter Objekte: "
#: tools/editor/script_editor_debugger.cpp
msgid "Profiler"
-msgstr ""
+msgstr "Profiler"
#: tools/editor/script_editor_debugger.cpp
msgid "Monitor"
-msgstr ""
+msgstr "Monitor"
#: tools/editor/script_editor_debugger.cpp
msgid "Value"
@@ -6596,23 +6644,23 @@ msgstr "Wert"
#: tools/editor/script_editor_debugger.cpp
msgid "Monitors"
-msgstr ""
+msgstr "Monitore"
#: tools/editor/script_editor_debugger.cpp
msgid "List of Video Memory Usage by Resource:"
-msgstr ""
+msgstr "Auflistung der Grafikspeichernutzung nach Ressource:"
#: tools/editor/script_editor_debugger.cpp
msgid "Total:"
-msgstr ""
+msgstr "Insgesamt:"
#: tools/editor/script_editor_debugger.cpp
msgid "Video Mem"
-msgstr ""
+msgstr "Grafikspeicher"
#: tools/editor/script_editor_debugger.cpp
msgid "Resource Path"
-msgstr ""
+msgstr "Ressourcenpfad"
#: tools/editor/script_editor_debugger.cpp
msgid "Type"
@@ -6620,67 +6668,76 @@ msgstr "Art"
#: tools/editor/script_editor_debugger.cpp
msgid "Usage"
-msgstr ""
+msgstr "Nutzung"
#: tools/editor/script_editor_debugger.cpp
msgid "Misc"
-msgstr ""
+msgstr "Verschiedenes"
#: tools/editor/script_editor_debugger.cpp
msgid "Clicked Control:"
-msgstr ""
+msgstr "Angeklicktes Control-Node:"
#: tools/editor/script_editor_debugger.cpp
msgid "Clicked Control Type:"
-msgstr ""
+msgstr "Typ des angeklickten Control-Nodes:"
#: tools/editor/script_editor_debugger.cpp
msgid "Live Edit Root:"
-msgstr ""
+msgstr "Wurzel der Echtzeitbearbeitung:"
#: tools/editor/script_editor_debugger.cpp
msgid "Set From Tree"
-msgstr ""
+msgstr "Nach Szenenbaum einstellen"
#: tools/editor/settings_config_dialog.cpp
msgid "Shortcuts"
-msgstr ""
+msgstr "Tastenkürzel"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Light Radius"
-msgstr ""
+msgstr "Ändere Lichtradius"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Camera FOV"
-msgstr ""
+msgstr "Ändere FOV der Kamera"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Camera Size"
-msgstr ""
+msgstr "Ändere Kameragröße"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Sphere Shape Radius"
-msgstr ""
+msgstr "Ändere Radius der Kugelform"
#: tools/editor/spatial_editor_gizmos.cpp
+#, fuzzy
msgid "Change Box Shape Extents"
-msgstr ""
+msgstr "Ändere Ausmessungen der Kastenform"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Radius"
-msgstr ""
+msgstr "Ändere Radius der Kapselform"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Capsule Shape Height"
-msgstr ""
+msgstr "Ändere Höhe der Kapselform"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Ray Shape Length"
-msgstr ""
+msgstr "Ändere Länge der Strahlenform"
#: tools/editor/spatial_editor_gizmos.cpp
+#, fuzzy
msgid "Change Notifier Extents"
-msgstr ""
+msgstr "Ändere Ausmaße des Benachrichtigers"
+
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "Eigens erstelltes Node hat keine Methode _get_output_port_unsequenced(idx,"
+#~ "wmem), jedoch wurden unsequenzierte Ports angegeben."
#~ msgid "Cannot go into subdir:"
#~ msgstr "Unterordner kann nicht geöffnet werden:"
diff --git a/tools/translations/de_CH.po b/tools/translations/de_CH.po
index 747a9ce2e9..bc64a20805 100644
--- a/tools/translations/de_CH.po
+++ b/tools/translations/de_CH.po
@@ -162,16 +162,45 @@ msgid "Add Node"
msgstr "Node"
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Node"
+
+#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Add Node(s) From Tree"
msgstr "Node von Szene"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Add Setter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -237,9 +266,23 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Node erstellen"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Node erstellen"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -285,12 +328,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -516,7 +553,8 @@ msgstr "Alle Dateien (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Öffnen"
@@ -1053,7 +1091,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1303,10 +1342,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1622,10 +1667,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -6006,6 +6047,14 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/es.po b/tools/translations/es.po
index c6a7940598..f428d54d8b 100644
--- a/tools/translations/es.po
+++ b/tools/translations/es.po
@@ -2,37 +2,45 @@
# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
# This file is distributed under the same license as the Godot source code.
#
+# Carlos López <genetita@gmail.com>, 2016.
+# Ismael Ferreras Morezuelas <swyterzone+mame@gmail.com>, 2016.
# Lisandro Lorea <lisandrolorea@gmail.com>, 2016.
+# Roger BR <drai_kin@hotmail.com>, 2016.
# Sebastian Silva <sebastian@fuentelibre.org>, 2016.
+# Swyter <swyterzone@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-07-14 01:33-0500\n"
-"Last-Translator: Sebastian Silva <sebastian@fuentelibre.org>\n"
-"Language-Team: SomosAzucar.Org\n"
+"PO-Revision-Date: 2016-09-01 11:47+0000\n"
+"Last-Translator: Roger BR <drai_kin@hotmail.com>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/godot-engine/"
+"godot/es/>\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
-"X-Generator: Virtaal 0.7.1\n"
+"X-Generator: Weblate 2.8\n"
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
-msgstr "Argumento de tipo inválido para convert(), usá constantes TYPE_*."
+msgstr ""
+"El argumento para convert() no es correcto, prueba utilizando constantes "
+"TYPE_*."
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
-"No hay suficientes bytes para decodificar bytes, o el formato es inválido."
+"O no hay suficientes bytes para decodificar bytes o el formato no es "
+"correcto."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
-msgstr "el argumento step es cero!"
+msgstr "¡El argumento «step» es cero!"
#: modules/gdscript/gd_functions.cpp
msgid "Not a script with an instance"
@@ -48,62 +56,69 @@ msgstr "No está basado en un archivo de recursos"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "Formato de diccionario de instancias inválido (@path faltante)"
+msgstr "El formato de diccionario de instancias no es correcto (falta @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-"Formato de diccionario de instancias inválido (no se puede cargar el script "
-"en @path)"
+"El formato de diccionario de instancias no es correcto (no se puede cargar "
+"el script en @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
msgstr ""
-"Formato de diccionario de instancias inválido (script inválido en @path)"
+"El formato de diccionario de instancias no es correcto (script incorrecto en "
+"@path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
-msgstr "Diccionario de instancias inválido (subclases inválidas)"
+msgstr "El diccionario de instancias no es correcto (subclases erróneas)"
#: modules/visual_script/visual_script.cpp
msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"¡Un nodo ejecutó un «yield» sin memoria de trabajo. Prueba leyendo la "
+"documentación sobre cómo utilizar yield!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"Un nodo ejecutó un «yield» pero no devolvió un estado de función en la "
+"memoria de trabajo original."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"El valor de retorno debe asignarse al primer elemento de la memoria de "
+"trabajo de nodos. Prueba arreglando el nodo."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "El nodo devolvió una secuencia de salida incorrecta: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
+"¡Se encontró un bit de secuencia pero no el nodo en la pila, informa del "
+"problema!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Desbordamiento de pila en el nivel: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Funcion:"
+msgstr "Funciones:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Variable"
+msgstr "Variables:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -111,86 +126,102 @@ msgstr "Señales:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "El nombre no es un identificador válido:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Otra función/variable/señal ya utiliza este nombre:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Crear Función"
+msgstr "Renombrar función"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Renombrar Muestra"
+msgstr "Renombrar variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Renombrar Muestra"
+msgstr "Renombrar señal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Funcion:"
+msgstr "Añadir función"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Variable"
+msgstr "Añadir variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Señales"
+msgstr "Añadir señal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Quitar Selección"
+msgstr "Quitar función"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Variable"
+msgstr "Quitar variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Variable"
+msgstr "Editando variable:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Quitar Selección"
+msgstr "Quitar señal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Conectando Señal:"
+msgstr "Editando señal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "Agregar Nodo Hijo"
+msgstr "Añadir nodo"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
-msgid "Add Node(s) From Tree"
-msgstr "Nodo desde Escena"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Meta to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Añadir nodo hijo"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Añadir nodo/s desde árbol"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Añadir propiedad «Getter»"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Añadir propiedad «Setter»"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -200,22 +231,20 @@ msgid "Edit"
msgstr "Editar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "Tipo de Datos:"
+msgstr "Tipo base:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
msgstr "Miembros:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Available Nodes:"
-msgstr "Nodo TimeScale"
+msgstr "Nodos disponibles:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Selecciona o crea una función para editar el grafo"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -231,98 +260,103 @@ msgid "Close"
msgstr "Cerrar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "Argumentos de Llamada Extras:"
+msgstr "Editar argumentos de señal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Variable"
+msgstr "Editar variable:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Cambiar Tipo"
+msgstr "Cambiar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Eliminar archivos seleccionados?"
+msgstr "Quitar seleccionados"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
-msgstr "Act/Desact. Breakpoint"
+msgstr "Des/activar «breakpoint»"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "Buscar por tipo de nodo"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Copiar pose"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Encontrar Siguiente"
+msgid "Cut Nodes"
+msgstr "Crear nodo"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Pegar pose"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "El tipo de entrada no es iterable: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "El iterador ya no es correcto"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "El iterador ya no es correcto: "
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Invalid index property name."
-msgstr "Nombre de clase padre inválido"
+msgstr "El nombre de la propiedad índice no es correcto."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "¡El objeto base no es un nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "La ruta no es local"
+msgstr "¡La ruta no apunta a un nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "El nombre de la propiedad índice en el nodo %s no es correcto."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid argument of type: "
-msgstr "Nombre de clase padre inválido"
+msgstr ": Argumento incorrecto de tipo: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Nombre de clase padre inválido"
+msgstr ": Argumentos incorrectos: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet no encontrado en el script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet no encontrado en el script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
+"El nodo personalizado no tiene ningún método _step(), no se puede procesar "
+"el grafo."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"El valor devuelto por _step() no es correcto, debe ser un entero (seq out), "
+"o string/cadena (error)."
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -384,8 +418,8 @@ msgstr ""
msgid ""
"An occluder polygon must be set (or drawn) for this occluder to take effect."
msgstr ""
-"Se debe setear(o dibujar) un polígono oclusor para que este oclusor tenga "
-"efecto."
+"Se debe establecer (o dibujar) un polígono oclusor para que la oclusión "
+"tenga efecto."
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
@@ -396,8 +430,8 @@ msgid ""
"A NavigationPolygon resource must be set or created for this node to work. "
"Please set a property or draw a polygon."
msgstr ""
-"Se debe crear o setear un recurso NavigationPolygon para que este nodo "
-"funcione. Por favor creá una propiedad o dibujá un polígono."
+"Se debe crear o establecer un recurso NavigationPolygon para que este nodo "
+"funcione. Prueba estableciendo una propiedad o dibuja un polígono."
#: scene/2d/navigation_polygon.cpp
msgid ""
@@ -433,8 +467,8 @@ msgid ""
"A SampleLibrary resource must be created or set in the 'samples' property in "
"order for SamplePlayer to play sound."
msgstr ""
-"Un recurso SampleLibrary debe ser creado o seteado en la propiedad 'samples' "
-"de modo que SamplePlayer pueda reproducir sonido."
+"Tienes que crear o establecer un recurso de tipo SampleLibrary con la "
+"propiedad 'samples' para que SamplePlayer pueda reproducir el sonido."
#: scene/2d/sprite.cpp
msgid ""
@@ -499,15 +533,16 @@ msgstr "Un CollisionPolygon vacio no tiene ningún efecto en la colisión."
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
-"Se debe crear o setear un recurso NavigationMesh para que este nodo funcione."
+"Se debe crear o establecer un recurso NavigationMesh para que este nodo "
+"funcione."
#: scene/3d/navigation_mesh.cpp
msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
-"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Solo "
-"provee datos de navegación."
+"NavigationMeshInstance debe ser un hijo o nieto de un nodo Navigation. Ya "
+"que sólo proporciona los datos de navegación."
#: scene/3d/scenario_fx.cpp
msgid ""
@@ -521,8 +556,8 @@ msgid ""
"A SampleLibrary resource must be created or set in the 'samples' property in "
"order for SpatialSamplePlayer to play sound."
msgstr ""
-"Un recurso SampleLibrary debe ser creado o seteado en la propiedad 'samples' "
-"de modo que SpatialSamplePlayer puede reproducir sonido."
+"Tienes que crear o establecer un recurso de tipo SampleLibrary con la "
+"propiedad «samples» para que SpatialSamplePlayer pueda reproducir el sonido."
#: scene/3d/sprite_3d.cpp
msgid ""
@@ -538,50 +573,51 @@ msgstr "Cancelar"
#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp
msgid "OK"
-msgstr "OK"
+msgstr "Aceptar"
#: scene/gui/dialogs.cpp
msgid "Alert!"
-msgstr "Alerta!"
+msgstr "¡Advertencia!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr "Confirmá, por favor..."
+msgstr "Confirmar decisión..."
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "File Exists, Overwrite?"
-msgstr "El Archivo Existe, Sobreescribir?"
+msgstr "El archivo ya existe, ¿quieres sobreescribirlo?"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Recognized"
-msgstr "Todas Reconocidas"
+msgstr "Reconocidos"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Files (*)"
-msgstr "Todos los Archivos (*)"
+msgstr "Todos los archivos (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Abrir"
#: scene/gui/file_dialog.cpp
msgid "Open a File"
-msgstr "Abrir un Archivo"
+msgstr "Abrir un archivo"
#: scene/gui/file_dialog.cpp
msgid "Open File(s)"
-msgstr "Abrir Archivo(s)"
+msgstr "Abrir archivo/s"
#: scene/gui/file_dialog.cpp
msgid "Open a Directory"
-msgstr "Abrir un Directorio"
+msgstr "Abrir una carpeta"
#: scene/gui/file_dialog.cpp
msgid "Open a File or Directory"
-msgstr "Abrir un Archivo o Directorio"
+msgstr "Abrir un archivo o carpeta"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_node.cpp
@@ -592,12 +628,12 @@ msgstr "Guardar"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Save a File"
-msgstr "Guardar un Archivo"
+msgstr "Guardar un archivo"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp
msgid "Create Folder"
-msgstr "Crear Carpeta"
+msgstr "Crear carpeta"
#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp
#: tools/editor/editor_file_dialog.cpp
@@ -608,7 +644,7 @@ msgstr "Ruta:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Directories & Files:"
-msgstr "Directorios y Archivos:"
+msgstr "Carpetas y archivos:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/script_editor_debugger.cpp
@@ -637,7 +673,7 @@ msgstr "Debe ser una extensión válida."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Shift+"
-msgstr "Shift+"
+msgstr "Mayús+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
@@ -663,23 +699,23 @@ msgstr "Botón"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Left Button."
-msgstr "Botón Izquierdo."
+msgstr "Botón izquierdo."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Right Button."
-msgstr "Botón Derecho."
+msgstr "Botón derecho."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Middle Button."
-msgstr "Botón del Medio."
+msgstr "Botón central."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Wheel Up."
-msgstr "Rueda Arriba."
+msgstr "Rueda hacia arriba."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Wheel Down."
-msgstr "Rueda Abajo."
+msgstr "Rueda hacia abajo."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Axis"
@@ -712,14 +748,14 @@ msgstr "Pegar"
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_export.cpp
msgid "Select All"
-msgstr "Seleccionar Todo"
+msgstr "Seleccionar todo"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
#: tools/editor/plugins/rich_text_editor_plugin.cpp
#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Clear"
-msgstr "Limpiar"
+msgstr "Borrar todo"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -752,7 +788,7 @@ msgstr ""
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Error initializing FreeType."
-msgstr "Error inicializando FreeType."
+msgstr "Error al arrancar FreeType."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -762,12 +798,12 @@ msgstr "Formato de tipografía desconocido."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Error loading font."
-msgstr "Error cargando tipografía."
+msgstr "Error al cargar la tipografía."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Invalid font size."
-msgstr "Tamaño de tipografía inválido."
+msgstr "Tamaño de tipografía incorrecto."
#: tools/editor/animation_editor.cpp
msgid "Disabled"
@@ -775,92 +811,92 @@ msgstr "Desactivado"
#: tools/editor/animation_editor.cpp
msgid "All Selection"
-msgstr "Toda la Selección"
+msgstr "Toda la selección"
#: tools/editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr "Mover Agregar Clave"
+msgstr "Mover o añadir clave"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr "Cambiar Transición de Anim"
+msgstr "Cambiar transición de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr "Cambiar Transform de Anim"
+msgstr "Cambiar transformación de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr "Cambiar Valor de Anim"
+msgstr "Cambiar valor de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr "Cambiar Call de Anim"
+msgstr "Cambiar llamada de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Track"
-msgstr "Agregar Track de Anim"
+msgstr "Añadir pista de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Duplicate Keys"
-msgstr "Duplicar Claves de Anim"
+msgstr "Duplicar claves de animación"
#: tools/editor/animation_editor.cpp
msgid "Move Anim Track Up"
-msgstr "Subir Track de Anim"
+msgstr "Subir pista de animación"
#: tools/editor/animation_editor.cpp
msgid "Move Anim Track Down"
-msgstr "Bajar Track de Anim"
+msgstr "Bajar pista de animación"
#: tools/editor/animation_editor.cpp
msgid "Remove Anim Track"
-msgstr "Quitar Track de Anim"
+msgstr "Quitar pista de animación"
#: tools/editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr "Setear Transiciones a:"
+msgstr "Establecer transiciones en:"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Rename"
-msgstr "Renombrar Track de Anim"
+msgstr "Renombrar pista de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
-msgstr "Cambiar Interpolación de Track de Anim"
+msgstr "Cambiar interpolación de pista de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr "Cambiar Modo de Valor de Track de Anim"
+msgstr "Cambiar modo de valor de pista de animación"
#: tools/editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr "Editar Nodo Curva"
+msgstr "Editar nodo de curva"
#: tools/editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr "Editar Curva de Selección"
+msgstr "Editar curva de selección"
#: tools/editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr "Borrar Claves de Anim"
+msgstr "Borrar claves de animación"
#: tools/editor/animation_editor.cpp
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr "Duplicar Selección"
+msgstr "Duplicar selección"
#: tools/editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr "Duplicar Transpuesto"
+msgstr "Duplicar transpuesto"
#: tools/editor/animation_editor.cpp
msgid "Remove Selection"
-msgstr "Quitar Selección"
+msgstr "Quitar selección"
#: tools/editor/animation_editor.cpp
msgid "Continuous"
-msgstr "Contínuo"
+msgstr "Continuo"
#: tools/editor/animation_editor.cpp
msgid "Discrete"
@@ -872,27 +908,27 @@ msgstr "Trigger"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr "Agregar Clave de Anim"
+msgstr "Añadir clave de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr "Mover Claves de Anim"
+msgstr "Mover claves de animación"
#: tools/editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr "Escalar Selección"
+msgstr "Escalar selección"
#: tools/editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr "Escalar Desde Cursor"
+msgstr "Escalar desde cursor"
#: tools/editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr "Ir a Paso Próximo"
+msgstr "Ir al siguiente paso"
#: tools/editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr "Ir a Paso Previo"
+msgstr "Ir al paso anterior"
#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
msgid "Linear"
@@ -905,19 +941,19 @@ msgstr "Constante"
#: tools/editor/animation_editor.cpp
msgid "In"
-msgstr "In"
+msgstr "Entrada"
#: tools/editor/animation_editor.cpp
msgid "Out"
-msgstr "Out"
+msgstr "Salida"
#: tools/editor/animation_editor.cpp
msgid "In-Out"
-msgstr "In-Out"
+msgstr "Entrada-salida"
#: tools/editor/animation_editor.cpp
msgid "Out-In"
-msgstr "Out-In"
+msgstr "Salida-entrada"
#: tools/editor/animation_editor.cpp
msgid "Transitions"
@@ -925,19 +961,19 @@ msgstr "Transiciones"
#: tools/editor/animation_editor.cpp
msgid "Optimize Animation"
-msgstr "Optimizar Animación"
+msgstr "Optimizar animación"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr "Hacer Clean-Up de Animación"
+msgstr "Limpiar animación"
#: tools/editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr "Crear NUEVO track para %s e insertar clave?"
+msgstr "¿Quieres crear una NUEVA pista para %s e insertar clave?"
#: tools/editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr "Crear %d NUEVOS tracks e insertar claves?"
+msgstr "¿Quieres crear %d NUEVOS pistas e insertar claves?"
#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -950,39 +986,40 @@ msgstr "Crear"
#: tools/editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr "Crear e Insertar Anim"
+msgstr "Crear e insertar animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr "Insertar Track y Clave de Anim"
+msgstr "Insertar pista y clave de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr "Insertar Clave de Anim"
+msgstr "Insertar clave de animación"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr "Cambiar Largo de Anim"
+msgstr "Cambiar duración de animación"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr "Cambiar Loop de Anim"
+msgstr "Cambiar repeticiones de animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
-msgstr "Crear Clave de Valor Tipado para Anim"
+msgstr "Crear clave de valor de tipo para animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr "Insertar Anim"
+msgstr "Insertar animación"
#: tools/editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr "Escalar Keys de Anim"
+msgstr "Escalar claves de animación"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Add Call Track"
-msgstr "Agregar Call Track para Anim"
+msgstr "Añadir «call track» de animación"
#: tools/editor/animation_editor.cpp
msgid "Animation zoom."
@@ -990,11 +1027,11 @@ msgstr "Zoom de animación."
#: tools/editor/animation_editor.cpp
msgid "Length (s):"
-msgstr "Largo (s):"
+msgstr "Duración (seg.):"
#: tools/editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr "Largo de Animación (en segundos)."
+msgstr "Duración de animación (en segundos)."
#: tools/editor/animation_editor.cpp
msgid "Step (s):"
@@ -1006,47 +1043,47 @@ msgstr "Snap de cursor por pasos (en segundos)."
#: tools/editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr "Activar/Desactivar loopeo en la animación."
+msgstr "Repetir o no la animación."
#: tools/editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr "Agregar nuevos tracks."
+msgstr "Añadir nuevas pistas."
#: tools/editor/animation_editor.cpp
msgid "Move current track up."
-msgstr "Subir el track actual."
+msgstr "Subir la pista actual."
#: tools/editor/animation_editor.cpp
msgid "Move current track down."
-msgstr "Bajar el track actual."
+msgstr "Bajar la pista actual."
#: tools/editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr "Quitar el track seleccionado."
+msgstr "Quitar el pista seleccionada."
#: tools/editor/animation_editor.cpp
msgid "Track tools"
-msgstr "Herramientas de tracks"
+msgstr "Herramientas de pistas"
#: tools/editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr "Activar la edición de claves individuales al cliquearlas."
+msgstr "Editar claves individuales al hacer clic."
#: tools/editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr "Optimizador de Anim."
+msgstr "Optimizar animación"
#: tools/editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr "Error Lineal Max.:"
+msgstr "Máximo error lineal:"
#: tools/editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr "Error Angular Max.:"
+msgstr "Máximo error angular:"
#: tools/editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr "Angulo Optimizable Max.:"
+msgstr "Máximo ángulo optimizable:"
#: tools/editor/animation_editor.cpp
msgid "Optimize"
@@ -1055,6 +1092,8 @@ msgstr "Optimizar"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
+"Selecciona un AnimationPlayer desde el árbol de escenas para editar "
+"animaciones."
#: tools/editor/animation_editor.cpp
msgid "Key"
@@ -1066,47 +1105,48 @@ msgstr "Transición"
#: tools/editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr "Ratio de Escala:"
+msgstr "Relación de escalado:"
#: tools/editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr "Llamar Funciones en Cual Nodo?"
+msgstr "¿En qué nodo quieres llamar funciones?"
#: tools/editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr "Quitar claves inválidas"
+msgstr "Quitar claves incorrectas"
#: tools/editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr "Quitar tracks vacios y sin resolver"
+msgstr "Quitar pistas vacías y sin resolver"
#: tools/editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr "Hacer clean-up de todas las animaciones"
+msgstr "Limpiar todas las animaciones"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr "Hacer Clean-Up de Animación(es) (IMPOSIBLE DESHACER!)"
+msgstr "Limpiar todas las animaciones (IRREVERSIBLE)"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr "Clean-Up"
+msgstr "Limpiar"
#: tools/editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr "Redimencionar Array"
+msgstr "Redimensionar «array»"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr "Cambiar Tipo de Valor del Array"
+msgstr "Cambiar tipo de valor del «array»"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr "Cambiar Valor del Array"
+msgstr "Cambiar valor del «array»"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Buscar:"
@@ -1134,7 +1174,7 @@ msgstr "Sitio:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Support.."
-msgstr "Soporte.."
+msgstr "Ayuda..."
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Official"
@@ -1146,23 +1186,23 @@ msgstr "Comunidad"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr "Testeo"
+msgstr "Prueba"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr "Archivo ZIP de Assets"
+msgstr "Archivo ZIP de elementos"
#: tools/editor/call_dialog.cpp
msgid "Method List For '%s':"
-msgstr "Lista de Métodos Para '%s':"
+msgstr "Lista de métodos Para '%s':"
#: tools/editor/call_dialog.cpp
msgid "Call"
-msgstr "Llamar"
+msgstr "Llamada"
#: tools/editor/call_dialog.cpp
msgid "Method List:"
-msgstr "Lista de Métodos:"
+msgstr "Lista de métodos:"
#: tools/editor/call_dialog.cpp
msgid "Arguments:"
@@ -1170,23 +1210,23 @@ msgstr "Argumentos:"
#: tools/editor/call_dialog.cpp
msgid "Return:"
-msgstr "Retornar:"
+msgstr "Devuelve:"
#: tools/editor/code_editor.cpp
msgid "Go to Line"
-msgstr "Ir a Línea"
+msgstr "Ir a línea"
#: tools/editor/code_editor.cpp
msgid "Line Number:"
-msgstr "Numero de Línea:"
+msgstr "Número de línea:"
#: tools/editor/code_editor.cpp
msgid "No Matches"
-msgstr "Sin Coincidencias"
+msgstr "Sin soincidencias"
#: tools/editor/code_editor.cpp
msgid "Replaced %d Ocurrence(s)."
-msgstr "%d Ocurrencia(s) Reemplazada(s)."
+msgstr "%d ocurrencias reemplazadas."
#: tools/editor/code_editor.cpp
msgid "Replace"
@@ -1194,19 +1234,19 @@ msgstr "Reemplazar"
#: tools/editor/code_editor.cpp
msgid "Replace All"
-msgstr "Reemplazar Todo"
+msgstr "Reemplazar todo"
#: tools/editor/code_editor.cpp
msgid "Match Case"
-msgstr "Coincidir Mayúsculas/Minúsculas"
+msgstr "Coincidir mayús/minúsculas"
#: tools/editor/code_editor.cpp
msgid "Whole Words"
-msgstr "Palabras Completas"
+msgstr "Palabras completas"
#: tools/editor/code_editor.cpp
msgid "Selection Only"
-msgstr "Solo Selección"
+msgstr "Sólo selección"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
#: tools/editor/plugins/script_editor_plugin.cpp
@@ -1218,7 +1258,7 @@ msgstr "Buscar"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
msgid "Find"
-msgstr "Encontrar"
+msgstr "Búsqueda"
#: tools/editor/code_editor.cpp
msgid "Next"
@@ -1226,61 +1266,61 @@ msgstr "Siguiente"
#: tools/editor/code_editor.cpp
msgid "Replaced %d ocurrence(s)."
-msgstr "%d Ocurrencia(s) Reemplazadas."
+msgstr "%d ocurrencias reemplazadas."
#: tools/editor/code_editor.cpp
msgid "Not found!"
-msgstr "No se encontró!"
+msgstr "¡No se ha encontrado!"
#: tools/editor/code_editor.cpp
msgid "Replace By"
-msgstr "Reemplazar Por"
+msgstr "Reemplazar por"
#: tools/editor/code_editor.cpp
msgid "Case Sensitive"
-msgstr "Respetar Mayúsculas/Minúsculas"
+msgstr "Respetar mayús/minúsculas"
#: tools/editor/code_editor.cpp
msgid "Backwards"
-msgstr "Hacia Atrás"
+msgstr "Hacia atrás"
#: tools/editor/code_editor.cpp
msgid "Prompt On Replace"
-msgstr "Preguntar Antes de Reemplazar"
+msgstr "Preguntar antes de reemplazar"
#: tools/editor/code_editor.cpp
msgid "Skip"
-msgstr "Saltear"
+msgstr "Saltar"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom In"
-msgstr "Zoom In"
+msgstr "Acercar"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Out"
-msgstr "Zoom Out"
+msgstr "Alejar"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Restablecer zoom"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr "Linea:"
+msgstr "Línea:"
#: tools/editor/code_editor.cpp
msgid "Col:"
-msgstr "Col:"
+msgstr "Columna:"
#: tools/editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr "El método en el Nodo objetivo debe ser especificado!"
+msgstr "¡Debes establecer un método en el nodo seleccionado!"
#: tools/editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr "Conectar a Nodo:"
+msgstr "Conectar a nodo:"
#: tools/editor/connections_dialog.cpp
#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
@@ -1288,7 +1328,7 @@ msgstr "Conectar a Nodo:"
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Add"
-msgstr "Agregar"
+msgstr "Añadir"
#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
@@ -1298,20 +1338,21 @@ msgid "Remove"
msgstr "Quitar"
#: tools/editor/connections_dialog.cpp
+#, fuzzy
msgid "Add Extra Call Argument:"
-msgstr "Agregar Argumento de Llamada Extra:"
+msgstr "Añadir argumento de llamada extra:"
#: tools/editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr "Argumentos de Llamada Extras:"
+msgstr "Argumentos de llamada extras:"
#: tools/editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr "Ruta al Nodo:"
+msgstr "Ruta al nodo:"
#: tools/editor/connections_dialog.cpp
msgid "Make Function"
-msgstr "Crear Función"
+msgstr "Crear runción"
#: tools/editor/connections_dialog.cpp
msgid "Deferred"
@@ -1319,7 +1360,7 @@ msgstr "Diferido"
#: tools/editor/connections_dialog.cpp
msgid "Oneshot"
-msgstr "Oneshot"
+msgstr "Una vez"
#: tools/editor/connections_dialog.cpp
msgid "Connect"
@@ -1327,19 +1368,19 @@ msgstr "Conectar"
#: tools/editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr "Conectar '%s' a '%s'"
+msgstr "Conectar «%s» a «%s»"
#: tools/editor/connections_dialog.cpp
msgid "Connecting Signal:"
-msgstr "Conectando Señal:"
+msgstr "Conectando señal:"
#: tools/editor/connections_dialog.cpp
msgid "Create Subscription"
-msgstr "Crear Subscripción"
+msgstr "Crear suscripción"
#: tools/editor/connections_dialog.cpp
msgid "Connect.."
-msgstr "Conectar.."
+msgstr "Conectar..."
#: tools/editor/connections_dialog.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
@@ -1352,34 +1393,42 @@ msgstr "Señales"
#: tools/editor/create_dialog.cpp
msgid "Create New"
-msgstr "Crear Nuevo"
+msgstr "Crear nuevo"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Coincidencias:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descripción:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr "Buscar Reemplazo Para:"
+msgstr "Buscar reemplazo para:"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies For:"
-msgstr "Dependencias Para:"
+msgstr "Dependencias para:"
#: tools/editor/dependency_editor.cpp
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
msgstr ""
-"La Escena '%s' esta siendo editada actualmente.\n"
-"Los cambios no tendrán efecto hasta recargarlo."
+"Estás editando la escena «%s».\n"
+"Por lo que los cambios no tendrán efecto hasta que recargues."
#: tools/editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will take effect when reloaded."
-msgstr "El recurso '%s' está en uso. Los cambios tendrán efecto al recargarlo."
+msgstr ""
+"Se está usando el recurso «%s».\n"
+"Por lo que los cambios no tendrán efecto hasta que recargues."
#: tools/editor/dependency_editor.cpp
msgid "Dependencies"
@@ -1400,19 +1449,19 @@ msgstr "Dependencias:"
#: tools/editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr "Arreglar Rota(s)"
+msgstr "Arreglar rota(s)"
#: tools/editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr "Editor de Dependencias"
+msgstr "Editor de dependencias"
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr "Buscar Reemplazo de Recurso:"
+msgstr "Buscar reemplazo de recurso:"
#: tools/editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr "Dueños De:"
+msgstr "Dueños de:"
#: tools/editor/dependency_editor.cpp
msgid ""
@@ -1420,58 +1469,59 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
-"Los archivos que se están removiendo son requeridos por otros recursos para "
+"Otros recursos necesitan los archivos que estás intentando quitar para "
"funcionar.\n"
-"Quitarlos de todos modos? (imposible deshacer)"
+"¿Seguro que quieres quitarlos? (No puedes deshacerlo)"
#: tools/editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr "Quitar los archivos seleccionados del proyecto? (imposible deshacer)"
+msgstr ""
+"¿Quieres quitar los archivos seleccionados del proyecto? (No puedes "
+"deshacerlo)"
#: tools/editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr "Error cargando:"
+msgstr "Error al cargar:"
#: tools/editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
-"La escena falló al cargar debido a las siguientes dependencias faltantes:"
+msgstr "La escena no se pudo cargar porque faltan las siguientes dependencias:"
#: tools/editor/dependency_editor.cpp
msgid "Open Anyway"
-msgstr "Abrir de Todos Modos"
+msgstr "Abrir de todos modos"
#: tools/editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr "Que Acción Se Debería Tomar?"
+msgstr "¿Qué es lo que quieres hacer?"
#: tools/editor/dependency_editor.cpp
msgid "Fix Dependencies"
-msgstr "Arreglar Dependencias"
+msgstr "Arreglar dependencias"
#: tools/editor/dependency_editor.cpp
msgid "Errors loading!"
-msgstr "Errores al cargar!"
+msgstr "¡Hubo errores al cargar!"
#: tools/editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr "Eliminar permanentemente %d item(s)? (Imposible deshacer!)"
+msgstr "¿Quieres eliminar permanentemente %d elementos? (Irreversible)"
#: tools/editor/dependency_editor.cpp
msgid "Owns"
-msgstr "Es Dueño De"
+msgstr "Es dueño de"
#: tools/editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr "Recursos Sin Propietario Explícito:"
+msgstr "Recursos sin propietario explícito:"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr "Explorador de Recursos Huérfanos"
+msgstr "Explorador de recursos huérfanos"
#: tools/editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr "Eliminar archivos seleccionados?"
+msgstr "¿Quieres eliminar los archivos seleccionados?"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
@@ -1482,33 +1532,33 @@ msgstr "Eliminar"
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr "Nombre inválido."
+msgstr "El nombre no es correcto."
#: tools/editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr "Caracteres válidos:"
+msgstr "Letras válidas:"
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing engine class name."
msgstr ""
-"Nombre inválido. No debe colisionar con un nombre existente de clases del "
-"engine."
+"El nombre no es correcto. No puede coincidir con un nombre de clase que ya "
+"existe en el motor gráfico."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
msgstr ""
-"Nombre inválido. No debe colisionar con un nombre existente de un tipo built-"
-"in."
+"El nombre no es correcto. No puede coincidir con un nombre de tipo "
+"predeterminado que ya existe en el motor gráfico."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
-"Nombre inválido. No debe colisionar con un nombre de constante global "
-"existente."
+"El nombre no es correcto. No puede coincidir con un nombre de constante "
+"global que ya existe en el motor gráfico."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid Path."
-msgstr "Ruta inválida."
+msgstr "Ruta incorrecta."
#: tools/editor/editor_autoload_settings.cpp
msgid "File does not exist."
@@ -1520,27 +1570,27 @@ msgstr "No está en la ruta de recursos."
#: tools/editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr "Agregar AutoLoad"
+msgstr "Añadir «AutoLoad»"
#: tools/editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr "Autocargar '%s' ya existe!"
+msgstr "¡El Autoload «%s» ya existe!"
#: tools/editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr "Renombrar Autoload"
+msgstr "Renombrar «Autoload»"
#: tools/editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr "Act/Desact. AutoLoad Globals"
+msgstr "Des/activar globales de «Autoload»"
#: tools/editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr "Mover Autoload"
+msgstr "Mover «Autoload»"
#: tools/editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr "Quitar Autoload"
+msgstr "Quitar «Autoload»"
#: tools/editor/editor_autoload_settings.cpp
msgid "Enable"
@@ -1548,11 +1598,11 @@ msgstr "Activar"
#: tools/editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr "Reordenar Autoloads"
+msgstr "Reordenar «Autoloads»"
#: tools/editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr "Nombre de Nodo:"
+msgstr "Nombre del nodo:"
#: tools/editor/editor_autoload_settings.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
@@ -1563,7 +1613,7 @@ msgstr "Nombre"
#: tools/editor/editor_autoload_settings.cpp
msgid "Singleton"
-msgstr "Singleton"
+msgstr "«Singleton»"
#: tools/editor/editor_autoload_settings.cpp
msgid "List:"
@@ -1571,7 +1621,7 @@ msgstr "Lista:"
#: tools/editor/editor_data.cpp
msgid "Updating Scene"
-msgstr "Actualizando Escena"
+msgstr "Actualizando escena"
#: tools/editor/editor_data.cpp
msgid "Storing local changes.."
@@ -1583,7 +1633,7 @@ msgstr "Actualizando escena.."
#: tools/editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
-msgstr "Elegí un Directorio"
+msgstr "Elige una carpeta"
#: tools/editor/editor_dir_dialog.cpp
msgid "Choose"
@@ -1603,31 +1653,31 @@ msgstr "Subir"
#: tools/editor/editor_file_dialog.cpp
msgid "Refresh"
-msgstr "Refrescar"
+msgstr "Recargar"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr "Act/Desact. Archivos Ocultos"
+msgstr "Ver/ocultar archivos ocultos"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
-msgstr "Act/Desact. Favorito"
+msgstr "Añadir/quitar favorito"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Mode"
-msgstr "Act/Desact. Modo"
+msgstr "Cambiar modo"
#: tools/editor/editor_file_dialog.cpp
msgid "Focus Path"
-msgstr "Foco en Ruta"
+msgstr "Seleccionar ruta"
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr "Subir Favorito"
+msgstr "Subir favorito"
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr "Bajar Favorito"
+msgstr "Bajar favorito"
#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
msgid "Favorites:"
@@ -1639,23 +1689,23 @@ msgstr "Recientes:"
#: tools/editor/editor_file_dialog.cpp
msgid "Preview:"
-msgstr "Vista Previa:"
+msgstr "Vista previa:"
#: tools/editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr "EscanearFuentes"
+msgstr "AnalizandoFuentes"
#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
-msgstr "Ayuda de Búsqueda"
+msgstr "Ayuda de búsqueda"
#: tools/editor/editor_help.cpp
msgid "Class List:"
-msgstr "Lista de Clases:"
+msgstr "Lista de clases:"
#: tools/editor/editor_help.cpp
msgid "Search Classes"
-msgstr "Buscar Clases"
+msgstr "Buscar clases"
#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
msgid "Class:"
@@ -1672,39 +1722,35 @@ msgstr "Heredada por:"
#: tools/editor/editor_help.cpp
msgid "Brief Description:"
-msgstr "Descripción Breve:"
+msgstr "Descripción breve:"
#: tools/editor/editor_help.cpp
msgid "Public Methods:"
-msgstr "Métodos Públicos:"
+msgstr "Métodos públicos:"
#: tools/editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr "Items de Tema de la GUI:"
+msgstr "Elementos de tema de interfaz:"
#: tools/editor/editor_help.cpp
msgid "Constants:"
msgstr "Constantes:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descripción:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
-msgstr "Descripción de Métodos:"
+msgstr "Descripción de métodos:"
#: tools/editor/editor_help.cpp
msgid "Search Text"
-msgstr "Texto de Búsqueda"
+msgstr "Texto de búsqueda"
#: tools/editor/editor_import_export.cpp
msgid "Added:"
-msgstr "Agregado:"
+msgstr "Añadido:"
#: tools/editor/editor_import_export.cpp
msgid "Removed:"
-msgstr "Removido:"
+msgstr "Eliminado:"
#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
msgid "Error saving atlas:"
@@ -1712,11 +1758,11 @@ msgstr "Error al guardar atlas:"
#: tools/editor/editor_import_export.cpp
msgid "Could not save atlas subtexture:"
-msgstr "No se pudo guardar la subtextura de altas:"
+msgstr "No se pudo guardar la subtextura del altas:"
#: tools/editor/editor_import_export.cpp
msgid "Storing File:"
-msgstr "Almacenando Archivo:"
+msgstr "Almacén de archivo:"
#: tools/editor/editor_import_export.cpp
msgid "Packing"
@@ -1728,7 +1774,7 @@ msgstr "Exportando para %s"
#: tools/editor/editor_import_export.cpp
msgid "Setting Up.."
-msgstr "Configurando.."
+msgstr "Configurando..."
#: tools/editor/editor_log.cpp
msgid " Output:"
@@ -1744,23 +1790,23 @@ msgstr "Importando:"
#: tools/editor/editor_node.cpp
msgid "Node From Scene"
-msgstr "Nodo desde Escena"
+msgstr "Nodo desde escena"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/resources_dock.cpp
msgid "Error saving resource!"
-msgstr "Error al guardar el recurso!"
+msgstr "¡Hubo un error al guardar el recurso!"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/resources_dock.cpp
msgid "Save Resource As.."
-msgstr "Guardar Recurso Como.."
+msgstr "Guardar recurso como.."
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
msgid "I see.."
-msgstr "Ya Veo.."
+msgstr "Muy bien..."
#: tools/editor/editor_node.cpp
msgid "Can't open file for writing:"
@@ -1768,15 +1814,15 @@ msgstr "No se puede abrir el archivo para escribir:"
#: tools/editor/editor_node.cpp
msgid "Requested file format unknown:"
-msgstr "Formato requerido de archivo desconocido:"
+msgstr "Formato de archivo desconocido:"
#: tools/editor/editor_node.cpp
msgid "Error while saving."
-msgstr "Error al grabar."
+msgstr "Error al guardar."
#: tools/editor/editor_node.cpp
msgid "Saving Scene"
-msgstr "Guardar Escena"
+msgstr "Guardar escena"
#: tools/editor/editor_node.cpp
msgid "Analyzing"
@@ -1784,87 +1830,87 @@ msgstr "Analizando"
#: tools/editor/editor_node.cpp
msgid "Creating Thumbnail"
-msgstr "Creando Miniatura"
+msgstr "Creando miniatura"
#: tools/editor/editor_node.cpp
msgid ""
"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
msgstr ""
-"No se pudo guardar la escena. Probablemente no se hayan podido satisfacer "
-"dependencias (instancias)."
+"No se pudo guardar la escena. Es posible que no se hayan podido satisfacer "
+"las dependencias (instancias)."
#: tools/editor/editor_node.cpp
msgid "Failed to load resource."
-msgstr "Fallo al cargar recurso."
+msgstr "Hubo un problema al cargar el recurso."
#: tools/editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
-msgstr "No se puede cargar MeshLibrary para hacer merge!"
+msgstr "¡No se puede cargar MeshLibrary para poder unir los datos!"
#: tools/editor/editor_node.cpp
msgid "Error saving MeshLibrary!"
-msgstr "Error guardando MeshLibrary!"
+msgstr "¡Error al guardar la MeshLibrary!"
#: tools/editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
-msgstr "No se puede cargar TileSet para hacer merge!"
+msgstr "¡No se puede cargar TileSet para poder unir los datos!"
#: tools/editor/editor_node.cpp
msgid "Error saving TileSet!"
-msgstr "Error guardando TileSet!"
+msgstr "¡Error al guardar el TileSet!"
#: tools/editor/editor_node.cpp
msgid "Can't open export templates zip."
-msgstr "No se puede abir el zip de templates de exportación."
+msgstr "No se puede abir el zip de plantillas de exportación."
#: tools/editor/editor_node.cpp
msgid "Loading Export Templates"
-msgstr "Cargando Templates de Exportación"
+msgstr "Cargando plantillas de exportación"
#: tools/editor/editor_node.cpp
msgid "Error trying to save layout!"
-msgstr "Error al tratar de guardar el layout!"
+msgstr "¡Hubo un problema al intentar guardar los ajustes!"
#: tools/editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr "Layout por defecto del editor sobreescrito."
+msgstr "Se han sobrescrito los ajustes predeterminados del editor."
#: tools/editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr "Nombre de layout no encontrado!"
+msgstr "¡No se encuentra el nombre del ajuste!"
#: tools/editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr "Se restauró el layout por defecto a sus seteos base."
+msgstr "Se han restaurado los ajustes predeterminados."
#: tools/editor/editor_node.cpp
msgid "Copy Params"
-msgstr "Copiar Params"
+msgstr "Copiar parámetros"
#: tools/editor/editor_node.cpp
msgid "Paste Params"
-msgstr "Pegar Parametros"
+msgstr "Pegar parámetros"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Paste Resource"
-msgstr "Pegar Recurso"
+msgstr "Pegar recurso"
#: tools/editor/editor_node.cpp
msgid "Copy Resource"
-msgstr "Copiar Recurso"
+msgstr "Copiar recurso"
#: tools/editor/editor_node.cpp
msgid "Make Built-In"
-msgstr "Crear Built-In"
+msgstr "Hacerlo integrado"
#: tools/editor/editor_node.cpp
msgid "Make Sub-Resources Unique"
-msgstr "Crear Sub-Recurso Unico"
+msgstr "Crear subrecurso único"
#: tools/editor/editor_node.cpp
msgid "Open in Help"
-msgstr "Abrir en la Ayuda"
+msgstr "Abrir en la ayuda"
#: tools/editor/editor_node.cpp
msgid "There is no defined scene to run."
@@ -1876,9 +1922,9 @@ msgid ""
"You can change it later in later in \"Project Settings\" under the "
"'application' category."
msgstr ""
-"No se ha definido ninguna escena principal, ¿elegir una?\n"
-"Es posible cambiarla más tarde en \"Ajustes del Proyecto\" bajo la categoria "
-"'aplicacion'."
+"No se ha definido ninguna escena principal, ¿quieres elegir alguna?\n"
+"Es posible cambiarla más tarde en «Ajustes del proyecto» bajo la categoría "
+"«aplicación»."
#: tools/editor/editor_node.cpp
msgid ""
@@ -1908,51 +1954,52 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Could not start subprocess!"
-msgstr "No se pudo comenzar el subproceso!"
+msgstr "¡No se pudo comenzar el subproceso!"
#: tools/editor/editor_node.cpp
msgid "Open Scene"
-msgstr "Abrir Escena"
+msgstr "Abrir escena"
#: tools/editor/editor_node.cpp
msgid "Open Base Scene"
-msgstr "Abrir Escena Base"
+msgstr "Abrir escena base"
#: tools/editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr "Abrir Escena Rapido.."
+msgstr "Abrir escena rápido.."
#: tools/editor/editor_node.cpp
msgid "Quick Open Script.."
-msgstr "Abrir Script Rapido.."
+msgstr "Abrir script rápido.."
#: tools/editor/editor_node.cpp
msgid "Yes"
-msgstr "Si"
+msgstr "Sí"
#: tools/editor/editor_node.cpp
msgid "Close scene? (Unsaved changes will be lost)"
-msgstr "Cerrar escena? (Los cambios sin guardar se perderán)"
+msgstr "¿Quieres cerrar la escena? (Los cambios sin guardar se perderán)"
#: tools/editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr "Guardar Escena Como.."
+msgstr "Guardar escena como.."
#: tools/editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
-msgstr "Esta escena nunca ha sido guardada. Guardar antes de ejecutar?"
+msgstr ""
+"Esta escena nunca se ha guardado. ¿Quieres guardarla antes de ejecutarla?"
#: tools/editor/editor_node.cpp
msgid "Please save the scene first."
-msgstr "Por favor guardá la escena primero."
+msgstr "Prueba guardando la escena primero."
#: tools/editor/editor_node.cpp
msgid "Save Translatable Strings"
-msgstr "Guardar Strings Traducibles"
+msgstr "Guardar cadenas traducibles"
#: tools/editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr "Exportar Librería de Meshes"
+msgstr "Exportar biblioteca de modelos"
#: tools/editor/editor_node.cpp
msgid "Export Tile Set"
@@ -1964,11 +2011,11 @@ msgstr "Salir"
#: tools/editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr "Salir del editor?"
+msgstr "¿Quieres salir del editor?"
#: tools/editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
-msgstr "Escena actual sin guardar. Abrir de todos modos?"
+msgstr "La escena actual no se ha guardado. ¿Quieres abrirla de todos modos?"
#: tools/editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
@@ -1980,66 +2027,68 @@ msgstr "Revertir"
#: tools/editor/editor_node.cpp
msgid "This action cannot be undone. Revert anyway?"
-msgstr "Esta acción no se puede deshacer. Revertir de todos modos?"
+msgstr "Esta acción es irreversible. ¿Quieres revertirla de todos modos?"
#: tools/editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr "Ejecutar Escena Rapido.."
+msgstr "Ejecutar escena rápido.."
#: tools/editor/editor_node.cpp
msgid ""
"Open Project Manager? \n"
"(Unsaved changes will be lost)"
-msgstr "Abrir el Gestor de Proyectos? (Los cambios sin guardar se perderán)"
+msgstr ""
+"¿Quieres abrir el el administrador de proyectos?\n"
+"(Los cambios sin guardar se perderán)"
#: tools/editor/editor_node.cpp
msgid "Pick a Main Scene"
-msgstr "Elegí una Escena Principal"
+msgstr "Elige una escena principal"
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
msgid "Ugh"
-msgstr "Ugh"
+msgstr "Vaya"
#: tools/editor/editor_node.cpp
msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
-"Error al cargar la escena, debe estar dentro de la ruta del proyecto. Usa "
-"'Importar' para abrir la escena, luego guardala dentro de la ruta del "
-"proyecto."
+"Hubo un error al cargar la escena, debe estar dentro de la ruta del "
+"proyecto. Utiliza «Importar» para abrir la escena, luego guárdala dentro de "
+"la ruta del proyecto."
#: tools/editor/editor_node.cpp
msgid "Error loading scene."
-msgstr "Error al cargar la escena."
+msgstr "Hubo un error al cargar la escena."
#: tools/editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr "La escena '%s' tiene dependencias rotas:"
+msgstr "La escena «%s» tiene dependencias rotas:"
#: tools/editor/editor_node.cpp
msgid "Save Layout"
-msgstr "Guardar Layout"
+msgstr "Guardar ajustes"
#: tools/editor/editor_node.cpp
msgid "Delete Layout"
-msgstr "Eliminar Layout"
+msgstr "Borrar ajustes"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Default"
-msgstr "Por Defecto"
+msgstr "Predeterminado"
#: tools/editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr "Cambiar Pestaña de Escena"
+msgstr "Cambiar pestaña de escena"
#: tools/editor/editor_node.cpp
msgid "%d more file(s)"
-msgstr "%d archivo(s) más"
+msgstr "%d archivos más"
#: tools/editor/editor_node.cpp
msgid "%d more file(s) or folder(s)"
-msgstr "%d archivo(s) o carpeta(s) más"
+msgstr "%d archivos o carpetas más"
#: tools/editor/editor_node.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
@@ -2052,11 +2101,11 @@ msgstr "Ir a la escena abierta previamente."
#: tools/editor/editor_node.cpp
msgid "Fullscreen Mode"
-msgstr "Modo Pantalla Completa"
+msgstr "Modo pantalla completa"
#: tools/editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr "Modo Sin Distracciones"
+msgstr "Modo sin distracciones"
#: tools/editor/editor_node.cpp
msgid "Next tab"
@@ -2072,51 +2121,51 @@ msgstr "Operaciones con archivos de escena."
#: tools/editor/editor_node.cpp
msgid "New Scene"
-msgstr "Nueva Escena"
+msgstr "Nueva escena"
#: tools/editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr "Nueva Escena Heredada.."
+msgstr "Nueva escena heredada.."
#: tools/editor/editor_node.cpp
msgid "Open Scene.."
-msgstr "Abrir Escena.."
+msgstr "Abrir escena.."
#: tools/editor/editor_node.cpp
msgid "Save Scene"
-msgstr "Guardar Escena"
+msgstr "Guardar escena"
#: tools/editor/editor_node.cpp
msgid "Save all Scenes"
-msgstr "Guardar todas las Escenas"
+msgstr "Guardar todas las escenas"
#: tools/editor/editor_node.cpp
msgid "Close Scene"
-msgstr "Cerrar Escena"
+msgstr "Cerrar escena"
#: tools/editor/editor_node.cpp
msgid "Close Goto Prev. Scene"
-msgstr "Cerrar e Ir a Escena Prev."
+msgstr "Cerrar e ir a escena anterior"
#: tools/editor/editor_node.cpp
msgid "Open Recent"
-msgstr "Abrir Reciente"
+msgstr "Abrir reciente"
#: tools/editor/editor_node.cpp
msgid "Quick Filter Files.."
-msgstr "Filtrado Rapido de Archivos.."
+msgstr "Filtrado rápido de archivos..."
#: tools/editor/editor_node.cpp
msgid "Convert To.."
-msgstr "Convertir A.."
+msgstr "Convertir a..."
#: tools/editor/editor_node.cpp
msgid "Translatable Strings.."
-msgstr "Strings Traducibles.."
+msgstr "Cadenas traducibles..."
#: tools/editor/editor_node.cpp
msgid "MeshLibrary.."
-msgstr "MeshLibrary.."
+msgstr "MeshLibrary..."
#: tools/editor/editor_node.cpp
msgid "TileSet.."
@@ -2129,23 +2178,23 @@ msgstr "Rehacer"
#: tools/editor/editor_node.cpp
msgid "Run Script"
-msgstr "Ejecutar Script"
+msgstr "Ejecutar script"
#: tools/editor/editor_node.cpp
msgid "Project Settings"
-msgstr "Configuración de Proyecto"
+msgstr "Ajustes del proyecto"
#: tools/editor/editor_node.cpp
msgid "Revert Scene"
-msgstr "Revertir Escena"
+msgstr "Revertir escena"
#: tools/editor/editor_node.cpp
msgid "Quit to Project List"
-msgstr "Salir a Listado de Proyecto"
+msgstr "Salir al listado del proyecto"
#: tools/editor/editor_node.cpp
msgid "Import assets to the project."
-msgstr "Importar assets al proyecto."
+msgstr "Importar elementos al proyecto."
#: tools/editor/editor_node.cpp
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
@@ -2161,7 +2210,7 @@ msgstr "Importar"
#: tools/editor/editor_node.cpp
msgid "Miscellaneous project or scene-wide tools."
-msgstr "Herramientas misceláneas a nivel proyecto o escena."
+msgstr "Herramientas varias o de escenas."
#: tools/editor/editor_node.cpp
msgid "Tools"
@@ -2169,7 +2218,7 @@ msgstr "Herramientas"
#: tools/editor/editor_node.cpp
msgid "Export the project to many platforms."
-msgstr "Exportar el proyecto a munchas plataformas."
+msgstr "Exportar el proyecto a varias plataformas."
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Export"
@@ -2177,7 +2226,7 @@ msgstr "Exportar"
#: tools/editor/editor_node.cpp
msgid "Play the project."
-msgstr "Reproducir el proyecto."
+msgstr "Inicia el proyecto para poder jugarlo."
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
@@ -2190,11 +2239,11 @@ msgstr "Pausar la escena"
#: tools/editor/editor_node.cpp
msgid "Pause Scene"
-msgstr "Pausar la Escena"
+msgstr "Pausar la escena"
#: tools/editor/editor_node.cpp
msgid "Stop the scene."
-msgstr "Parar la escena."
+msgstr "Detener la escena."
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
@@ -2207,7 +2256,7 @@ msgstr "Reproducir la escena editada."
#: tools/editor/editor_node.cpp
msgid "Play Scene"
-msgstr "Reproducir Escena"
+msgstr "Reproducir escena"
#: tools/editor/editor_node.cpp
msgid "Play custom scene"
@@ -2215,27 +2264,27 @@ msgstr "Reproducir escena personalizada"
#: tools/editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr "Reproducir Escena Personalizada"
+msgstr "Reproducir escena personalizada"
#: tools/editor/editor_node.cpp
msgid "Debug options"
-msgstr "Opciones de debugueo"
+msgstr "Opciones de depuración"
#: tools/editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr "Hacer Deploy con Debug Remoto"
+msgstr "Exportar con depuración remota"
#: tools/editor/editor_node.cpp
msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
-"Al exportar o hacer deploy, el ejecutable resultante tratara de contectarse "
-"a la IP de esta computadora de manera de ser debugueado."
+"Al exportar o publicarlo, el ejecutable tratará de conectarse a la IP de "
+"este equipo para iniciar la depuración."
#: tools/editor/editor_node.cpp
msgid "Small Deploy with Network FS"
-msgstr "Depoy Pequeño con Network FS"
+msgstr "Exportación mini con recursos en red"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2246,16 +2295,15 @@ msgid ""
"On Android, deploy will use the USB cable for faster performance. This "
"option speeds up testing for games with a large footprint."
msgstr ""
-"Cuando esta opción está activa, exportar o hacer deploy producirá un "
+"Cuando esta opción está activa, al exportar o publicar se producirá un "
"ejecutable mínimo.\n"
-"El sistema de archivos sera proveido desde el proyecto por el editor sobre "
-"la red.\n"
-"En Android, deploy usará el cable USB para mejor performance. Esta opción "
-"acelera el testeo para juegos con footprint grande."
+"El sistema de archivos del proyecto se pasará desde el editor por la red.\n"
+"En Android, publicar utilizará el cable USB para un mejor rendimiento. Esta "
+"opción acelera los ciclos de prueba de juegos grandes."
#: tools/editor/editor_node.cpp
msgid "Visible Collision Shapes"
-msgstr "Collision Shapes Visibles"
+msgstr "Ver formas de colisión"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2267,19 +2315,19 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr "Navegación Visible"
+msgstr "Navegación visible"
#: tools/editor/editor_node.cpp
msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
-"Los meshes de navegación y los polígonos seran visibles durante la ejecución "
-"del juego si esta opción queda activada."
+"Si activas esta opción podrás ver los modelos y polígonos de navegación "
+"durante la ejecución del juego."
#: tools/editor/editor_node.cpp
msgid "Sync Scene Changes"
-msgstr "Sincronizar Cambios de Escena"
+msgstr "Sincronizar cambios de escena"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2295,7 +2343,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Sync Script Changes"
-msgstr "Actualizar Cambios en Scripts"
+msgstr "Actualizar cambios en scripts"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2311,19 +2359,19 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Settings"
-msgstr "Configuración"
+msgstr "Ajustes"
#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr "Configuración del Editor"
+msgstr "Ajustes del editor"
#: tools/editor/editor_node.cpp
msgid "Editor Layout"
-msgstr "Layout del Editor"
+msgstr "Ajustes de diseño del editor"
#: tools/editor/editor_node.cpp
msgid "Install Export Templates"
-msgstr "Instalar Templates de Exportación"
+msgstr "Instalar plantillas de exportación"
#: tools/editor/editor_node.cpp
msgid "About"
@@ -2339,11 +2387,11 @@ msgstr "Gira cuando la ventana del editor repinta!"
#: tools/editor/editor_node.cpp
msgid "Update Always"
-msgstr "Siempre Actualizar"
+msgstr "Actualizar siempre"
#: tools/editor/editor_node.cpp
msgid "Update Changes"
-msgstr "Actualizar Cambios"
+msgstr "Actualizar cambios"
#: tools/editor/editor_node.cpp
msgid "Inspector"
@@ -2363,11 +2411,11 @@ msgstr "Guardar el recurso editado actualmente."
#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
-msgstr "Guardar Como.."
+msgstr "Guardar como..."
#: tools/editor/editor_node.cpp
msgid "Go to the previous edited object in history."
-msgstr "Ir al anterior objeto editado en el historial."
+msgstr "Ir al objeto editado previo en el historial."
#: tools/editor/editor_node.cpp
msgid "Go to the next edited object in history."
@@ -2383,7 +2431,7 @@ msgstr "Propiedades del objeto."
#: tools/editor/editor_node.cpp
msgid "FileSystem"
-msgstr "FileSystem"
+msgstr "SistDeArchivos"
#: tools/editor/editor_node.cpp
msgid "Output"
@@ -2399,27 +2447,27 @@ msgstr "Actualizar"
#: tools/editor/editor_node.cpp
msgid "Thanks from the Godot community!"
-msgstr "Gracias de parte de la comunidad Godot!"
+msgstr "¡Muchas gracias de parte de la comunidad de Godot!"
#: tools/editor/editor_node.cpp
msgid "Thanks!"
-msgstr "Gracias!"
+msgstr "¡Gracias!"
#: tools/editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr "Importar Templates Desde Archivo ZIP"
+msgstr "Importar plantillas desde un archivo ZIP"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Export Project"
-msgstr "Exportar Proyecto"
+msgstr "Exportar proyecto"
#: tools/editor/editor_node.cpp
msgid "Export Library"
-msgstr "Exportar Libreria"
+msgstr "Exportar biblioteca"
#: tools/editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr "Mergear Con Existentes"
+msgstr "Unir con existentes"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Password:"
@@ -2427,19 +2475,19 @@ msgstr "Contraseña:"
#: tools/editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr "Abrir y Correr un Script"
+msgstr "Abrir y ejecutar un script"
#: tools/editor/editor_node.cpp
msgid "Load Errors"
-msgstr "Cargar Errores"
+msgstr "Errores de carga"
#: tools/editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr "Plugins Instalados:"
+msgstr "Plugins instalados:"
#: tools/editor/editor_plugin_settings.cpp
msgid "Version:"
-msgstr "Version:"
+msgstr "Versión:"
#: tools/editor/editor_plugin_settings.cpp
msgid "Author:"
@@ -2463,19 +2511,19 @@ msgstr "Medida:"
#: tools/editor/editor_profiler.cpp
msgid "Frame Time (sec)"
-msgstr "Duracion de Frame (seg)"
+msgstr "Duracion de cuadro (seg)"
#: tools/editor/editor_profiler.cpp
msgid "Average Time (sec)"
-msgstr "Tiempo Promedio (seg)"
+msgstr "Tiempo promedio (seg)"
#: tools/editor/editor_profiler.cpp
msgid "Frame %"
-msgstr "Frame %"
+msgstr "% de cuadro"
#: tools/editor/editor_profiler.cpp
msgid "Fixed Frame %"
-msgstr "Fixed Frame %"
+msgstr "% de cuadro fijo"
#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
msgid "Time:"
@@ -2491,11 +2539,11 @@ msgstr "Propio"
#: tools/editor/editor_profiler.cpp
msgid "Frame #:"
-msgstr "Frame #:"
+msgstr "Nº de cuadro:"
#: tools/editor/editor_reimport_dialog.cpp
msgid "Please wait for scan to complete."
-msgstr "Por favor aguarda a que el scan termine."
+msgstr "Espera a que termine el análisis."
#: tools/editor/editor_reimport_dialog.cpp
msgid "Current scene must be saved to re-import."
@@ -2503,15 +2551,15 @@ msgstr "La escena actual debe ser guardada para reimportar."
#: tools/editor/editor_reimport_dialog.cpp
msgid "Save & Re-Import"
-msgstr "Guardar y Reimportar"
+msgstr "Guardar y reimportar"
#: tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import Changed Resources"
-msgstr "Reimportar Recursos Cambiados"
+msgstr "Reimportar recursos cambiados"
#: tools/editor/editor_run_script.cpp
msgid "Write your logic in the _run() method."
-msgstr "Escribir tu lógica en el método _run()."
+msgstr "Escribe tu lógica en el método _run()."
#: tools/editor/editor_run_script.cpp
msgid "There is an edited scene already."
@@ -2535,19 +2583,19 @@ msgstr "Te olvidaste del método '_run'?"
#: tools/editor/editor_settings.cpp
msgid "Default (Same as Editor)"
-msgstr "Por Defecto (Igual que el Editor)"
+msgstr "Predeterminado (Igual que el editor)"
#: tools/editor/editor_sub_scene.cpp
msgid "Select Node(s) to Import"
-msgstr "Seleccionar Nodo(s) para Importar"
+msgstr "Selecciona nodos a importar"
#: tools/editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr "Ruta a la Escena:"
+msgstr "Ruta a la escena:"
#: tools/editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr "Importar Desde Nodo:"
+msgstr "Importar desde nodo:"
#: tools/editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
@@ -2557,15 +2605,17 @@ msgstr ""
#: tools/editor/filesystem_dock.cpp
msgid "Same source and destination files, doing nothing."
-msgstr "Archivos de origen y destino iguales, no se realizará ninguna acción."
+msgstr ""
+"Los archivos de origen y destino son iguales, no se realizará ninguna acción."
#: tools/editor/filesystem_dock.cpp
msgid "Same source and destination paths, doing nothing."
-msgstr "Ruta de origen y destino iguales, no se realizará ninguna acción."
+msgstr ""
+"Las rutas de origen y destino son iguales, no se realizará ninguna acción."
#: tools/editor/filesystem_dock.cpp
msgid "Can't move directories to within themselves."
-msgstr "No se pueden mover directorios dentro de si mismos."
+msgstr "No se pueden mover carpetas dentro de si mismas."
#: tools/editor/filesystem_dock.cpp
msgid "Can't operate on '..'"
@@ -2573,35 +2623,35 @@ msgstr "No se puede operar en '..'"
#: tools/editor/filesystem_dock.cpp
msgid "Pick New Name and Location For:"
-msgstr "Elejí un Nuevo Nombre y Ubicación Para:"
+msgstr "Elige un nombre nuevo y ubicación para:"
#: tools/editor/filesystem_dock.cpp
msgid "No files selected!"
-msgstr "Ningún Archivo seleccionado!"
+msgstr "¡No has seleccionado ningún archivo!"
#: tools/editor/filesystem_dock.cpp
msgid "Instance"
-msgstr "Instancia"
+msgstr "Instanciar"
#: tools/editor/filesystem_dock.cpp
msgid "Edit Dependencies.."
-msgstr "Editar Dependencias.."
+msgstr "Editar dependencias.."
#: tools/editor/filesystem_dock.cpp
msgid "View Owners.."
-msgstr "Ver Dueños.."
+msgstr "Ver dueños.."
#: tools/editor/filesystem_dock.cpp
msgid "Copy Path"
-msgstr "Copiar Ruta"
+msgstr "Copiar ruta"
#: tools/editor/filesystem_dock.cpp
msgid "Rename or Move.."
-msgstr "Renombrar o Mover.."
+msgstr "Renombrar o mover.."
#: tools/editor/filesystem_dock.cpp
msgid "Move To.."
-msgstr "Mover A.."
+msgstr "Mover a.."
#: tools/editor/filesystem_dock.cpp
msgid "Info"
@@ -2609,7 +2659,7 @@ msgstr "Info"
#: tools/editor/filesystem_dock.cpp
msgid "Show In File Manager"
-msgstr "Mostrar en Gestor de Archivos"
+msgstr "Mostrar en el navegador de archivos"
#: tools/editor/filesystem_dock.cpp
msgid "Re-Import.."
@@ -2617,15 +2667,15 @@ msgstr "Reimportando.."
#: tools/editor/filesystem_dock.cpp
msgid "Previous Directory"
-msgstr "Directorio Previo"
+msgstr "Carpeta anterior"
#: tools/editor/filesystem_dock.cpp
msgid "Next Directory"
-msgstr "Directorio Siguiente"
+msgstr "Carpeta siguiente"
#: tools/editor/filesystem_dock.cpp
msgid "Re-Scan Filesystem"
-msgstr "Reescanear Sistema de Archivos"
+msgstr "Reanalizar sistema de archivos"
#: tools/editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
@@ -2642,15 +2692,15 @@ msgstr "Mover"
#: tools/editor/groups_editor.cpp
msgid "Add to Group"
-msgstr "Agregar al Grupo"
+msgstr "Añadir al grupo"
#: tools/editor/groups_editor.cpp
msgid "Remove from Group"
-msgstr "Quitar del Grupo"
+msgstr "Quitar del grupo"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
msgid "No bit masks to import!"
-msgstr "Sin máscaras de bits para importar!"
+msgstr "¡Sin máscaras de bits para importar!"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
@@ -2686,7 +2736,7 @@ msgstr "Importar BitMasks"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture(s):"
-msgstr "Textura(s) de Origen:"
+msgstr "Texturas de origen:"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
@@ -2695,7 +2745,7 @@ msgstr "Textura(s) de Origen:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Target Path:"
-msgstr "Ruta de Destino:"
+msgstr "Ruta de destino:"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -2708,27 +2758,27 @@ msgstr "Aceptar"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
msgid "Bit Mask"
-msgstr "Máscara de Bits"
+msgstr "Máscara de bits"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "No source font file!"
-msgstr "Sin archivo de tipografías de origen!"
+msgstr "¡No se ha elegido ningún archivo de tipografías!"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "No target font resource!"
-msgstr "Sin recurso de tipografías de destino!"
+msgstr "¡No se ha elegido ningún recurso de tipografías!"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid ""
"Invalid file extension.\n"
"Please use .fnt."
msgstr ""
-"Extension de archivo inválida.\n"
-"Usá .fnt, por favor."
+"La extensión del archivo no es correcta.\n"
+"Prueba con la extensión .fnt."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Can't load/process source font."
-msgstr "No se puede cargar/procesar la tipografía de origen."
+msgstr "No se puede cargar/procesar la tipografía elegida."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Couldn't save font."
@@ -2736,15 +2786,15 @@ msgstr "No se pudo guardar la tipografía."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Source Font:"
-msgstr "Tipografía de Origen:"
+msgstr "Tipografía elegida:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Source Font Size:"
-msgstr "Tamaño de la Tipografía de Origen:"
+msgstr "Tamaño de la tipografía elegida:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Dest Resource:"
-msgstr "Recurso de Dest:"
+msgstr "Recurso de destino:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "The quick brown fox jumps over the lazy dog."
@@ -2763,15 +2813,15 @@ msgstr "Opciones:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Font Import"
-msgstr "Importar Tipografías"
+msgstr "Importar tipografías"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid ""
"This file is already a Godot font file, please supply a BMFont type file "
"instead."
msgstr ""
-"Este archivo ya es un archivo de tipografías de Godot, por favor suministrar "
-"un archivo tipo BMFont."
+"Este archivo ya es un archivo de tipografías de Godot, tienes que utilizar "
+"un archivo de tipo BMFont."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Failed opening as BMFont file."
@@ -2779,7 +2829,7 @@ msgstr "Error al abrir como archivo BMFont."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Invalid font custom source."
-msgstr "Origen personalizado de tipografía inválido."
+msgstr "El origen personalizado de tipografía no es correcto."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
@@ -2788,20 +2838,20 @@ msgstr "Tipografía"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "No meshes to import!"
-msgstr "Sin meshes para importar!"
+msgstr "¡No hay ningún modelo que se pueda importar!"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "Single Mesh Import"
-msgstr "Importar Mesh Individual"
+msgstr "Importar modelo individual"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "Source Mesh(es):"
-msgstr "Importar Mesh(es) de Origen:"
+msgstr "Modelo/s elegidos:"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh"
-msgstr "Mesh"
+msgstr "Modelos 3D"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "Surface %d"
@@ -2809,11 +2859,11 @@ msgstr "Superficie %d"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "No samples to import!"
-msgstr "Sin muestras que importar!"
+msgstr "¡No hay ningún sonido a importar!"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Import Audio Samples"
-msgstr "Importar Muestras de Audio"
+msgstr "Importar archivo de sonido"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Source Sample(s):"
@@ -2821,11 +2871,11 @@ msgstr "Muestra(s) de Origen:"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Audio Sample"
-msgstr "Muestra de Audio"
+msgstr "Archivo de sonido"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "New Clip"
-msgstr "Nuevo Clip"
+msgstr "Nuevo clip"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Animation Options"
@@ -2833,7 +2883,7 @@ msgstr "Opciones de Animación"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Flags"
-msgstr "Flags"
+msgstr "Identificadores"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Bake FPS:"
@@ -2845,15 +2895,15 @@ msgstr "Optimizar"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Linear Error"
-msgstr "Error Lineal Máximo"
+msgstr "Error lineal máximo"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Angular Error"
-msgstr "Error Angular Máximo"
+msgstr "Error angular máximo"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Angle"
-msgstr "Angulo Máximo"
+msgstr "Ángulo máximo"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Clips"
@@ -2861,16 +2911,16 @@ msgstr "Clips"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Start(s)"
-msgstr "Comienzo(s)"
+msgstr "Inicios"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "End(s)"
-msgstr "Fin(es)"
+msgstr "Finales"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Loop"
-msgstr "Loop"
+msgstr "Repetir"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Filters"
@@ -2886,7 +2936,7 @@ msgstr "No se pudo cargar el script post-importación."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Invalid/broken script for post-import."
-msgstr "Script post-importación inválido o roto."
+msgstr "El script de postimportación no es correcto o está roto."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Error importing scene."
@@ -2894,15 +2944,15 @@ msgstr "Error al importar escena."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import 3D Scene"
-msgstr "Importar Escena 3D"
+msgstr "Importar escena 3D"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Source Scene:"
-msgstr "Escena de Origen:"
+msgstr "Escena de origen:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Same as Target Scene"
-msgstr "Igual que Escena de Destino"
+msgstr "Igual que escena de destino"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Shared"
@@ -2910,11 +2960,11 @@ msgstr "Compartido"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Target Texture Folder:"
-msgstr "Carpeta de Textura de Destino:"
+msgstr "Carpeta de texturas elegida:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Post-Process Script:"
-msgstr "Script de Postprocesado:"
+msgstr "Script de posprocesado:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Custom Root Node Type:"
@@ -2926,50 +2976,51 @@ msgstr "Auto"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "The Following Files are Missing:"
-msgstr "Los Siguientes Archivos estan Faltando:"
+msgstr "Faltan los siguientes archivos:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import Anyway"
-msgstr "Importar de Todos Modos"
+msgstr "Importar de todos modos"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import & Open"
-msgstr "Importar y Abrir"
+msgstr "Importar y abrir"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Edited scene has not been saved, open imported scene anyway?"
msgstr ""
-"La escena editada no ha sido guardada, abrir la escena importada de todos "
-"modos?"
+"La escena editada no se ha guardado, ¿Quieres abrir la escena importada de "
+"todos modos?"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import Scene"
-msgstr "Importar Escena"
+msgstr "Importar escena"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Importing Scene.."
-msgstr "Importando Escena.."
+msgstr "Importando escena.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Running Custom Script.."
-msgstr "Ejecutando Script Personalizado.."
+msgstr "Ejecutando script personalizado.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Couldn't load post-import script:"
-msgstr "No se pudo cargar el script post importación:"
+msgstr "No se pudo cargar el script posimportación:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Invalid/broken script for post-import (check console):"
-msgstr "Script para post importación inválido/roto (revisá la consola):"
+msgstr ""
+"El script de posimportación no es correcto o está roto. (revisa la consola):"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Error running post-import script:"
-msgstr "Error ejecutando el script de post-importacion:"
+msgstr "Error ejecutando el script de posimportacion:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Import Image:"
-msgstr "Importar Imagen:"
+msgstr "Importar imagen:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Can't import a file over itself:"
@@ -2977,7 +3028,7 @@ msgstr "No se puede importar un archivo sobre si mismo:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Couldn't localize path: %s (already local)"
-msgstr "No se pudo localizar la ruta: %s (ya es local)"
+msgstr "No se pudo encontrar la ruta: %s (ya es local)"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Saving.."
@@ -2985,19 +3036,19 @@ msgstr "Guardando.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "3D Scene Animation"
-msgstr "Animacion de Escena 3D"
+msgstr "Animación de escena 3D"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Uncompressed"
-msgstr "Sin Comprimir"
+msgstr "Sin comprimir"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Compress Lossless (PNG)"
-msgstr "Compresión Sin Pérdidas (PNG)"
+msgstr "Compresión sin pérdidas (PNG)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Compress Lossy (WebP)"
-msgstr "Compresión con Pérdidas (WebP)"
+msgstr "Compresión con pérdidas (WebP)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Compress (VRAM)"
@@ -3005,27 +3056,27 @@ msgstr "Comprimir (VRAM)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture Format"
-msgstr "Formato de Textura"
+msgstr "Formato de textura"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture Compression Quality (WebP):"
-msgstr "Calidad de Compresión de Textura (WebP):"
+msgstr "Calidad de compresión de textura (WebP):"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture Options"
-msgstr "Opciones de Textura"
+msgstr "Opciones de textura"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Please specify some files!"
-msgstr "Por favor especificá algunos archivos!"
+msgstr "¡Selecciona algunos archivos!"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "At least one file needed for Atlas."
-msgstr "Se necesita al menos un archivo para el Atlas."
+msgstr "Se necesita al menos un archivo para el atlas."
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Error importing:"
-msgstr "Error al importar:"
+msgstr "Hubo un error al importar:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Only one file is required for large texture."
@@ -3033,47 +3084,47 @@ msgstr "Solo se requiere un archivo para textura grande."
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Max Texture Size:"
-msgstr "Tamaño Max. de Textura:"
+msgstr "Tamaño máximo de textura:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for Atlas (2D)"
-msgstr "Importar Texturas para Atlas (2D)"
+msgstr "Importar texturas para atlas (2D)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Cell Size:"
-msgstr "Tamaño de Celda:"
+msgstr "Tamaño de celda:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Large Texture"
-msgstr "Textura Grande"
+msgstr "Textura grande"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Large Textures (2D)"
-msgstr "Importar Texturas Grandes (2D)"
+msgstr "Importar texturas grandes (2D)"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture"
-msgstr "Textura de Origen"
+msgstr "Textura de origen"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Base Atlas Texture"
-msgstr "Textura Base de Atlas"
+msgstr "Textura base de atlas"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture(s)"
-msgstr "Textura(s) de Origen"
+msgstr "Texturas de origen"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for 2D"
-msgstr "Importar Texturas para 2D"
+msgstr "Importar texturas para 2D"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for 3D"
-msgstr "Importar Texturas para 3D"
+msgstr "Importar texturas para 3D"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures"
-msgstr "Importar Texturas"
+msgstr "Importar texturas"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "2D Texture"
@@ -3085,19 +3136,19 @@ msgstr "Textura 3D"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Atlas Texture"
-msgstr "Textura de Atlas"
+msgstr "Textura de atlas"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid ""
"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
"the project."
msgstr ""
-"AVISO: Importar texturas 2D no es obligatorio. Simplemente copiá los "
-"archivos png/jpg al proyecto."
+"AVISO: No es necesario importar texturas 2D. Limítate a copia los archivos "
+"png/jpg al proyecto."
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Crop empty space."
-msgstr "Cropear espacio vacio."
+msgstr "Recortar espacio vacío."
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Texture"
@@ -3105,15 +3156,15 @@ msgstr "Textura"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Large Texture"
-msgstr "Importar Textura Grande"
+msgstr "Importar textura grande"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Load Source Image"
-msgstr "Cargar Imagen de Origen"
+msgstr "Cargar imagen de origen"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Slicing"
-msgstr "Rebanar"
+msgstr "Troceando"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Inserting"
@@ -3129,11 +3180,11 @@ msgstr "No se pudo guardar la textura grande:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Build Atlas For:"
-msgstr "Construir Atlar Para:"
+msgstr "Construir atlas para:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Loading Image:"
-msgstr "Cargando Imagen:"
+msgstr "Cargando imagen:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Couldn't load image:"
@@ -3141,15 +3192,15 @@ msgstr "No se pudo cargar la imagen:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Converting Images"
-msgstr "Convirtiendo Imágenes"
+msgstr "Convirtiendo imágenes"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Cropping Images"
-msgstr "Cropeando Imágenes"
+msgstr "Recortando imágenes"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Blitting Images"
-msgstr "Haciendo Blitting de Imágenes"
+msgstr "Copiando datos de imágenes"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Couldn't save atlas image:"
@@ -3161,11 +3212,11 @@ msgstr "No se pudo guardar la textura convertida:"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Invalid source!"
-msgstr "Fuente inválida!"
+msgstr "¡Origen incorrecto!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Invalid translation source!"
-msgstr "Fuente de traducción inválida!"
+msgstr "¡Origen de traducción incorrecto!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Column"
@@ -3174,7 +3225,7 @@ msgstr "Columna"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
#: tools/editor/script_create_dialog.cpp
msgid "Language"
-msgstr "Lenguaje"
+msgstr "Idioma"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "No items to import!"
@@ -3182,23 +3233,23 @@ msgstr "Sin elementos para importar!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "No target path!"
-msgstr "Sin ruta de destino!"
+msgstr "¡El objetivo no tiene ruta!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Translations"
-msgstr "Importar Traducciones"
+msgstr "Importar traducciones"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Couldn't import!"
-msgstr "No se pudo importar!"
+msgstr "¡No se pudo importar!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Translation"
-msgstr "Importar Traducción"
+msgstr "Importar traducción"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Source CSV:"
-msgstr "CSV de Origen:"
+msgstr "CSV de origen:"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Ignore First Row"
@@ -3210,11 +3261,11 @@ msgstr "Comprimir"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Add to Project (engine.cfg)"
-msgstr "Agregar al Proyecto (engine.cfg)"
+msgstr "Añadir al proyecto (engine.cfg)"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Languages:"
-msgstr "Importar Lenguajes:"
+msgstr "Importar idiomas:"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Translation"
@@ -3222,7 +3273,7 @@ msgstr "Traducción"
#: tools/editor/multi_node_edit.cpp
msgid "MultiNode Set"
-msgstr "Setear MultiNodo"
+msgstr "Establecer multinodo"
#: tools/editor/node_dock.cpp
msgid "Node"
@@ -3234,92 +3285,92 @@ msgstr "Grupos"
#: tools/editor/node_dock.cpp
msgid "Select a Node to edit Signals and Groups."
-msgstr "Seleccionar un Nodo para editar Señales y Grupos."
+msgstr "Selecciona un nodo para editar señales y grupos."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr "Activar/Desact. Autoplay"
+msgstr "Des/activar reproducción automática"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr "Nombre de Animación Nueva:"
+msgstr "Nombre de animación nueva:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr "Nueva Animación"
+msgstr "Nueva animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr "Cambiar Nombre de Animación:"
+msgstr "Cambiar nombre de animación:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr "Quitar Animación"
+msgstr "Quitar animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr "ERROR: Nombre de animación inválido!"
+msgstr "ERROR: ¡El nombre de animación no es correcto!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr "ERROR: El nombre de animación ya existe!"
+msgstr "ERROR: ¡El nombre de animación ya existe!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr "Renombrar Animación"
+msgstr "Renombrar animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr "Agregar Animación"
+msgstr "Añadir animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
-msgstr "Blendear Próximo Cambiado"
+msgstr "Mezclar el siguiente cambio"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Blend Time"
-msgstr "Cambiar Tiempo de Blend"
+msgstr "Cambiar tiempo de mezcla"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr "Cargar Animación"
+msgstr "Cargar animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr "Duplicar Animación"
+msgstr "Duplicar animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr "ERROR: No hay animaciones para copiar!"
+msgstr "ERROR: ¡No hay animaciones para copiar!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
-msgstr "ERROR: No hay recursos de animación en el portapapeles!"
+msgstr "ERROR: ¡No hay recursos de animación en el portapapeles!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr "Animación Pegada"
+msgstr "Animación pegada"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr "Pegar Animación"
+msgstr "Pegar animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr "ERROR: No hay aniación que editar!"
+msgstr "ERROR: ¡No hay animación que editar!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
msgstr ""
-"Reproducir hacia atras la animación seleccionada desde la posicion actual (A)"
+"Reproducir hacia atrás la animación seleccionada desde la posición actual (A)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
msgstr ""
-"Reproducir hacia atrás la animación seleccionada desde el final. (Shift+A)"
+"Reproducir hacia atrás la animación seleccionada desde el final. (Mayús + A)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Stop animation playback. (S)"
@@ -3327,7 +3378,7 @@ msgstr "Detener la reproducción de la animación. (S)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
-msgstr "Reproducir animación seleccinada desde el principio. (Shift + D)"
+msgstr "Reproducir animación seleccionada desde el principio. (Mayús + D)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from current pos. (D)"
@@ -3359,15 +3410,15 @@ msgstr "Guardar la animación actual"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Save As"
-msgstr "Guardar Como"
+msgstr "Guardar como"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr "Diaplay list de animaciones en el reproductor."
+msgstr "Lista de animaciones en el reproductor."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
-msgstr "Autoreproducir al Cargar"
+msgstr "Autoreproducir al cargar"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Edit Target Blend Times"
@@ -3375,15 +3426,15 @@ msgstr "Editar Blend Times Objetivo"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr "Herramientas de Animación"
+msgstr "Herramientas de animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Copy Animation"
-msgstr "Copiar Animación"
+msgstr "Copiar animación"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
-msgstr "Crear Nueva Animación"
+msgstr "Crear animación nueva"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
@@ -3395,15 +3446,15 @@ msgstr "Nombre de Animación:"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
msgid "Error!"
-msgstr "Error!"
+msgstr "¡Error!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Times:"
-msgstr "Blend Times:"
+msgstr "Tiempos de mezcla:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Next (Auto Queue):"
-msgstr "Siguiente (Auto Queue):"
+msgstr "Siguiente (Auto enfilar):"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Cross-Animation Blend Times"
@@ -3425,23 +3476,23 @@ msgstr "Escala:"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade In (s):"
-msgstr "Fade In (s):"
+msgstr "Aparición (s):"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Fade Out (s):"
-msgstr "Fade Out (s):"
+msgstr "Desaparición (s):"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend"
-msgstr "Blend"
+msgstr "Mezclar"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix"
-msgstr "Mix"
+msgstr "Mezclar"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Auto Restart:"
-msgstr "Auto Reiniciar:"
+msgstr "Autoreiniciar:"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Restart (s):"
@@ -3449,11 +3500,11 @@ msgstr "Reiniciar (s):"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Random Restart (s):"
-msgstr "Reiniciar al Azar (s):"
+msgstr "Reiniciar al azar (s):"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Start!"
-msgstr "Iniciar!"
+msgstr "¡Iniciar!"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
#: tools/editor/plugins/multimesh_editor_plugin.cpp
@@ -3482,19 +3533,19 @@ msgstr "Actual:"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Add Input"
-msgstr "Agregar Entrada"
+msgstr "Añadir entrada"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Clear Auto-Advance"
-msgstr "Limpiar Auto Avanzar"
+msgstr "Borrar autoavanzar"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Set Auto-Advance"
-msgstr "Setear Auto Avanzar"
+msgstr "Establecer autoavanzar"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Delete Input"
-msgstr "Eliminar Entrada"
+msgstr "Eliminar entrada"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Rename"
@@ -3502,23 +3553,23 @@ msgstr "Renombrar"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is valid."
-msgstr "El árbol de animación es válido."
+msgstr "El árbol de animación es correcto."
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation tree is invalid."
-msgstr "El árbol de animación es inválido."
+msgstr "El árbol de animación no es correcto."
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Animation Node"
-msgstr "Nodo de Animación"
+msgstr "Nodo de animación"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "OneShot Node"
-msgstr "Nodo OneShot"
+msgstr "Nodo UnaVez"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix Node"
-msgstr "Nodo Mix"
+msgstr "Nodo Mezcla"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Blend2 Node"
@@ -3542,15 +3593,15 @@ msgstr "Nodo TimeSeek"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Transition Node"
-msgstr "Nodo Transición"
+msgstr "Nodo de transición"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr "Importar Animaciones.."
+msgstr "Importar animaciones.."
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
-msgstr "Editar Filtros de Nodo"
+msgstr "Editar filtros de nodo"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Filters.."
@@ -3558,11 +3609,11 @@ msgstr "Filtros.."
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Parsing %d Triangles:"
-msgstr "Parseando %d Triángulos:"
+msgstr "Leyendo %d triángulos:"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Triangle #"
-msgstr "Triangulo #"
+msgstr "Nº de triángulos"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Light Baker Setup:"
@@ -3570,11 +3621,11 @@ msgstr "Configuración de Baker de Luces:"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Parsing Geometry"
-msgstr "Parseando Geometría"
+msgstr "Leyendo geometría"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Fixing Lights"
-msgstr "Fijando/Corrigiendo Luces"
+msgstr "Procesando luces"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Making BVH"
@@ -3582,41 +3633,42 @@ msgstr "Creando BVH"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Creating Light Octree"
-msgstr "Creando Octree de Luces"
+msgstr "Creando octree de luces"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Creating Octree Texture"
-msgstr "Creando Octree de Texturas"
+msgstr "Creando octree de texturas"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Transfer to Lightmaps:"
-msgstr "Transferencia a Lightmaps:"
+msgstr "Transfiriendo a «lightmaps»:"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Allocating Texture #"
-msgstr "Asignando Textura #"
+msgstr "Asignando nº de textura"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Baking Triangle #"
-msgstr "Haciendo Bake de Triangulo #"
+msgstr "Quemando nº de triángulo"
#: tools/editor/plugins/baked_light_baker.cpp
msgid "Post-Processing Texture #"
-msgstr "Postprocesando Textura #"
+msgstr "Posprocesando nº de textura"
#: tools/editor/plugins/baked_light_editor_plugin.cpp
msgid "Bake!"
-msgstr "Hacer Bake!"
+msgstr "¡Quemar!"
#: tools/editor/plugins/baked_light_editor_plugin.cpp
msgid "Reset the lightmap octree baking process (start over)."
msgstr ""
-"Resetear el proceso de bake del octree de mapa de luces (empezar de nuevo)."
+"Restablece el proceso de «bake» del «octree» del «lightmap» (empezar de "
+"nuevo)."
#: tools/editor/plugins/camera_editor_plugin.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Preview"
-msgstr "Vista Previa"
+msgstr "Vista previa"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
@@ -3625,28 +3677,28 @@ msgstr "Configurar Snap"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Offset:"
-msgstr "Offset de Grilla:"
+msgstr "Desplazamiento de rejilla:"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid Step:"
-msgstr "Step de Grilla:"
+msgstr "Pasos de rejilla:"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Offset:"
-msgstr "Offset de Rotación:"
+msgstr "Desplazamiento de rotación:"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotation Step:"
-msgstr "Step de Rotación:"
+msgstr "Cantidad de rotaciones:"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Pivot"
-msgstr "Mover Pivote"
+msgstr "Mover pivote"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Move Action"
-msgstr "Mover Acción"
+msgstr "Mover acción"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Edit IK Chain"
@@ -3658,7 +3710,7 @@ msgstr "Editar CanvasItem"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Change Anchors"
-msgstr "Cambiar Anchors"
+msgstr "Cambiar anclas"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom (%):"
@@ -3666,12 +3718,11 @@ msgstr "Zoom (%):"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Paste Pose"
-msgstr "Pegar Pose"
+msgstr "Pegar pose"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "Seleccionar Modo (Q)"
+msgstr "Modo de selección"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3692,14 +3743,12 @@ msgid "Alt+RMB: Depth list selection"
msgstr "Alt+Click Der.: Selección en depth list"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "Modo Mover (W)"
+msgstr "Modo movimiento"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate Mode"
-msgstr "Modo Rotar (E)"
+msgstr "Modo rotación"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -3716,15 +3765,15 @@ msgstr "Click para cambiar el pivote de rotación de un objeto."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Pan Mode"
-msgstr "Modo Paneo"
+msgstr "Modo desplazamiento lateral"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr "Inmovilizar Objeto."
+msgstr "Inmovilizar el objeto."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
-msgstr "Desinmovilizar Objeto."
+msgstr "Liberar el objeto."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
@@ -3742,7 +3791,7 @@ msgstr "Usar Snap"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Show Grid"
-msgstr "Mostrar la Grilla"
+msgstr "Mostrar rejilla"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
@@ -3763,7 +3812,7 @@ msgstr "Usar Pixel Snap"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Expand to Parent"
-msgstr "Expandir al Padre"
+msgstr "Expandir al padre"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton.."
@@ -3771,19 +3820,19 @@ msgstr "Esqueleto.."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make Bones"
-msgstr "Crear Huesos"
+msgstr "Crear huesos"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
-msgstr "Reestablecer Huesos"
+msgstr "Reestablecer huesos"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr "Crear Cadena IK"
+msgstr "Crear cadena IK"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
-msgstr "Reestrablecer Cadena IK"
+msgstr "Reestrablecer cadena IK"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -3792,47 +3841,47 @@ msgstr "Ver"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Reset"
-msgstr "Resetear Zoom"
+msgstr "Restablecer zoom"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Set.."
-msgstr "Setear Zoom.."
+msgstr "Ajustar zoom..."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
-msgstr "Centrar Selección"
+msgstr "Centrar selección"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
-msgstr "Encuadrar Selección"
+msgstr "Encuadrar selección"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Anchor"
-msgstr "Anchor"
+msgstr "Ancla"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Keys"
-msgstr "Insertar Claves"
+msgstr "Insertar claves"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key"
-msgstr "Insertar Clave"
+msgstr "Insertar clave"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Insert Key (Existing Tracks)"
-msgstr "Insetar Clave (Tracks Existentes)"
+msgstr "Insertar clave (pistas existentes)"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Copy Pose"
-msgstr "Copiar Pose"
+msgstr "Copiar pose"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Pose"
-msgstr "Reestablecer Pose"
+msgstr "Restablecer pose"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Set a Value"
-msgstr "Setear un Valor"
+msgstr "Establecer valor"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap (Pixels):"
@@ -3843,7 +3892,7 @@ msgstr "Snap (Pixeles):"
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Poly"
-msgstr "Crear Polígono"
+msgstr "Crear polígono"
#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
@@ -3852,7 +3901,7 @@ msgstr "Crear Polígono"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Edit Poly"
-msgstr "Editar Polígono"
+msgstr "Editar polígono"
#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
@@ -3861,13 +3910,13 @@ msgstr "Editar Polígono"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Edit Poly (Remove Point)"
-msgstr "Editar Polígono (Remover Punto)"
+msgstr "Editar polígono (quitar punto)"
#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create a new polygon from scratch."
-msgstr "Crear un nuevo polígono de cero."
+msgstr "Crea un nuevo polígono desde cero."
#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
msgid "Create Poly3D"
@@ -3875,20 +3924,21 @@ msgstr "Crear Poly3D"
#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
msgid "Set Handle"
-msgstr "Setear Handle"
+msgstr "Establecer handle"
#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#, fuzzy
msgid "Add/Remove Color Ramp Point"
-msgstr "Agregar/Quitar Punto de Rampa de Color"
+msgstr "Añadir/quitar punto de rampa de color"
#: tools/editor/plugins/color_ramp_editor_plugin.cpp
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Modify Color Ramp"
-msgstr "Modificar Rampa de Color"
+msgstr "Modificar rampa de color"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Creating Mesh Library"
-msgstr "Crear Librería de Meshes"
+msgstr "Crear biblioteca de modelos 3D"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Thumbnail.."
@@ -3896,41 +3946,41 @@ msgstr "Miniatura.."
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove item %d?"
-msgstr "Remover item %d?"
+msgstr "¿Quieres borrar el elemento %d?"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Add Item"
-msgstr "Agregar Item"
+msgstr "Añadir elemento"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr "Remover Item Seleccionado"
+msgstr "Borrar elemento seleccionado"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import from Scene"
-msgstr "Importar desde Escena"
+msgstr "Importar desde escena"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Update from Scene"
-msgstr "Acutalizar desde Escena"
+msgstr "Actualizar desde escena"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
-msgstr "Item %d"
+msgstr "Elemento %d"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Items"
-msgstr "Items"
+msgstr "Elementos"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Item List Editor"
-msgstr "Editor de Lista de Items"
+msgstr "Editor de lista de elementos"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
-msgstr "Crear Polígono Oclusor"
+msgstr "Crear polígono oclusor"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
@@ -3940,110 +3990,113 @@ msgstr "Editar polígono existente:"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "LMB: Move Point."
-msgstr "Click. Izq: Mover Punto."
+msgstr "Clic izquierdo: Mover punto."
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Ctrl+LMB: Split Segment."
-msgstr "Ctrl+Click Izq.: Partir Segmento en Dos."
+msgstr "Ctrl + clic izquierdo: Partir segmento en dos."
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "RMB: Erase Point."
-msgstr "Click Der.: Borrar Punto."
+msgstr "Clic derecho: Borrar punto."
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh is empty!"
-msgstr "El Mesh esta vacío!"
+msgstr "¡El modelo está vacío!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Trimesh Body"
-msgstr "Crear Trimesh Body Estático"
+msgstr "Crear colisión estática triangular"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Static Convex Body"
-msgstr "Crear Body Convexo Estático"
+msgstr "Crear colisión estática convexa"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "This doesn't work on scene root!"
-msgstr "Esto no funciona en una escena raiz!"
+msgstr "¡No puedes hacer esto en una escena raíz!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Shape"
-msgstr "Crear Trimesh Shape"
+msgstr "Crear forma triangular"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Shape"
-msgstr "Crear Shape Convexa"
+msgstr "Crear forma convexa"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Navigation Mesh"
-msgstr "Crear Mesh de Navegación"
+msgstr "Crear modelo de navegación 3D"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "MeshInstance lacks a Mesh!"
-msgstr "A MeshInstance le falta un Mesh!"
+msgstr "¡A MeshInstance le falta un modelo 3D!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Mesh has not surface to create outlines from!"
-msgstr "El mesh no tiene una superficie de donde crear contornos(outlines)!"
+msgstr "¡El modelo 3D no tiene una superficie en la que crear contornos!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Could not create outline!"
-msgstr "No se pudo crear el outline!"
+msgstr "¡No se pudo crear el contorno!"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline"
-msgstr "Crear Outline"
+msgstr "Crear contorno"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Static Body"
-msgstr "Crear Body Estático Trimesh"
+msgstr "Crear colisión estática triangular"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Static Body"
-msgstr "Crear Body Estático Convexo"
+msgstr "Crear colisión estática convexa"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Trimesh Collision Sibling"
-msgstr "Crear Trimesh Collision Sibling"
+msgstr "Crear colisión hermanada triangular"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Convex Collision Sibling"
-msgstr "Crear Collision Sibling Convexo"
+msgstr "Crear colisión hermanada convexa"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh.."
-msgstr "Crear Outline Mesh.."
+msgstr "Crear modelo 3D de contorno.."
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Create Outline Mesh"
-msgstr "Crear Outline Mesh"
+msgstr "Crear modelo 3D de contorno"
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
msgid "Outline Size:"
-msgstr "Tamaño de Outline:"
+msgstr "Tamaño del contorno:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and no MultiMesh set in node)."
msgstr ""
-"No se especificó mesh de origen (y no hay MultiMesh seteado en el nodo)."
+"No se especificó ningún modelo 3D de origen (y no se ha establecido ningún "
+"MultiMesh en el nodo)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "No mesh source specified (and MultiMesh contains no Mesh)."
-msgstr "No se especificó mesh de origen (y MultiMesh no contiene ningún Mesh)."
+msgstr ""
+"No se especificó ningún modelo de origen (y MultiMesh no contiene ningún "
+"Mesh)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (invalid path)."
-msgstr "Mesh de origen inválido (ruta inválida)."
+msgstr "El origen del modelo es incorrecto (ruta incorrecta)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (not a MeshInstance)."
-msgstr "Mesh de origen inválido (no es un MeshInstance)."
+msgstr "El modelo elegido no es correcto (al no ser un MeshInstance)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh source is invalid (contains no Mesh resource)."
-msgstr "Mesh de origen inválido (no contiene ningun recurso Mesh)."
+msgstr "El modelo elegido no es correcto (no contiene ningún recurso Mesh)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "No surface source specified."
@@ -4051,7 +4104,7 @@ msgstr "Ninguna superficie de origen especificada."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (invalid path)."
-msgstr "La superficie de origen es inválida (ruta inválida)."
+msgstr "La superficie de origen es incorrecta (ruta inválida)."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Surface source is invalid (no geometry)."
@@ -4071,7 +4124,7 @@ msgstr "No se pudo mapear el area."
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Source Mesh:"
-msgstr "Seleccioná una Mesh de Origen:"
+msgstr "Elige un modelo 3D:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Target Surface:"
@@ -4079,59 +4132,59 @@ msgstr "Seleccioná una Superficie Objetivo:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate Surface"
-msgstr "Poblar Superficie"
+msgstr "Llenar superficie"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate MultiMesh"
-msgstr "Poblar MultiMesh"
+msgstr "Llenar MultiMesh"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Target Surface:"
-msgstr "Superficie Objetivo:"
+msgstr "Superficie objetivo:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Source Mesh:"
-msgstr "Mesh de Origen:"
+msgstr "Modelo 3D elegido:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "X-Axis"
-msgstr "Eje-X"
+msgstr "Eje X"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Y-Axis"
-msgstr "Eje-Y"
+msgstr "Eje Y"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Z-Axis"
-msgstr "Eje-Z"
+msgstr "Eje Z"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Mesh Up Axis:"
-msgstr "Eje Arriba del Mesh:"
+msgstr "Eje vertical del modelo:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Rotation:"
-msgstr "Rotación al Azar:"
+msgstr "Rotación al azar:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Tilt:"
-msgstr "Inclinación al Azar:"
+msgstr "Inclinación al azar:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Random Scale:"
-msgstr "Escala al Azar:"
+msgstr "Escala al azar:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate"
-msgstr "Poblar"
+msgstr "Rellenar"
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Create Navigation Polygon"
-msgstr "Crear Polígono de Navegación"
+msgstr "Crear polígono de navegación"
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Remove Poly And Point"
-msgstr "Remover Polígono y Punto"
+msgstr "Quitar polígono y punto"
#: tools/editor/plugins/particles_2d_editor_plugin.cpp
msgid "Error loading image:"
@@ -4139,23 +4192,24 @@ msgstr "Error al cargar la imagen:"
#: tools/editor/plugins/particles_2d_editor_plugin.cpp
msgid "No pixels with transparency > 128 in image.."
-msgstr "Sin pixeles con transparencia > 128 en imagen.."
+msgstr ""
+"No hay píxeles que tengan menos de un 128/255 de transparencia en la imagen.."
#: tools/editor/plugins/particles_2d_editor_plugin.cpp
msgid "Set Emission Mask"
-msgstr "Setear Máscara de Emisión"
+msgstr "Establecer máscara de emisión"
#: tools/editor/plugins/particles_2d_editor_plugin.cpp
msgid "Clear Emission Mask"
-msgstr "Limpiar Máscara de Emisión"
+msgstr "Borrar máscara de emisión"
#: tools/editor/plugins/particles_2d_editor_plugin.cpp
msgid "Load Emission Mask"
-msgstr "Cargar Máscara de Emisión"
+msgstr "Cargar máscara de emisión"
#: tools/editor/plugins/particles_2d_editor_plugin.cpp
msgid "Generated Point Count:"
-msgstr "Conteo de Puntos Generados:"
+msgstr "Conteo de puntos generados:"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Node does not contain geometry."
@@ -4167,11 +4221,11 @@ msgstr "El nodo no contiene geometría (caras)."
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Faces contain no area!"
-msgstr "Las caras no contienen area!"
+msgstr "¡Las caras no contienen área!"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "No faces!"
-msgstr "Sin caras!"
+msgstr "¡Sin caras!"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Generate AABB"
@@ -4179,27 +4233,27 @@ msgstr "Generar AABB"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter From Mesh"
-msgstr "Crear Emisor desde Mesh"
+msgstr "Crear emisor a partir de modelo"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter From Node"
-msgstr "Crear Emisor desde Nodo"
+msgstr "Crear emisor a partir de nodo"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Clear Emitter"
-msgstr "Limpiar Emisor"
+msgstr "Borrar emisor"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter"
-msgstr "Crear Emisor"
+msgstr "Crear emisor"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Emission Positions:"
-msgstr "Posiciones de Emisión:"
+msgstr "Posiciones de emisión:"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Emission Fill:"
-msgstr "Relleno de Emisión:"
+msgstr "Relleno de emisión:"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Surface"
@@ -4211,12 +4265,13 @@ msgstr "Volumen"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
-msgstr "Remover Punto de Curva"
+msgstr "Borrar punto de curva"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
+#, fuzzy
msgid "Add Point to Curve"
-msgstr "Agregar Punto a Curva"
+msgstr "Añadir punto a curva"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
msgid "Move Point in Curve"
@@ -4233,86 +4288,87 @@ msgstr "Mover Out-Control en Curva"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Select Points"
-msgstr "Seleccionar Puntos"
+msgstr "Seleccionar puntos"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Shift+Drag: Select Control Points"
-msgstr "Shift+Arrastrar: Seleccionar Puntos de Control"
+msgstr "Mayús + arrastrar: Seleccionar puntos de control"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
+#, fuzzy
msgid "Click: Add Point"
-msgstr "Click: Agregar Punto"
+msgstr "Clic: Añadir punto"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Right Click: Delete Point"
-msgstr "Click Derecho: Eliminar Punto"
+msgstr "Clic derecho: Eliminar punto"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
msgid "Select Control Points (Shift+Drag)"
-msgstr "Seleccionar Puntos de Control (Shift+Arrastrar)"
+msgstr "Seleccionar puntos de control (Mayús + arrastrar)"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Add Point (in empty space)"
-msgstr "Agregar Punto (en espacio vacío)"
+msgstr "Añadir punto (en espacio vacío)"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Split Segment (in curve)"
-msgstr "Partir Segmento (en curva)"
+msgstr "Dividir segmento (en curva)"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Delete Point"
-msgstr "Eliminar Punto"
+msgstr "Eliminar punto"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
-msgstr "Cerrar Curva"
+msgstr "Cerrar curva"
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
-msgstr "Punto # de Curva"
+msgstr "Nº de punto en curva"
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Set Curve Point Pos"
-msgstr "Setear Pos. de Punto de Curva"
+msgstr "Establecer pos. de punto de curva"
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Set Curve In Pos"
-msgstr "Setear Pos. In de Curva"
+msgstr "Establecer pos. de entrada de curva"
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Set Curve Out Pos"
-msgstr "Setear Pos. Out de Curva"
+msgstr "Establecer pos. de salida de curva"
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Split Path"
-msgstr "Partir Path"
+msgstr "Dividir ruta"
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Remove Path Point"
-msgstr "Quitar Punto del Path"
+msgstr "Quitar Punto de ruta"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
-msgstr "Crear Mapa UV"
+msgstr "Crear mapa UV"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform UV Map"
-msgstr "Transformar Mapa UV"
+msgstr "Transformar mapa UV"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon 2D UV Editor"
-msgstr "Editor UV de Polígonos 2D"
+msgstr "Editor UV de polígonos en 2D"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Move Point"
-msgstr "Mover Punto"
+msgstr "Mover punto"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Ctrl: Rotate"
@@ -4320,23 +4376,23 @@ msgstr "Ctrl: Rotar"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift: Move All"
-msgstr "Shift: Mover Todos"
+msgstr "Mayús: Mover todos"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Shift+Ctrl: Scale"
-msgstr "Shift+Ctrl: Escalar"
+msgstr "Mayús + Ctrl: Escalar"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Move Polygon"
-msgstr "Mover Polígono"
+msgstr "Mover polígono"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Rotate Polygon"
-msgstr "Rotar Polígono"
+msgstr "Rotar polígono"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Scale Polygon"
-msgstr "Escalar Polígono"
+msgstr "Escalar polígono"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Polygon->UV"
@@ -4361,73 +4417,73 @@ msgstr "Activar Snap"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Grid"
-msgstr "Grilla"
+msgstr "Rejilla"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "ERROR: Couldn't load resource!"
-msgstr "ERROR: No se pudo cargar el recurso!"
+msgstr "¡ERROR: No se pudo cargar el recurso!"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Add Resource"
-msgstr "Agregar Recurso"
+msgstr "Añadir recurso"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Rename Resource"
-msgstr "Renombrar Recurso"
+msgstr "Renombrar recurso"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Resource"
-msgstr "Eliminar Recurso"
+msgstr "Eliminar recurso"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Resource clipboard is empty!"
-msgstr "Clipboard de Recursos vacío!"
+msgstr "¡El portapapeles de recursos está vacío!"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Load Resource"
-msgstr "Cargar Recurso"
+msgstr "Cargar recurso"
#: tools/editor/plugins/rich_text_editor_plugin.cpp
msgid "Parse BBCode"
-msgstr "Parsear BBCode"
+msgstr "Leer BBCode"
#: tools/editor/plugins/sample_editor_plugin.cpp
msgid "Length:"
-msgstr "Largo:"
+msgstr "Duración:"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Open Sample File(s)"
-msgstr "Abrir Archivo(s) de Muestra"
+msgstr "Abrir archivos de sonido"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "ERROR: Couldn't load sample!"
-msgstr "ERROR: No se pudo cargar la muestra!"
+msgstr "¡ERROR: No se pudo cargar el archivo de sonido!"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Add Sample"
-msgstr "Agregar Muestra"
+msgstr "Añadir archivo de sonido"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Rename Sample"
-msgstr "Renombrar Muestra"
+msgstr "Renombrar archivo de sonido"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Delete Sample"
-msgstr "Eliminar Muestra"
+msgstr "Eliminar archivo de sonido"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "16 Bits"
-msgstr "16 Bits"
+msgstr "16 bits"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "8 Bits"
-msgstr "8 Bits"
+msgstr "8 bits"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Stereo"
-msgstr "Estereo"
+msgstr "Estéreo"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Mono"
@@ -4460,11 +4516,11 @@ msgstr "Error al importar"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Import Theme"
-msgstr "Importar Tema"
+msgstr "Importar tema"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As.."
-msgstr "Guardar Tema Como.."
+msgstr "Guardar tema como.."
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Next script"
@@ -4486,52 +4542,51 @@ msgstr "Nuevo"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save All"
-msgstr "Guardar Todo"
+msgstr "Guardar todo"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Soft Reload Script"
-msgstr "Recarga Soft de Script"
+msgstr "Recargar parcialmente el script"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "History Prev"
-msgstr "Previo en Historial"
+msgstr "Previo en historial"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "History Next"
-msgstr "Siguiente en Historial"
+msgstr "Siguiente en el historial"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Reload Theme"
-msgstr "Recargar Tema"
+msgstr "Recargar tema"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save Theme"
-msgstr "Guardar Tema"
+msgstr "Guardar tema"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As"
-msgstr "Guardar Tema Como"
+msgstr "Guardar tema como"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "Clonar hacia Abajo"
+msgstr "Cerrar documentación"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Find.."
-msgstr "Encontrar.."
+msgstr "Buscar..."
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
-msgstr "Encontrar Siguiente"
+msgstr "Buscar siguiente"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Debug"
-msgstr "Debuguear"
+msgstr "Depurar"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
@@ -4555,7 +4610,7 @@ msgstr "Continuar"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr "Mantener el Debugger Abierto"
+msgstr "Mantener el depurador abierto"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Window"
@@ -4563,11 +4618,11 @@ msgstr "Ventana"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Move Left"
-msgstr "Mover a la Izquierda"
+msgstr "Mover a la izquierda"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Move Right"
-msgstr "Mover a la Derecha"
+msgstr "Mover a la derecha"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Tutorials"
@@ -4575,7 +4630,7 @@ msgstr "Tutoriales"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Open https://godotengine.org at tutorials section."
-msgstr "Abrir https://godotengine.org en la sección de tutoriales."
+msgstr "Abre https://godotengine.org en la sección de tutoriales."
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Classes"
@@ -4599,7 +4654,7 @@ msgstr "Ir a siguiente documento editado."
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Create Script"
-msgstr "Crear Script"
+msgstr "Crear script"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid ""
@@ -4607,27 +4662,27 @@ msgid ""
"What action should be taken?:"
msgstr ""
"Los siguientes archivos son nuevos en disco.\n"
-"¿Qué acción se debería tomar?:"
+"¿Qué es lo que quieres hacer?:"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Reload"
-msgstr "Volver a Cargar"
+msgstr "Volver a cargar"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Resave"
-msgstr "Volver a Guardar"
+msgstr "Volver a guardar"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
msgid "Debugger"
-msgstr "Debugger"
+msgstr "Depurador"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid ""
"Built-in scripts can only be edited when the scene they belong to is loaded"
msgstr ""
-"Los scripts built-in solo pueden ser editados cuando la escena a la que "
-"pertenecen esta cargada"
+"Los scripts integrados sólo se pueden editar cuando la escena a la que "
+"pertenecen está cargada"
#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
msgid "Move Up"
@@ -4639,66 +4694,66 @@ msgstr "Bajar"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Indent Left"
-msgstr "Indentar a la Izq"
+msgstr "Indentar a la izquierda"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Indent Right"
-msgstr "Indentar a la Der"
+msgstr "Indentar a la derecha"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Comment"
-msgstr "Act/Desact. Comentario"
+msgstr "Des/activar comentario"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Clone Down"
-msgstr "Clonar hacia Abajo"
+msgstr "Clonar hacia abajo"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Complete Symbol"
-msgstr "Completar Símbolo"
+msgstr "Completar símbolo"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Trim Trailing Whitespace"
-msgstr "Eliminar Espacios Sobrantes al Final"
+msgstr "Borrar espacios sobrantes al final"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Auto Indent"
-msgstr "Auto Indentar"
+msgstr "Autoindentar"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Remove All Breakpoints"
-msgstr "Quitar Todos los Breakpoints"
+msgstr "Desactivar todos los «breakpoints»"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Goto Next Breakpoint"
-msgstr "Ir a Próximo Breakpoint"
+msgstr "Ir a siguiente «breakpoint»"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Goto Previous Breakpoint"
-msgstr "Ir a Anterior Breakpoint"
+msgstr "Ir al «breakpoint» anterior"
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
-msgstr "Encontrar Anterior"
+msgstr "Buscar anterior"
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Replace.."
-msgstr "Reemplazar.."
+msgstr "Reemplazar..."
#: tools/editor/plugins/script_text_editor.cpp
msgid "Goto Function.."
-msgstr "Ir a Función.."
+msgstr "Ir a función..."
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
-msgstr "Ir a Línea.."
+msgstr "Ir a línea.."
#: tools/editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
-msgstr "Ayuda Contextual"
+msgstr "Ayuda contextual"
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Vertex"
@@ -4785,12 +4840,13 @@ msgid "Change Comment"
msgstr "Cambiar Comentarío"
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Add/Remove to Color Ramp"
-msgstr "Agregar/Quitar a Rampa de Color"
+msgstr "Añadir/quitar a/de rampa de color"
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add/Remove to Curve Map"
-msgstr "Agregar/quitar a Mapa de Curvas"
+msgstr "Añadir/quitar a/de mapa de curvas"
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Modify Curve Map"
@@ -4833,8 +4889,9 @@ msgid "Error: Missing Input Connections"
msgstr "Error: Conecciones de Entrada Faltantes"
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+#, fuzzy
msgid "Add Shader Graph Node"
-msgstr "Agregar Nodo de Gráficos de Shader"
+msgstr "Añadir nodo de gráficos de sombreador"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Orthogonal"
@@ -4846,35 +4903,35 @@ msgstr "Perspectiva"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Aborted."
-msgstr "Transformación Abortada."
+msgstr "Se ha cancelado la transformación."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "X-Axis Transform."
-msgstr "Transformación en Eje-X."
+msgstr "Transformación en el eje X."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Y-Axis Transform."
-msgstr "Transformación en Eje-Y."
+msgstr "Transformación en el eje Y."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Z-Axis Transform."
-msgstr "Transformación en Eje-Z."
+msgstr "Transformación en el eje Z."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Plane Transform."
-msgstr "Ver Transformación en Plano."
+msgstr "Ver transformación en plano."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Scaling to %s%%."
-msgstr "Escalando a %s%%."
+msgstr "Escalando al %s%%."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rotating %s degrees."
-msgstr "Torando %s grados."
+msgstr "Girando %s grados."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View."
-msgstr "Vista Inferior."
+msgstr "Vista inferior."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom"
@@ -4882,7 +4939,7 @@ msgstr "Fondo"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Top View."
-msgstr "Vista Superior."
+msgstr "Vista superior."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Top"
@@ -4890,7 +4947,7 @@ msgstr "Cima"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View."
-msgstr "Vista Anterior."
+msgstr "Vista anterior."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rear"
@@ -4898,7 +4955,7 @@ msgstr "Detrás"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Front View."
-msgstr "Vista Frontal."
+msgstr "Vista frontal."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Front"
@@ -4906,7 +4963,7 @@ msgstr "Frente"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Left View."
-msgstr "Vista Izquierda."
+msgstr "Vista izquierda."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Left"
@@ -4914,7 +4971,7 @@ msgstr "Izquierda"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Right View."
-msgstr "Vista Derecha."
+msgstr "Vista derecha."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Right"
@@ -4926,7 +4983,7 @@ msgstr "Poner claves está desactivado (no se insertaron claves)."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Animation Key Inserted."
-msgstr "Clave de Animación Insertada."
+msgstr "Clave de animación insertada."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Align with view"
@@ -4946,71 +5003,71 @@ msgstr "Gizmos"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "XForm Dialog"
-msgstr "Dialogo XForm"
+msgstr "Ventana de transformación"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "No scene selected to instance!"
-msgstr "Ninguna escena seleccionada a la instancia!"
+msgstr "¡No se ha elegido ninguna escena a instanciar!"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Instance at Cursor"
-msgstr "Instancia en Cursor"
+msgstr "Instanciar en cursor"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Could not instance scene!"
-msgstr "No se pudo instanciar la escena!"
+msgstr "¡No se pudo instanciar la escena!"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Move Mode (W)"
-msgstr "Modo Mover (W)"
+msgstr "Modo movimiento (W)"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate Mode (E)"
-msgstr "Modo Rotar (E)"
+msgstr "Modo rotación (E)"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Scale Mode (R)"
-msgstr "Modo de Escalado (R)"
+msgstr "Modo escalado (R)"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Bottom View"
-msgstr "Vista Inferior"
+msgstr "Vista inferior"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Top View"
-msgstr "Vista Superior"
+msgstr "Vista superior"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rear View"
-msgstr "Vista Anterior"
+msgstr "Vista anterior"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Front View"
-msgstr "Vista Frontal"
+msgstr "Vista frontal"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Left View"
-msgstr "Vista Izquierda"
+msgstr "Vista izquierda"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Right View"
-msgstr "Vista Derecha"
+msgstr "Vista derecha"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Switch Perspective/Orthogonal view"
-msgstr "Intercambiar entre vista Perspectiva/Orthogonal"
+msgstr "Intercambiar entre vista de perspectiva y ortogonal"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Insert Animation Key"
-msgstr "Insertar Clave de Animación"
+msgstr "Insertar clave de animación"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Focus Selection"
-msgstr "Foco en Selección"
+msgstr "Seleccionar"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Align Selection With View"
-msgstr "Alinear Selección Con Vista"
+msgstr "Alinear selección con visor"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform"
@@ -5018,67 +5075,67 @@ msgstr "Transformar"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Local Coords"
-msgstr "Coordenadas Locales"
+msgstr "Coordenadas locales"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Dialog.."
-msgstr "Dialogo de Transformación.."
+msgstr "Ventana de transformación.."
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Use Default Light"
-msgstr "Usar Luz por Defecto"
+msgstr "Usar iluminación predeterminada"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Use Default sRGB"
-msgstr "Usar sRGB por Defecto"
+msgstr "Usar sRGB predeterminado"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "1 Viewport"
-msgstr "1 Viewport"
+msgstr "1 visor"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "2 Viewports"
-msgstr "2 Viewports"
+msgstr "2 visores"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "2 Viewports (Alt)"
-msgstr "2 Viewports (Alt)"
+msgstr "2 visores (altern.)"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports"
-msgstr "3 Viewports"
+msgstr "3 visores"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "3 Viewports (Alt)"
-msgstr "3 Viewports (Alt)"
+msgstr "3 visores (altern.)"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "4 Viewports"
-msgstr "4 Viewports"
+msgstr "4 visores"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Normal"
-msgstr "Mostrar Normales"
+msgstr "Mostrar normales"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Wireframe"
-msgstr "Mostrar Wireframe"
+msgstr "Mostrar polígonos"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Overdraw"
-msgstr "Mostrar Overdraw"
+msgstr "Mostrar superposiciones"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Display Shadeless"
-msgstr "Mostrar sin Sombreado"
+msgstr "Mostrar sin sombras"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Origin"
-msgstr "Ver Origen"
+msgstr "Ver origen"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Grid"
-msgstr "Ver Grilla"
+msgstr "Ver rejilla"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Snap Settings"
@@ -5098,83 +5155,83 @@ msgstr "Snap de Escala (%):"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Viewport Settings"
-msgstr "Ajustes de Viewport"
+msgstr "Ajustes del visor"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Default Light Normal:"
-msgstr "Normales de Luces por Defecto:"
+msgstr "Iluminación por normales predeterminada:"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Ambient Light Color:"
-msgstr "Color de Luz Ambiental:"
+msgstr "Color de iluminación ambiental:"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Perspective FOV (deg.):"
-msgstr "FOV de Perspectiva (grados.):"
+msgstr "Anchura de perspectiva (en grados):"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Near:"
-msgstr "Z-Near de Vista:"
+msgstr "Profundidad mínima de vista:"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "View Z-Far:"
-msgstr "Z-Far de Vista:"
+msgstr "Profundidad máxima de vista:"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Change"
-msgstr "Cambio de Transformación"
+msgstr "Cambio de transformación"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Translate:"
-msgstr "Trasladar:"
+msgstr "Mover:"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate (deg.):"
-msgstr "Rotar (grados.):"
+msgstr "Girar (grados):"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Scale (ratio):"
-msgstr "Scalar (ratio):"
+msgstr "Escalar (porcentaje):"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Transform Type"
-msgstr "Tipo de Transformación"
+msgstr "Tipo de transformación"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Pre"
-msgstr "Pre"
+msgstr "Previa"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Post"
-msgstr "Post"
+msgstr "Posterior"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "ERROR: Couldn't load frame resource!"
-msgstr "ERROR: No se pudo cargar el recurso de frames!"
+msgstr "ERROR: ¡No se pudo cargar el recurso de cuadros!"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Frame"
-msgstr "Agregar Frame"
+msgstr "Añadir cuadro"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Resource clipboard is empty or not a texture!"
-msgstr "El portapapeles de recursos esta vacío o no es una textura!"
+msgstr "¡El portapapeles de recursos esta vacío o no es una textura!"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Paste Frame"
-msgstr "Pegar Frame"
+msgstr "Pegar cuadro"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Empty"
-msgstr "Agregar Vacío"
+msgstr "Añadir elemento vacío"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation Loop"
-msgstr "Cambiar Loop de Animación"
+msgstr "Cambiar repetición de animación"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation FPS"
-msgstr "Cambiar FPS de Animación"
+msgstr "Cambiar FPS de animación"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
@@ -5190,15 +5247,15 @@ msgstr "Velocidad (FPS):"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animation Frames"
-msgstr "Cuadros de Animación"
+msgstr "Cuadros de animación"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
-msgstr "Insertar Vacío (Antes)"
+msgstr "Insertar vacío (antes)"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (After)"
-msgstr "Insertar Vacío (Después)"
+msgstr "Insertar vacío (después)"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Up"
@@ -5210,7 +5267,7 @@ msgstr "Abajo"
#: tools/editor/plugins/style_box_editor_plugin.cpp
msgid "StyleBox Preview:"
-msgstr "Vista Previa de StyleBox:"
+msgstr "Vista previa de StyleBox:"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Snap Mode:"
@@ -5230,11 +5287,11 @@ msgstr "Snap de Grilla"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Auto Slice"
-msgstr "Auto Rebanar"
+msgstr "Autotrocear"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Offset:"
-msgstr "Offset:"
+msgstr "Desplazamiento:"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Step:"
@@ -5246,11 +5303,11 @@ msgstr "Separación:"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Texture Region"
-msgstr "Región de Textura"
+msgstr "Región de textura"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Texture Region Editor"
-msgstr "Editor de Regiones de Texturas"
+msgstr "Editor de regiones de texturas"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Can't save theme to file:"
@@ -5258,11 +5315,11 @@ msgstr "No se pudo guardar el tema a un archivo:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add All Items"
-msgstr "Agregar Todos los Items"
+msgstr "Añadir todos los elementos"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add All"
-msgstr "Agregar Todos"
+msgstr "Añadir todos"
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/plugins/tile_set_editor_plugin.cpp
@@ -5271,19 +5328,19 @@ msgstr "Remover Item"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
-msgstr "Agregar Items de Clases"
+msgstr "Añadir elementos de clase"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Remove Class Items"
-msgstr "Quitar Items de Clases"
+msgstr "Quitar elementos de clases"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Template"
-msgstr "Crear Template Vacío"
+msgstr "Crear plantilla vacía"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
-msgstr "Crear Template de Editor Vacío"
+msgstr "Crear plantilla de editor vacía"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
@@ -5295,15 +5352,15 @@ msgstr "CheckBox Radio2"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Item"
-msgstr "Item"
+msgstr "Elemento"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Check Item"
-msgstr "Tildar Item"
+msgstr "Casilla de verificación"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Checked Item"
-msgstr "Item Tildado"
+msgstr "Casilla de verificación activa"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Has"
@@ -5319,7 +5376,7 @@ msgstr "Opciones"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Have,Many,Several,Options!"
-msgstr "Tenés,Muchas,Variadas,Opciones!"
+msgstr "¡Tienes,Muchas,Y,Variadas,Opciones!"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Tab 1"
@@ -5341,7 +5398,7 @@ msgstr "Tipo:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Data Type:"
-msgstr "Tipo de Datos:"
+msgstr "Tipo de datos:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Icon"
@@ -5370,7 +5427,7 @@ msgstr "Borrar TileMap"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Erase selection"
-msgstr "Eliminar Selección"
+msgstr "Eliminar selección"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Find tile"
@@ -5382,15 +5439,15 @@ msgstr "Transponer"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Mirror X"
-msgstr "Espejar X"
+msgstr "Voltear horizontalmente"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Mirror Y"
-msgstr "Espejar Y"
+msgstr "Voltear verticalmente"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Bucket"
-msgstr "Balde"
+msgstr "Cubo"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Pick Tile"
@@ -5434,11 +5491,11 @@ msgstr "¿Mergear desde escena?"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from Scene"
-msgstr "Crear desde Escena"
+msgstr "Crear desde escena"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from Scene"
-msgstr "Mergear desde Escena"
+msgstr "Unir desde escena"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
@@ -5447,19 +5504,19 @@ msgstr "Error"
#: tools/editor/project_export.cpp
msgid "Edit Script Options"
-msgstr "Editar Opciones de Script"
+msgstr "Editar opciones de script"
#: tools/editor/project_export.cpp
msgid "Please export outside the project folder!"
-msgstr "Por favor exportá afuera de la carpeta de proyecto!"
+msgstr "¡Prueba exportando fuera de la carpeta del proyecto!"
#: tools/editor/project_export.cpp
msgid "Error exporting project!"
-msgstr "Error al exportar el proyecto!"
+msgstr "¡Error al exportar el proyecto!"
#: tools/editor/project_export.cpp
msgid "Error writing the project PCK!"
-msgstr "Error al escribir el PCK de proyecto!"
+msgstr "¡Error al escribir el PCK de proyecto!"
#: tools/editor/project_export.cpp
msgid "No exporter for platform '%s' yet."
@@ -5471,35 +5528,35 @@ msgstr "Incluir"
#: tools/editor/project_export.cpp
msgid "Change Image Group"
-msgstr "Cambiar Grupo de Imágenes"
+msgstr "Cambiar grupo de imágenes"
#: tools/editor/project_export.cpp
msgid "Group name can't be empty!"
-msgstr "El nombre del grupo no puede estar vacío!"
+msgstr "¡El nombre del grupo no puede estar vacío!"
#: tools/editor/project_export.cpp
msgid "Invalid character in group name!"
-msgstr "Caracter invalido en el nombre de grupo!"
+msgstr "¡El nombre del grupo contiene una letra no permitida!"
#: tools/editor/project_export.cpp
msgid "Group name already exists!"
-msgstr "El nombre de grupo ya existe!"
+msgstr "¡El nombre de grupo ya existe!"
#: tools/editor/project_export.cpp
msgid "Add Image Group"
-msgstr "Agregar Grupo de Imágenes"
+msgstr "Añadir grupo de imágenes"
#: tools/editor/project_export.cpp
msgid "Delete Image Group"
-msgstr "Eliminar Grupo de Imágenes"
+msgstr "Eliminar grupo de imágenes"
#: tools/editor/project_export.cpp
msgid "Atlas Preview"
-msgstr "Vista Previa de Atlas"
+msgstr "Vista previa del atlas"
#: tools/editor/project_export.cpp
msgid "Project Export Settings"
-msgstr "Ajustes de Exportación del Proyecto"
+msgstr "Ajustes de exportación del proyecto"
#: tools/editor/project_export.cpp
msgid "Target"
@@ -5507,7 +5564,7 @@ msgstr "Objetivo"
#: tools/editor/project_export.cpp
msgid "Export to Platform"
-msgstr "Exportar a Plataforma"
+msgstr "Exportar a plataforma"
#: tools/editor/project_export.cpp
msgid "Resources"
@@ -5523,15 +5580,15 @@ msgstr "Exportar todos los recursos en el proyecto."
#: tools/editor/project_export.cpp
msgid "Export all files in the project directory."
-msgstr "Exportar todos los archivos en el directorio del proyecto."
+msgstr "Exportar todos los archivos en la carpeta del proyecto."
#: tools/editor/project_export.cpp
msgid "Export Mode:"
-msgstr "Modo de Exportación:"
+msgstr "Modo de exportación:"
#: tools/editor/project_export.cpp
msgid "Resources to Export:"
-msgstr "Recursos a Exportar:"
+msgstr "Recursos a exportar:"
#: tools/editor/project_export.cpp
msgid "Action"
@@ -5560,11 +5617,11 @@ msgstr "Imágenes"
#: tools/editor/project_export.cpp
msgid "Keep Original"
-msgstr "Mantener el Original"
+msgstr "Mantener el original"
#: tools/editor/project_export.cpp
msgid "Compress for Disk (Lossy, WebP)"
-msgstr "Comprimir para Disco (Con pérdidas, WebP)"
+msgstr "Comprimir para disco (Con pérdidas, WebP)"
#: tools/editor/project_export.cpp
msgid "Compress for RAM (BC/PVRTC/ETC)"
@@ -5572,23 +5629,23 @@ msgstr "Comprimir para RAM (BC/PVRTC/ETC)"
#: tools/editor/project_export.cpp
msgid "Convert Images (*.png):"
-msgstr "Convertir Imágenes (*.png):"
+msgstr "Convertir imágenes (*.png):"
#: tools/editor/project_export.cpp
msgid "Compress for Disk (Lossy) Quality:"
-msgstr "Calidad de Compresión para Disco (con perdidas):"
+msgstr "Calidad de compresión para disco (con pérdidas):"
#: tools/editor/project_export.cpp
msgid "Shrink All Images:"
-msgstr "Reducir Todas las Imagenes:"
+msgstr "Reducir todas las imágenes:"
#: tools/editor/project_export.cpp
msgid "Compress Formats:"
-msgstr "Formatos de Compresión:"
+msgstr "Formatos de compresión:"
#: tools/editor/project_export.cpp
msgid "Image Groups"
-msgstr "Grupos de Imágenes"
+msgstr "Grupos de imágenes"
#: tools/editor/project_export.cpp
msgid "Groups:"
@@ -5596,7 +5653,7 @@ msgstr "Grupos:"
#: tools/editor/project_export.cpp
msgid "Compress Disk"
-msgstr "Comprimir para Disco"
+msgstr "Comprimir para disco"
#: tools/editor/project_export.cpp
msgid "Compress RAM"
@@ -5604,11 +5661,11 @@ msgstr "Comprimir para RAM"
#: tools/editor/project_export.cpp
msgid "Compress Mode:"
-msgstr "Modo de Compresión:"
+msgstr "Modo de compresión:"
#: tools/editor/project_export.cpp
msgid "Lossy Quality:"
-msgstr "Calidad con Pérdidas:"
+msgstr "Calidad con pérdidas:"
#: tools/editor/project_export.cpp
msgid "Atlas:"
@@ -5616,15 +5673,15 @@ msgstr "Atlas:"
#: tools/editor/project_export.cpp
msgid "Shrink By:"
-msgstr "Reducir Por:"
+msgstr "Reducir por:"
#: tools/editor/project_export.cpp
msgid "Preview Atlas"
-msgstr "Vista Previa de Atlas"
+msgstr "Vista previa del atlas"
#: tools/editor/project_export.cpp
msgid "Image Filter:"
-msgstr "Filtro de Imágenes:"
+msgstr "Filtrado de imágenes:"
#: tools/editor/project_export.cpp
msgid "Images:"
@@ -5632,7 +5689,7 @@ msgstr "Imágenes:"
#: tools/editor/project_export.cpp
msgid "Select None"
-msgstr "No Seleccionar Ninguno"
+msgstr "Deseleccionar todo"
#: tools/editor/project_export.cpp
msgid "Group"
@@ -5640,11 +5697,11 @@ msgstr "Grupo"
#: tools/editor/project_export.cpp
msgid "Samples"
-msgstr "Muestras"
+msgstr "Sonidos"
#: tools/editor/project_export.cpp
msgid "Sample Conversion Mode: (.wav files):"
-msgstr "Modo de Conversión de Muestras: (archivos .wav):"
+msgstr "Modo de conversión de muestreo: (archivos .wav):"
#: tools/editor/project_export.cpp
msgid "Keep"
@@ -5656,7 +5713,7 @@ msgstr "Comprimir (RAM - IMA-ADPCM)"
#: tools/editor/project_export.cpp
msgid "Sampling Rate Limit (Hz):"
-msgstr "Limite de Tasa de Sampleo (Hz):"
+msgstr "Tasa de muestreo máxima (Hz):"
#: tools/editor/project_export.cpp
msgid "Trim"
@@ -5664,7 +5721,7 @@ msgstr "Recortar"
#: tools/editor/project_export.cpp
msgid "Trailing Silence:"
-msgstr "Silencio Sobrante al Final:"
+msgstr "Silencio sobrante al final:"
#: tools/editor/project_export.cpp
msgid "Script"
@@ -5672,7 +5729,7 @@ msgstr "Script"
#: tools/editor/project_export.cpp
msgid "Script Export Mode:"
-msgstr "Modo de Exportación de Scipts:"
+msgstr "Modo de exportación de scipts:"
#: tools/editor/project_export.cpp
msgid "Text"
@@ -5688,7 +5745,7 @@ msgstr "Encriptado (Proveer la Clave Debajo)"
#: tools/editor/project_export.cpp
msgid "Script Encryption Key (256-bits as hex):"
-msgstr "Clave de Encriptación de Script (256-bits como hex):"
+msgstr "Clave de cifrado de scripts (256-bits en hexadecimal):"
#: tools/editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -5696,7 +5753,7 @@ msgstr "Exportar PCK/Zip"
#: tools/editor/project_export.cpp
msgid "Export Project PCK"
-msgstr "Exportar PCK de Proyecto"
+msgstr "Exportar PCK del proyecto"
#: tools/editor/project_export.cpp
msgid "Export.."
@@ -5704,7 +5761,7 @@ msgstr "Exportar.."
#: tools/editor/project_export.cpp
msgid "Project Export"
-msgstr "Exportar Proyecto"
+msgstr "Exportar proyecto"
#: tools/editor/project_export.cpp
msgid "Export Preset:"
@@ -5712,23 +5769,23 @@ msgstr "Presets de Exportación:"
#: tools/editor/project_manager.cpp
msgid "Invalid project path, the path must exist!"
-msgstr "Ruta de proyecto inválida, la ruta debe existir!"
+msgstr "¡La ruta del proyecto no es correcta, tiene que existir!"
#: tools/editor/project_manager.cpp
msgid "Invalid project path, engine.cfg must not exist."
-msgstr "Ruta de proyecto inválida, engine.cfg no debe existir."
+msgstr "La ruta del proyecto no es correcta, engine.cfg no debe existir."
#: tools/editor/project_manager.cpp
msgid "Invalid project path, engine.cfg must exist."
-msgstr "Ruta de proyecto inválida, engine.cfg debe existir."
+msgstr "¡La ruta del proyecto no es correcta, engine.cfg debe existir."
#: tools/editor/project_manager.cpp
msgid "Imported Project"
-msgstr "Proyecto Importado"
+msgstr "Proyecto importado"
#: tools/editor/project_manager.cpp
msgid "Invalid project path (changed anything?)."
-msgstr "Ruta de proyecto inválida (cambiaste algo?)."
+msgstr "La ruta del proyecto no es correcta (¿has cambiado algo?)."
#: tools/editor/project_manager.cpp
msgid "Couldn't create engine.cfg in project path."
@@ -5740,31 +5797,31 @@ msgstr "Los siguientes archivos no se pudieron extraer del paquete:"
#: tools/editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr "El Paquete se Instaló Exitosamente!"
+msgstr "¡El paquete se ha instalado correctamente!"
#: tools/editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr "Importar Proyecto Existente"
+msgstr "Importar proyecto existente"
#: tools/editor/project_manager.cpp
msgid "Project Path (Must Exist):"
-msgstr "Ruta del Proyecto (Debe Existir):"
+msgstr "Ruta del proyecto (debe existir):"
#: tools/editor/project_manager.cpp
msgid "Project Name:"
-msgstr "Nombre del Proyecto:"
+msgstr "Nombre del proyecto:"
#: tools/editor/project_manager.cpp
msgid "Create New Project"
-msgstr "Crear Proyecto Nuevo"
+msgstr "Crear proyecto nuevo"
#: tools/editor/project_manager.cpp
msgid "Project Path:"
-msgstr "Ruta del Proyecto:"
+msgstr "Ruta del proyecto:"
#: tools/editor/project_manager.cpp
msgid "Install Project:"
-msgstr "Instalar Proyecto:"
+msgstr "Instalar proyecto:"
#: tools/editor/project_manager.cpp
msgid "Install"
@@ -5776,7 +5833,7 @@ msgstr "Examinar"
#: tools/editor/project_manager.cpp
msgid "New Game Project"
-msgstr "Nuevo Proyecto de Juego"
+msgstr "Nuevo proyecto de juego"
#: tools/editor/project_manager.cpp
msgid "That's a BINGO!"
@@ -5784,37 +5841,37 @@ msgstr "BINGO!"
#: tools/editor/project_manager.cpp
msgid "Unnamed Project"
-msgstr "Proyecto Sin Nombre"
+msgstr "Proyecto sin nombre"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to open more than one project?"
-msgstr "¿Estás seguro/a que querés abrir mas de un proyecto?"
+msgstr "¿Seguro que quieres abrir más de un proyecto?"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to run more than one project?"
-msgstr "¿Estás seguro/a que queres ejecutar mas de un proyecto?"
+msgstr "¿Seguro que quieres ejecutar más de un proyecto?"
#: tools/editor/project_manager.cpp
msgid "Remove project from the list? (Folder contents will not be modified)"
msgstr ""
-"¿Quitar proyecto de la lista? (Los contenidos de la carpeta no serán "
-"modificados)"
+"¿Quieres quitar proyecto de la lista? (El contenido de la carpeta no se "
+"modificarán)"
#: tools/editor/project_manager.cpp
msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
msgstr ""
+"Estás a punto de analizar %s carpetas en busca de proyectos de Godot. "
+"¿Quieres continuar?"
#: tools/editor/project_manager.cpp
msgid "Project Manager"
-msgstr "Gestor de Proyectos"
+msgstr "Administrador de proyectos"
#: tools/editor/project_manager.cpp
msgid "Project List"
-msgstr "Listado de Proyectos"
+msgstr "Lista de proyectos"
#: tools/editor/project_manager.cpp
msgid "Run"
@@ -5822,16 +5879,15 @@ msgstr "Ejecutar"
#: tools/editor/project_manager.cpp
msgid "Scan"
-msgstr "Escanear"
+msgstr "Analizar"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Select a Folder to Scan"
-msgstr "Seleccionar un Nodo"
+msgstr "Selecciona la carpeta a analizar"
#: tools/editor/project_manager.cpp
msgid "New Project"
-msgstr "Proyecto Nuevo"
+msgstr "Proyecto nuevo"
#: tools/editor/project_manager.cpp
msgid "Exit"
@@ -5843,31 +5899,31 @@ msgstr "Tecla "
#: tools/editor/project_settings.cpp
msgid "Joy Button"
-msgstr "Bottón de Joystick"
+msgstr "Botón del mando"
#: tools/editor/project_settings.cpp
msgid "Joy Axis"
-msgstr "Eje de Joystick"
+msgstr "Eje del mando"
#: tools/editor/project_settings.cpp
msgid "Mouse Button"
-msgstr "Botón de Mouse"
+msgstr "Botón del ratón"
#: tools/editor/project_settings.cpp
msgid "Invalid action (anything goes but '/' or ':')."
-msgstr "Acción Invalida (cualquier cosa va menos '/' o ':')."
+msgstr "La acción no es correcta (no puedes utilizar «/» o «:»)."
#: tools/editor/project_settings.cpp
msgid "Action '%s' already exists!"
-msgstr "La acción '%s' ya existe!"
+msgstr "¡La acción «%s» ya existe!"
#: tools/editor/project_settings.cpp
msgid "Rename Input Action Event"
-msgstr "Renombrar Evento de Acción de Entrada"
+msgstr "Renombrar evento de acción de entrada"
#: tools/editor/project_settings.cpp
msgid "Add Input Action Event"
-msgstr "Agregar Evento de Acción de Entrada"
+msgstr "Añadir evento de acción de entrada"
#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
msgid "Control+"
@@ -5875,31 +5931,31 @@ msgstr "Control+"
#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
msgid "Press a Key.."
-msgstr "Presionar una Tecla.."
+msgstr "Presiona una tecla..."
#: tools/editor/project_settings.cpp
msgid "Mouse Button Index:"
-msgstr "Indice de Botones de Mouse:"
+msgstr "Índice de botón del ratón:"
#: tools/editor/project_settings.cpp
msgid "Left Button"
-msgstr "Botón Izquierdo"
+msgstr "Botón izquierdo"
#: tools/editor/project_settings.cpp
msgid "Right Button"
-msgstr "Botón Derecho"
+msgstr "Botón derecho"
#: tools/editor/project_settings.cpp
msgid "Middle Button"
-msgstr "Botón del Medio"
+msgstr "Botón del medio"
#: tools/editor/project_settings.cpp
msgid "Wheel Up Button"
-msgstr "Botón Rueda Arriba"
+msgstr "Botón rueda arriba"
#: tools/editor/project_settings.cpp
msgid "Wheel Down Button"
-msgstr "Botón Rueda Abajo"
+msgstr "Botón rueda abajo"
#: tools/editor/project_settings.cpp
msgid "Button 6"
@@ -5919,23 +5975,23 @@ msgstr "Botón 9"
#: tools/editor/project_settings.cpp
msgid "Joystick Axis Index:"
-msgstr "Indice de Ejes de Joystick:"
+msgstr "Índice de ejes del mando:"
#: tools/editor/project_settings.cpp
msgid "Joystick Button Index:"
-msgstr "Indice de Botones de Joystick:"
+msgstr "Índice de botones del mando:"
#: tools/editor/project_settings.cpp
msgid "Add Input Action"
-msgstr "Agregar Acción de Entrada"
+msgstr "Añadir acción de entrada"
#: tools/editor/project_settings.cpp
msgid "Erase Input Action Event"
-msgstr "Borrar Evento de Acción de Entrada"
+msgstr "Borrar evento de acción de entrada"
#: tools/editor/project_settings.cpp
msgid "Toggle Persisting"
-msgstr "Act/Desact. Persistente"
+msgstr "Des/activar persistencia"
#: tools/editor/project_settings.cpp
msgid "Error saving settings."
@@ -5943,39 +5999,39 @@ msgstr "Error al guardar los ajustes."
#: tools/editor/project_settings.cpp
msgid "Settings saved OK."
-msgstr "Ajustes guardados satisfactoriamente."
+msgstr "Los ajustes se han guardado correctamente."
#: tools/editor/project_settings.cpp
msgid "Add Translation"
-msgstr "Agregar Traducción"
+msgstr "Añadir traducción"
#: tools/editor/project_settings.cpp
msgid "Remove Translation"
-msgstr "Quitar Traducción"
+msgstr "Quitar traducción"
#: tools/editor/project_settings.cpp
msgid "Add Remapped Path"
-msgstr "Agregar Path Remapeado"
+msgstr "Añadir ruta remapeada"
#: tools/editor/project_settings.cpp
msgid "Resource Remap Add Remap"
-msgstr "Remapear Recurso Agregar Remap"
+msgstr "Añadir remapeo de recursos"
#: tools/editor/project_settings.cpp
msgid "Change Resource Remap Language"
-msgstr "Cambiar Lenguaje de Remapeo de Recursos"
+msgstr "Cambiar idioma de remapeo de recursos"
#: tools/editor/project_settings.cpp
msgid "Remove Resource Remap"
-msgstr "Remover Remapeo de Recursos"
+msgstr "Quitar remapeo de recursos"
#: tools/editor/project_settings.cpp
msgid "Remove Resource Remap Option"
-msgstr "Remover Opción de Remapeo de Recursos"
+msgstr "Quitar opción de remapeo de recursos"
#: tools/editor/project_settings.cpp
msgid "Project Settings (engine.cfg)"
-msgstr "Ajustes de Proyecto (engine.cfg)"
+msgstr "Ajustes de proyecto (engine.cfg)"
#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
msgid "General"
@@ -5991,11 +6047,11 @@ msgstr "Eliminar"
#: tools/editor/project_settings.cpp
msgid "Copy To Platform.."
-msgstr "Copiar A Plataforma.."
+msgstr "Copiar a plataforma.."
#: tools/editor/project_settings.cpp
msgid "Input Map"
-msgstr "Mapa de Entradas"
+msgstr "Mapa de entradas"
#: tools/editor/project_settings.cpp
msgid "Action:"
@@ -6007,11 +6063,11 @@ msgstr "Dispositivo:"
#: tools/editor/project_settings.cpp
msgid "Index:"
-msgstr "Indice:"
+msgstr "Índice:"
#: tools/editor/project_settings.cpp
msgid "Localization"
-msgstr "Localización"
+msgstr "Traducciones"
#: tools/editor/project_settings.cpp
msgid "Translations"
@@ -6023,7 +6079,7 @@ msgstr "Traducciones:"
#: tools/editor/project_settings.cpp
msgid "Add.."
-msgstr "Agregar.."
+msgstr "Añadir..."
#: tools/editor/project_settings.cpp
msgid "Remaps"
@@ -6035,11 +6091,11 @@ msgstr "Recursos:"
#: tools/editor/project_settings.cpp
msgid "Remaps by Locale:"
-msgstr "Remapeos por Locale:"
+msgstr "Remapeos por idioma:"
#: tools/editor/project_settings.cpp
msgid "Locale"
-msgstr "Locale"
+msgstr "Idioma"
#: tools/editor/project_settings.cpp
msgid "AutoLoad"
@@ -6051,27 +6107,27 @@ msgstr "Plugins"
#: tools/editor/property_editor.cpp
msgid "Preset.."
-msgstr "Preseteo.."
+msgstr "Ajuste.."
#: tools/editor/property_editor.cpp
msgid "Ease In"
-msgstr "Ease In"
+msgstr "Transición entrada"
#: tools/editor/property_editor.cpp
msgid "Ease Out"
-msgstr "Ease Out"
+msgstr "Transición salida"
#: tools/editor/property_editor.cpp
msgid "Zero"
-msgstr "Zero"
+msgstr "Cero"
#: tools/editor/property_editor.cpp
msgid "Easing In-Out"
-msgstr "Easing In-Out"
+msgstr "Transición entrada-salida"
#: tools/editor/property_editor.cpp
msgid "Easing Out-In"
-msgstr "Easing Out-In"
+msgstr "Transición salida-entrada"
#: tools/editor/property_editor.cpp
msgid "File.."
@@ -6091,7 +6147,7 @@ msgstr "Asignar"
#: tools/editor/property_editor.cpp
msgid "Error loading file: Not a resource!"
-msgstr "Error al cargar el archivo: No es un recurso!"
+msgstr "Error al cargar el archivo: ¡No es un recurso!"
#: tools/editor/property_editor.cpp
msgid "Couldn't load image"
@@ -6099,15 +6155,15 @@ msgstr "No se pudo cargar la imagen"
#: tools/editor/property_editor.cpp
msgid "Bit %d, val %d."
-msgstr "Bit %d, val %d."
+msgstr "Bit %d, valor %d."
#: tools/editor/property_editor.cpp
msgid "On"
-msgstr "On"
+msgstr "Activado"
#: tools/editor/property_editor.cpp
msgid "Set"
-msgstr "Setear"
+msgstr "Establecer"
#: tools/editor/property_editor.cpp
msgid "Properties:"
@@ -6121,6 +6177,16 @@ msgstr "Global"
msgid "Sections:"
msgstr "Selecciones:"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Seleccionar puntos"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Modo de selección"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "No se pudo ejecutar la herramienta PVRTC:"
@@ -6132,15 +6198,15 @@ msgstr ""
#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
msgid "Reparent Node"
-msgstr "Reemparentar Nodo"
+msgstr "Reemparentar nodo"
#: tools/editor/reparent_dialog.cpp
msgid "Reparent Location (Select new Parent):"
-msgstr "Reemparentar Ubicación (Seleccionar nuevo Padre):"
+msgstr "Reemparentar ubicación (selecciona un nuevo padre):"
#: tools/editor/reparent_dialog.cpp
msgid "Keep Global Transform"
-msgstr "Mantener Transformación Global"
+msgstr "Mantener transformación global"
#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
msgid "Reparent"
@@ -6148,56 +6214,55 @@ msgstr "Reemparentar"
#: tools/editor/resources_dock.cpp
msgid "Create New Resource"
-msgstr "Crear Nuevo Recurso"
+msgstr "Crear recurso nuevo"
#: tools/editor/resources_dock.cpp
msgid "Open Resource"
-msgstr "Abrir Recurso"
+msgstr "Abrir recurso"
#: tools/editor/resources_dock.cpp
msgid "Save Resource"
-msgstr "Guardar Recurso"
+msgstr "Guardar recurso"
#: tools/editor/resources_dock.cpp
msgid "Resource Tools"
-msgstr "Herramientas de Recursos"
+msgstr "Herramientas de recursos"
#: tools/editor/resources_dock.cpp
msgid "Make Local"
-msgstr "Crear Local"
+msgstr "Crear local"
#: tools/editor/run_settings_dialog.cpp
msgid "Run Mode:"
-msgstr "Modo de Ejecución:"
+msgstr "Modo de ejecución:"
#: tools/editor/run_settings_dialog.cpp
msgid "Current Scene"
-msgstr "Escena Actual"
+msgstr "Escena actual"
#: tools/editor/run_settings_dialog.cpp
msgid "Main Scene"
-msgstr "Escena Principal"
+msgstr "Escena principal"
#: tools/editor/run_settings_dialog.cpp
msgid "Main Scene Arguments:"
-msgstr "Argumentos de Escena Principal:"
+msgstr "Argumentos de escena principal:"
#: tools/editor/run_settings_dialog.cpp
msgid "Scene Run Settings"
-msgstr "Ajustes de Ejecución de Escena"
+msgstr "Ajustes de ejecución de escena"
#: tools/editor/scene_tree_dock.cpp
msgid "OK :("
-msgstr "OK :("
+msgstr "Muy bien :("
#: tools/editor/scene_tree_dock.cpp
msgid "No parent to instance a child at."
msgstr "No hay padre al que instanciarle un hijo."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "No parent to instance the scenes at."
-msgstr "No hay padre al que instanciarle un hijo."
+msgstr "No hay padre donde instanciar la escena."
#: tools/editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
@@ -6209,7 +6274,7 @@ msgstr "Error al instanciar escena desde %s"
#: tools/editor/scene_tree_dock.cpp
msgid "Ok"
-msgstr "Ok"
+msgstr "Aceptar"
#: tools/editor/scene_tree_dock.cpp
msgid ""
@@ -6221,7 +6286,7 @@ msgstr ""
#: tools/editor/scene_tree_dock.cpp
msgid "Instance Scene(s)"
-msgstr "Instanciar Escena(s)"
+msgstr "Instanciar escenas"
#: tools/editor/scene_tree_dock.cpp
msgid "This operation can't be done on the tree root."
@@ -6237,15 +6302,15 @@ msgstr "Mover Nodos Dentro del Padre"
#: tools/editor/scene_tree_dock.cpp
msgid "Duplicate Node(s)"
-msgstr "Duplicar Nodo(s)"
+msgstr "Duplicar nodos"
#: tools/editor/scene_tree_dock.cpp
msgid "Delete Node(s)?"
-msgstr "Eliminar Nodo(s)?"
+msgstr "¿Quieres borrar los nodos?"
#: tools/editor/scene_tree_dock.cpp
msgid "This operation can't be done without a scene."
-msgstr "Esta operación no puede hacerse sin una escena."
+msgstr "Esta operación no puede realizarse sin una escena."
#: tools/editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
@@ -6253,39 +6318,38 @@ msgstr "Esta operación requiere un solo nodo seleccionado."
#: tools/editor/scene_tree_dock.cpp
msgid "This operation can't be done on instanced scenes."
-msgstr "Esta operación no puede ser realizada en escenas instanciadas."
+msgstr "Esta operación no puede realizarse en escenas instanciadas."
#: tools/editor/scene_tree_dock.cpp
msgid "Save New Scene As.."
-msgstr "Guardar Nueva Escena Como.."
+msgstr "Guardar nueva escena como.."
#: tools/editor/scene_tree_dock.cpp
msgid "Makes Sense!"
-msgstr "Tiene Sentido!"
+msgstr "¡Entendido!"
#: tools/editor/scene_tree_dock.cpp
msgid "Can't operate on nodes from a foreign scene!"
-msgstr "No se puede operar sobre los nodos de una escena externa!"
+msgstr "¡No se puede operar sobre los nodos de una escena externa!"
#: tools/editor/scene_tree_dock.cpp
msgid "Can't operate on nodes the current scene inherits from!"
-msgstr ""
-"No se puede operar sobre los nodos de los cual hereda la escena actual!"
+msgstr "¡No se puede operar sobre los nodos heredados por la escena actual!"
#: tools/editor/scene_tree_dock.cpp
msgid "Remove Node(s)"
-msgstr "Quitar Nodo(s)"
+msgstr "Borrar nodos"
#: tools/editor/scene_tree_dock.cpp
msgid "Create Node"
-msgstr "Crear Nodo"
+msgstr "Crear nodo"
#: tools/editor/scene_tree_dock.cpp
msgid ""
"Couldn't save new scene. Likely dependencies (instances) couldn't be "
"satisfied."
msgstr ""
-"No se pudo guardar la escena nueva. Probablemente no se hayan podido "
+"No se pudo guardar la escena nueva. Es posible que no se hayan podido "
"satisfacer las dependencias (instancias)."
#: tools/editor/scene_tree_dock.cpp
@@ -6298,48 +6362,47 @@ msgstr "Error al duplicar escena para guardarla."
#: tools/editor/scene_tree_dock.cpp
msgid "Edit Groups"
-msgstr "Editar Grupos"
+msgstr "Editar grupos"
#: tools/editor/scene_tree_dock.cpp
msgid "Edit Connections"
-msgstr "Editar Conexiones"
+msgstr "Editar conexiones"
#: tools/editor/scene_tree_dock.cpp
msgid "Delete Node(s)"
-msgstr "Eliminar Nodo(s)"
+msgstr "Borrar nodos"
#: tools/editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr "Agregar Nodo Hijo"
+msgstr "Añadir nodo hijo"
#: tools/editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr "Instanciar Escena Hija"
+msgstr "Instanciar escena hija"
#: tools/editor/scene_tree_dock.cpp
msgid "Change Type"
-msgstr "Cambiar Tipo"
+msgstr "Cambiar tipo"
#: tools/editor/scene_tree_dock.cpp
msgid "Add Script"
-msgstr "Agregar Script"
+msgstr "Añadir script"
#: tools/editor/scene_tree_dock.cpp
msgid "Merge From Scene"
-msgstr "Mergear Desde Escena"
+msgstr "Unir desde escena"
#: tools/editor/scene_tree_dock.cpp
msgid "Save Branch as Scene"
msgstr "Guardar Rama como Escena"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "Confirmá, por favor..."
+msgstr "Eliminar (sin confirmar)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
-msgstr "Agregar/Crear un Nuevo Nodo"
+msgstr "Añadir/crear nodo nuevo"
#: tools/editor/scene_tree_dock.cpp
msgid ""
@@ -6350,10 +6413,8 @@ msgstr ""
"existe ningún nodo raíz."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Create a new script for the selected node."
-msgstr ""
-"Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado."
+msgstr "Crear un nuevo script para el nodo seleccionado."
#: tools/editor/scene_tree_editor.cpp
msgid ""
@@ -6377,59 +6438,60 @@ msgstr "Instancia:"
#: tools/editor/scene_tree_editor.cpp
msgid "Invalid node name, the following characters are not allowed:"
-msgstr "Nobre de nodo inválido, los siguientes caracteres no estan permitidos:"
+msgstr ""
+"El nombre del nodo no es correcto, las siguientes letras no están permitidas:"
#: tools/editor/scene_tree_editor.cpp
msgid "Rename Node"
-msgstr "Renombrar Nodo"
+msgstr "Renombrar nodo"
#: tools/editor/scene_tree_editor.cpp
msgid "Scene Tree (Nodes):"
-msgstr "Arbol de Escenas (Nodos):"
+msgstr "Árbol de escenas (nodos):"
#: tools/editor/scene_tree_editor.cpp
msgid "Editable Children"
-msgstr "Hijos Editables"
+msgstr "Hijos editables"
#: tools/editor/scene_tree_editor.cpp
msgid "Load As Placeholder"
-msgstr "Cargar Como Placeholder"
+msgstr "Cargar como temporal"
#: tools/editor/scene_tree_editor.cpp
msgid "Discard Instancing"
-msgstr "Descartar Instanciado"
+msgstr "Descartar instancia"
#: tools/editor/scene_tree_editor.cpp
msgid "Open in Editor"
-msgstr "Abrir en Editor"
+msgstr "Abrir en el editor"
#: tools/editor/scene_tree_editor.cpp
msgid "Clear Inheritance"
-msgstr "Limpiar Herencia"
+msgstr "Limpiar heredado"
#: tools/editor/scene_tree_editor.cpp
msgid "Clear Inheritance? (No Undo!)"
-msgstr "Limpiar Herencia? (Imposible Deshacer!)"
+msgstr "¿Quieres limpiar la herencia? (No se puede deshacer)"
#: tools/editor/scene_tree_editor.cpp
msgid "Clear!"
-msgstr "Limpiar!"
+msgstr "¡Borrar!"
#: tools/editor/scene_tree_editor.cpp
msgid "Select a Node"
-msgstr "Seleccionar un Nodo"
+msgstr "Selecciona un nodo"
#: tools/editor/script_create_dialog.cpp
msgid "Invalid parent class name"
-msgstr "Nombre de clase padre inválido"
+msgstr "El nombre de clase padre no es correcto"
#: tools/editor/script_create_dialog.cpp
msgid "Valid chars:"
-msgstr "Caracteres válidos:"
+msgstr "Letras permitidas:"
#: tools/editor/script_create_dialog.cpp
msgid "Invalid class name"
-msgstr "Nombre de clase inválido"
+msgstr "El nombre de clase no es correcto"
#: tools/editor/script_create_dialog.cpp
msgid "Valid name"
@@ -6437,19 +6499,19 @@ msgstr "Nombre válido"
#: tools/editor/script_create_dialog.cpp
msgid "N/A"
-msgstr "N/A"
+msgstr "N/D"
#: tools/editor/script_create_dialog.cpp
msgid "Class name is invalid!"
-msgstr "El nombre de clase es inválido!"
+msgstr "¡El nombre de clase no es correcto!"
#: tools/editor/script_create_dialog.cpp
msgid "Parent class name is invalid!"
-msgstr "El nombre de la clase padre es inválido!"
+msgstr "¡El nombre de clase padre no es correcto!"
#: tools/editor/script_create_dialog.cpp
msgid "Invalid path!"
-msgstr "Ruta inválida!"
+msgstr "¡Ruta incorrecta!"
#: tools/editor/script_create_dialog.cpp
msgid "Could not create script in filesystem."
@@ -6465,31 +6527,31 @@ msgstr "La ruta no es local"
#: tools/editor/script_create_dialog.cpp
msgid "Invalid base path"
-msgstr "Ruta base inválida"
+msgstr "Ruta base incorrecta"
#: tools/editor/script_create_dialog.cpp
msgid "File exists"
-msgstr "El archivo existe"
+msgstr "El archivo ya existe"
#: tools/editor/script_create_dialog.cpp
msgid "Invalid extension"
-msgstr "Extensión invalida"
+msgstr "La extensión no es correcta"
#: tools/editor/script_create_dialog.cpp
msgid "Valid path"
-msgstr "Ruta inválida"
+msgstr "Ruta válida"
#: tools/editor/script_create_dialog.cpp
msgid "Class Name:"
-msgstr "Nombre de Clase:"
+msgstr "Nombre de clase:"
#: tools/editor/script_create_dialog.cpp
msgid "Built-In Script"
-msgstr "Script Integrado (Built-In)"
+msgstr "Script integrado"
#: tools/editor/script_create_dialog.cpp
msgid "Create Node Script"
-msgstr "Crear Script de Nodo"
+msgstr "Crear script de nodo"
#: tools/editor/script_editor_debugger.cpp
msgid "Bytes:"
@@ -6509,7 +6571,7 @@ msgstr "Fuente:"
#: tools/editor/script_editor_debugger.cpp
msgid "Function:"
-msgstr "Funcion:"
+msgstr "Función:"
#: tools/editor/script_editor_debugger.cpp
msgid "Errors"
@@ -6521,11 +6583,11 @@ msgstr "Proceso Hijo Conectado"
#: tools/editor/script_editor_debugger.cpp
msgid "Inspect Previous Instance"
-msgstr "Inspeccionar Instancia Previa"
+msgstr "Inspeccionar instancia anterior"
#: tools/editor/script_editor_debugger.cpp
msgid "Inspect Next Instance"
-msgstr "Inspeccionar Instancia Siguiente"
+msgstr "Inspeccionar instancia siguiente"
#: tools/editor/script_editor_debugger.cpp
msgid "Stack Frames"
@@ -6549,7 +6611,7 @@ msgstr "Inspector Remoto"
#: tools/editor/script_editor_debugger.cpp
msgid "Live Scene Tree:"
-msgstr "Arbos de Escenas en Vivo:"
+msgstr "Árbol de Escenas en Vivo:"
#: tools/editor/script_editor_debugger.cpp
msgid "Remote Object Properties: "
@@ -6581,11 +6643,11 @@ msgstr "Total:"
#: tools/editor/script_editor_debugger.cpp
msgid "Video Mem"
-msgstr "Mem. de Video"
+msgstr "Memoria de vídeo"
#: tools/editor/script_editor_debugger.cpp
msgid "Resource Path"
-msgstr "Ruta de Recursos"
+msgstr "Ruta de recursos"
#: tools/editor/script_editor_debugger.cpp
msgid "Type"
@@ -6597,15 +6659,15 @@ msgstr "Uso"
#: tools/editor/script_editor_debugger.cpp
msgid "Misc"
-msgstr "Misc"
+msgstr "Otros"
#: tools/editor/script_editor_debugger.cpp
msgid "Clicked Control:"
-msgstr "Controles Cliqueados:"
+msgstr "Controles seleccionados:"
#: tools/editor/script_editor_debugger.cpp
msgid "Clicked Control Type:"
-msgstr "Tipo de Controles Cliqueados:"
+msgstr "Tipo de controles seleccionados:"
#: tools/editor/script_editor_debugger.cpp
msgid "Live Edit Root:"
@@ -6613,7 +6675,7 @@ msgstr "Raíz de Edición en Vivo:"
#: tools/editor/script_editor_debugger.cpp
msgid "Set From Tree"
-msgstr "Setear Desde Arbol"
+msgstr "Establecer desde árbol"
#: tools/editor/settings_config_dialog.cpp
msgid "Shortcuts"
@@ -6649,12 +6711,19 @@ msgstr "Cambiar Altura de Shape Cápsula"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Ray Shape Length"
-msgstr "Cambiar Largo de Shape Rayo"
+msgstr "Cambiar longitud de forma de rayo"
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Notifier Extents"
msgstr "Cambiar Alcances de Notificadores"
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "El nodo personalizado no tiene ningún _get_output_port_unsequenced(idx,"
+#~ "wmem), pero se especificaron puertos no secuenciados."
+
#~ msgid "Cannot go into subdir:"
#~ msgstr "No se puede acceder al subdir:"
diff --git a/tools/translations/es_AR.po b/tools/translations/es_AR.po
index c8f75f121a..7a430aa695 100644
--- a/tools/translations/es_AR.po
+++ b/tools/translations/es_AR.po
@@ -3,13 +3,14 @@
# This file is distributed under the same license as the Godot source code.
#
# Lisandro Lorea <lisandrolorea@gmail.com>, 2016.
+# Sebastian Silva <sebastian@sugarlabs.org>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-07-15 07:17+0000\n"
-"Last-Translator: Lisandro Lorea <lisandrolorea@gmail.com>\n"
+"PO-Revision-Date: 2016-08-23 11:49+0000\n"
+"Last-Translator: Sebastian Silva <sebastian@sugarlabs.org>\n"
"Language-Team: Spanish (Argentina) <https://hosted.weblate.org/projects/"
"godot-engine/godot/es_AR/>\n"
"Language: es_AR\n"
@@ -70,40 +71,45 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Un nodo rindió(yielded) sin memoria de trabajo, por favor lee los docs sobre "
+"como usar yield correctamente!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"El nodo rindió(yielded), pero no retornó un estado de función en la primera "
+"memoria de trabajo."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"El valor de retorno debe ser asignado al primer elemento de la memoria de "
+"trabajo nodos! Arreglá tu nodo, por favor."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "El nodo retornó una secuencia de salida inválida: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
+"Se encontró un bit de secuencia pero no el nodo en el stack, reportá el bug!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Stack overflow con la profundidad del stack: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Funcion:"
+msgstr "Funciones:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Variable"
+msgstr "Variables:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -111,86 +117,102 @@ msgstr "Señales:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "El nombre no es un identificador válido:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "El nombre ya esta en uso por otra func/var/señal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Crear Función"
+msgstr "Renombrar Función"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Renombrar Muestra"
+msgstr "Renombrar Variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Renombrar Muestra"
+msgstr "Renombrar Señal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Funcion:"
+msgstr "Agregar Función"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Variable"
+msgstr "Agregar Variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Señales"
+msgstr "Agregar Señal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Quitar Selección"
+msgstr "Quitar Función"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Variable"
+msgstr "Quitar Variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Variable"
+msgstr "Editando Variable:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Quitar Selección"
+msgstr "Quitar Señal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Conectando Señal:"
+msgstr "Editando Señal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "Agregar Nodo Hijo"
+msgstr "Agregar Nodo"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
-msgid "Add Node(s) From Tree"
-msgstr "Nodo desde Escena"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Agregar Nodo Hijo"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Agregar Nodo(s) Desde Arbol"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Agregar Propiedad Getter"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Agregar Propiedad Setter"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -200,22 +222,20 @@ msgid "Edit"
msgstr "Editar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "Tipo de Datos:"
+msgstr "Tipo Base:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
msgstr "Miembros:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Available Nodes:"
-msgstr "Nodo TimeScale"
+msgstr "Nodos Disponibles:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Seleccioná o creá una función para editar el grafo"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -231,24 +251,20 @@ msgid "Close"
msgstr "Cerrar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "Argumentos de Llamada Extras:"
+msgstr "Editar Argumentos de Señal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Variable"
+msgstr "Editar Variable:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Cambiar Tipo"
+msgstr "Cambiar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Eliminar archivos seleccionados?"
+msgstr "Eliminar Seleccionados"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -257,72 +273,81 @@ msgstr "Act/Desact. Breakpoint"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Encontrar Siguiente"
+msgid "Find Node Type"
+msgstr "Encontrar Tipo de Nodo"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Copiar Pose"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Crear Nodo"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Pegar Pose"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "Tipo de input no iterable: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "El iterador se volvió inválido"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "El iterador se volvió inválido: "
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Invalid index property name."
-msgstr "Nombre de clase padre inválido"
+msgstr "Nombre de propiedad indíce inválido."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "El objeto base no es un Nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "La ruta no es local"
+msgstr "La ruta no apunta a un Nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Nombre de propiedad índice '%s' inválido en nodo %s."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid argument of type: "
-msgstr "Nombre de clase padre inválido"
+msgstr ": Argumento inválido de tipo: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Nombre de clase padre inválido"
+msgstr ": Argumentos inválidos: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet no encontrado en el script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet no encontrado en el script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
+"El nodo personalizado no tiene ningún método _step(), no se puede procesar "
+"el grafo."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"Valor de retorno inválido de _step(), debe ser un entero (seq out), o string "
+"(error)."
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -563,7 +588,8 @@ msgstr "Todos los Archivos (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Abrir"
@@ -1055,6 +1081,7 @@ msgstr "Optimizar"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
+"Seleccioná un AnimationPlayer de el Arbol de Escenas para editar animaciones."
#: tools/editor/animation_editor.cpp
msgid "Key"
@@ -1106,7 +1133,8 @@ msgstr "Cambiar Valor del Array"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Buscar:"
@@ -1264,7 +1292,7 @@ msgstr "Zoom Out"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Resetear el Zoom"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1355,10 +1383,16 @@ msgid "Create New"
msgstr "Crear Nuevo"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Coincidencias:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descripción:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Buscar Reemplazo Para:"
@@ -1686,10 +1720,6 @@ msgstr "Items de Tema de la GUI:"
msgid "Constants:"
msgstr "Constantes:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descripción:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Descripción de Métodos:"
@@ -3669,9 +3699,8 @@ msgid "Paste Pose"
msgstr "Pegar Pose"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "Seleccionar Modo (Q)"
+msgstr "Seleccionar Modo"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3692,14 +3721,12 @@ msgid "Alt+RMB: Depth list selection"
msgstr "Alt+Click Der.: Selección en depth list"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "Modo Mover (W)"
+msgstr "Modo Mover"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate Mode"
-msgstr "Modo Rotar (E)"
+msgstr "Modo Rotar"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -4513,9 +4540,8 @@ msgid "Save Theme As"
msgstr "Guardar Tema Como"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "Clonar hacia Abajo"
+msgstr "Cerrar Docs"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -5787,14 +5813,12 @@ msgid "Unnamed Project"
msgstr "Proyecto Sin Nombre"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to open more than one project?"
msgstr "¿Estás seguro/a que querés abrir mas de un proyecto?"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to run more than one project?"
-msgstr "¿Estás seguro/a que queres ejecutar mas de un proyecto?"
+msgstr "¿Estás seguro/a que querés ejecutar mas de un proyecto?"
#: tools/editor/project_manager.cpp
msgid "Remove project from the list? (Folder contents will not be modified)"
@@ -5807,6 +5831,8 @@ msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
msgstr ""
+"Estas a punto de examinar %s carpetas en busca de proyectos de Godot. "
+"Confirmar?"
#: tools/editor/project_manager.cpp
msgid "Project Manager"
@@ -5825,9 +5851,8 @@ msgid "Scan"
msgstr "Escanear"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Select a Folder to Scan"
-msgstr "Seleccionar un Nodo"
+msgstr "Seleccionar una Carpeta para Examinar"
#: tools/editor/project_manager.cpp
msgid "New Project"
@@ -6121,6 +6146,16 @@ msgstr "Global"
msgid "Sections:"
msgstr "Selecciones:"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Seleccionar Puntos"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Seleccionar Modo"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "No se pudo ejecutar la herramienta PVRTC:"
@@ -6195,9 +6230,8 @@ msgid "No parent to instance a child at."
msgstr "No hay padre al que instanciarle un hijo."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "No parent to instance the scenes at."
-msgstr "No hay padre al que instanciarle un hijo."
+msgstr "No hay padre donde instanciar la escena."
#: tools/editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
@@ -6333,9 +6367,8 @@ msgid "Save Branch as Scene"
msgstr "Guardar Rama como Escena"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "Confirmá, por favor..."
+msgstr "Eliminar (Sin Confirmación)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
@@ -6350,10 +6383,8 @@ msgstr ""
"existe ningún nodo raíz."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Create a new script for the selected node."
-msgstr ""
-"Instanciar la(s) escena(s) seleccionadas como hijas del nodo seleccionado."
+msgstr "Crear un nuevo script para el nodo seleccionado."
#: tools/editor/scene_tree_editor.cpp
msgid ""
@@ -6549,7 +6580,7 @@ msgstr "Inspector Remoto"
#: tools/editor/script_editor_debugger.cpp
msgid "Live Scene Tree:"
-msgstr "Arbos de Escenas en Vivo:"
+msgstr "Árbol de Escenas en Vivo:"
#: tools/editor/script_editor_debugger.cpp
msgid "Remote Object Properties: "
@@ -6655,6 +6686,13 @@ msgstr "Cambiar Largo de Shape Rayo"
msgid "Change Notifier Extents"
msgstr "Cambiar Alcances de Notificadores"
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "El nodo personalizado no tiene ningún _get_output_port_unsequenced(idx,"
+#~ "wmem), pero se especificaron puertos no secuenciados."
+
#~ msgid "Cannot go into subdir:"
#~ msgstr "No se puede acceder al subdir:"
diff --git a/tools/translations/fa.po b/tools/translations/fa.po
index b058fcb10e..dcc29135af 100644
--- a/tools/translations/fa.po
+++ b/tools/translations/fa.po
@@ -3,11 +3,13 @@
# This file is distributed under the same license as the Godot source code.
#
# alabd14313 <alabd14313@yahoo.com>, 2016.
+# hamed nasib <cghamed752@chmail.ir>, 2016.
+# rezapouya <r.pouya@chmail.ir>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-10 15:27+0000\n"
+"PO-Revision-Date: 2016-08-12 12:55+0000\n"
"Last-Translator: alabd14313 <alabd14313@yahoo.com>\n"
"Language-Team: Persian <https://hosted.weblate.org/projects/godot-engine/"
"godot/fa/>\n"
@@ -21,181 +23,222 @@ msgstr ""
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
+"نوع آرگومان برای متد ()convert ‌ نامعتبر است ،‌ از ثابت های *_TYPE‌ استفاده "
+"کنید ."
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
+"تعداد بایت های مورد نظر برای رمزگشایی بایت ها کافی نیست ،‌ و یا فرمت نامعتبر "
+"است ."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
-msgstr ""
+msgstr "آرگومان step صفر است!"
#: modules/gdscript/gd_functions.cpp
+#, fuzzy
msgid "Not a script with an instance"
-msgstr ""
+msgstr "اسکریپتی با یک نمونه نیست ."
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a script"
-msgstr ""
+msgstr "بر اساس یک اسکریپت نیست."
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a resource file"
-msgstr ""
+msgstr "بر اساس یک فایل منبع نیست."
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "فرمت دیکشنری نمونه‌ی نامعتبر (pass@ مفقود)"
+msgstr "فرمت دیکشنری نمونه نامعتبر (pass@ مفقود)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
-msgstr "فرمت دیکشنری نمونه‌ی نامعتبر (اسکریپت نمی‌تواند در path@ بارگذاری شود)"
+msgstr ""
+"فرمت نمونه ی دیکشنری نامعتبر است . ( نمی توان اسکریپت را از مسیر path@ "
+"بارگذاری کرد.)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr "فرمت دیکشنری نمونه‌ی نامعتبر (اسکریپت نامعتبر در path@)"
+msgstr "فرمت دیکشنری نمونه نامعتبر (اسکریپت نامعتبر در path@)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
-msgstr "دیکشنری نمونه‌ی نامعتبر (زیرکلاس‌های نامعتبر)"
+msgstr "نمونه ی دیکشنری نامعتبر است . (زیرکلاس‌های نامعتبر)"
#: modules/visual_script/visual_script.cpp
msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"یک گره بدون قرارگیری در حافظه ،‌ متوقف شده است. لطفا اسناد رسمی Godot‌ را برای "
+"یادگیری درست متوقف کردن(yield‌ کردن بازی)، مطالعه کنید."
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"گره متوقف شده است، ولی وضعیت تابع را به اولین حافظه‌ی فعال برنگردانده است."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"مقدار بازگشتی باید به اولین المان گره فعال در حافظه ،تخصیص یابد!‌ لطفا گره "
+"خود را اصلاح کنید."
#: modules/visual_script/visual_script.cpp
+#, fuzzy
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "گره ،‌ یک سلسله خروجی نامعتبر را برگردانده است: "
#: modules/visual_script/visual_script.cpp
+#, fuzzy
msgid "Found sequence bit but not the node in the stack, report bug!"
-msgstr ""
+msgstr "بیت دنباله پیدا شد ولی گره موجود در پشته نه، باگ را گزارش کن!"
#: modules/visual_script/visual_script.cpp
+#, fuzzy
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "سرریزی پشته با عمق پشته: "
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr ""
+msgstr "وظایف:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
-msgstr ""
+msgstr "متغیرها:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
-msgstr ""
+msgstr "سیگنال ها:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "نام یک شناسه‌ی معتبر نیست:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "نام هم‌اکنون توسط تابع/متغیر/سیگنال استفاده شده است:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "انتخاب شده را حذف کن"
+msgstr "تغییر نام نقش"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Variable"
-msgstr ""
+msgstr "تغییر متغیر"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Signal"
-msgstr ""
+msgstr "Signal را تغییر نام بده"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function"
-msgstr ""
+msgstr "افزودن وظیفه"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
-msgstr ""
+msgstr "افزودن متغیر"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr ""
+msgstr "Signal را اضافه کن"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "انتخاب شده را حذف کن"
+msgstr "برداشتن نقش"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr ""
+msgstr "برداشتن متغیر"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
-msgstr ""
+msgstr "ویرایش متغیر:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "انتخاب شده را حذف کن"
+msgstr "برداشتن موج"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
-msgstr ""
+msgstr "ویرایش سیگنال:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
+msgstr "افزودن گره"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Meta to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "افزودن گره"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "گره(ها) را از درخت اضافه کن"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "دارایی Getter را اضافه کن"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "دارایی Setter را اضافه کن"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Edit"
-msgstr ""
+msgstr "ویرایش کردن"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
-msgstr ""
+msgstr "نوع پایه:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
-msgstr ""
+msgstr "عضوها:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "گره های موجود:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "یک تابع انتخاب یا ایجاد کنید تا گراف را ویرایش کنید"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -208,92 +251,105 @@ msgstr ""
#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
msgid "Close"
-msgstr ""
+msgstr "بستن"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr ""
+msgstr "آرگومان‌های سیگنال را ویرایش کن"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
-msgstr ""
+msgstr "متغیر را ویرایش کن:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change"
-msgstr ""
+msgstr "تغییر بده"
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete Selected"
-msgstr ""
+msgstr "انتخاب شده را حذف کن"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
+msgstr "یک Breakpoint درج کن"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "پیدا کردن نوع گره"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Cut Nodes"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "مسیر به سمت گره:"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "نوع ورودی قابل تکرار نیست: "
#: modules/visual_script/visual_script_flow_control.cpp
+#, fuzzy
msgid "Iterator became invalid"
-msgstr ""
+msgstr "تکرارگر نامعتبر شد"
#: modules/visual_script/visual_script_flow_control.cpp
+#, fuzzy
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "تکرارگر نامعتبر شد: "
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name."
-msgstr ""
+msgstr "نام دارایی ایندکس نامعتبر."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "شیء پایه یک گره نیست!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
-msgstr ""
+msgstr "مسیربه یک گره نمی رسد!‌"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "نام دارایی ایندکس نامعتبر 's%' در گره s%."
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ""
+msgstr ": آرگومان نوع نامعتبر "
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid arguments: "
-msgstr ""
+msgstr ": آرگومان‌های نامعتبر: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet در اسکریپت پیدا نشد: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet در اسکریپت پیدا نشد: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
-msgstr ""
+msgstr "گره سفارشی بدون متد ()step_ نمی‌تواند گراف را پردازش کند."
#: modules/visual_script/visual_script_nodes.cpp
+#, fuzzy
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"مقدار بازگشتی نامعتبر از ()step_ ، باید integer (seq out) ، یا string "
+"(error) باشد."
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -434,7 +490,7 @@ msgstr ""
#: scene/3d/baked_light_instance.cpp
msgid "BakedLightInstance does not contain a BakedLight resource."
-msgstr ""
+msgstr "BakedLightInstance محتوی یک منبع BakedLight نیست."
#: scene/3d/body_shape.cpp
msgid ""
@@ -526,9 +582,8 @@ msgid "File Exists, Overwrite?"
msgstr "فایل وجود دارد، آیا بازنویسی شود؟"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
-#, fuzzy
msgid "All Recognized"
-msgstr "تمام پسوندها تشخیص داده شد"
+msgstr "همه ی موارد شناخته شده اند."
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Files (*)"
@@ -537,7 +592,8 @@ msgstr "تمام پرونده‌ها (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "باز کن"
@@ -582,7 +638,7 @@ msgstr "مسیر:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Directories & Files:"
-msgstr "پوشه‌ها و پرونده‌ها"
+msgstr "پوشه‌ها و پرونده‌ها:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/script_editor_debugger.cpp
@@ -698,7 +754,6 @@ msgstr "پاک کردن"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
-#, fuzzy
msgid "Undo"
msgstr "خنثی کردن (Undo)"
@@ -749,29 +804,28 @@ msgid "Disabled"
msgstr "غیرفعال شده"
#: tools/editor/animation_editor.cpp
-#, fuzzy
msgid "All Selection"
-msgstr "همه‌ی انتخاب شده"
+msgstr "همه‌ی انتخاب ها"
#: tools/editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr ""
+msgstr "کلید Add را جابجا کن"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Transition"
-msgstr ""
+msgstr "انتقال را در انیمیشن تغییر بده"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Transform"
-msgstr ""
+msgstr "انتقال را در انیمیشن تغییر بده"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Value"
-msgstr ""
+msgstr "مقدار را در انیمیشن تغییر بده"
#: tools/editor/animation_editor.cpp
msgid "Anim Change Call"
-msgstr ""
+msgstr "فراخوانی را در انیمیشن تغییر بده"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Track"
@@ -819,21 +873,20 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr ""
+msgstr "کلیدها را در انیمیشن حذف کن"
#: tools/editor/animation_editor.cpp
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr ""
+msgstr "انتخاب شده را به دو تا تکثیر کن"
#: tools/editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr ""
+msgstr "ترانهاده را به دو تا تکثیر کن"
#: tools/editor/animation_editor.cpp
-#, fuzzy
msgid "Remove Selection"
-msgstr "انتخاب شده را حذف کن"
+msgstr "برداشتن انتخاب شده"
#: tools/editor/animation_editor.cpp
msgid "Continuous"
@@ -849,72 +902,73 @@ msgstr "تریگر"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr ""
+msgstr "یک کلید در انیمیشن اضافه کن"
#: tools/editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr ""
+msgstr "کلیدها را در انیمیشن جابجا کن"
#: tools/editor/animation_editor.cpp
msgid "Scale Selection"
-msgstr ""
+msgstr "انتخاب شده را تغییر مقیاس بده"
#: tools/editor/animation_editor.cpp
msgid "Scale From Cursor"
-msgstr ""
+msgstr "از مکان‌نما تغییر مقیاس بده"
#: tools/editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr ""
+msgstr "به گام بعدی برو"
#: tools/editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr ""
+msgstr "به گام قبلی برو"
#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
msgid "Linear"
-msgstr ""
+msgstr "خطی"
#: tools/editor/animation_editor.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Constant"
-msgstr ""
+msgstr "ثابت"
#: tools/editor/animation_editor.cpp
msgid "In"
-msgstr ""
+msgstr "داخل"
#: tools/editor/animation_editor.cpp
msgid "Out"
-msgstr ""
+msgstr "خارج"
#: tools/editor/animation_editor.cpp
msgid "In-Out"
-msgstr ""
+msgstr "داخل-خارج"
#: tools/editor/animation_editor.cpp
msgid "Out-In"
-msgstr ""
+msgstr "خارج-داخل"
#: tools/editor/animation_editor.cpp
msgid "Transitions"
-msgstr ""
+msgstr "انتقال‌ها"
#: tools/editor/animation_editor.cpp
msgid "Optimize Animation"
-msgstr ""
+msgstr "انیمیشن را بهینه‌سازی کن"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr ""
+msgstr "انیمیشن را پاکسازی کن"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "یک ترک جدید برای s% ایجاد کن و کلید را درج کن؟"
#: tools/editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "تعداد d% ترک جدید ایجاد، و کلیدها را درج کن؟"
#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -923,267 +977,269 @@ msgstr ""
#: tools/editor/plugins/particles_editor_plugin.cpp
#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
msgid "Create"
-msgstr ""
+msgstr "ایجاد کن"
#: tools/editor/animation_editor.cpp
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "ایجاد و درج در انیمیشن"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "درج ترک و کلید در انیمیشن"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert Key"
-msgstr ""
+msgstr "کلید را در انیمیشن درج کن"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr ""
+msgstr "طول انیمیشن را تغییر بده"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr ""
+msgstr "حلقه انیمیشن را تغییر بده"
#: tools/editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
-msgstr ""
+msgstr "کلید مقدار دارای نوع را در انیمیشن ایجاد کن"
#: tools/editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "در انیمیشن درج کن"
#: tools/editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr ""
+msgstr "کلیدها را در انیمیشن تغییر مقیاس بده"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr ""
+msgstr "ترک فراخوانی را در انیمیشن اضافه کن"
#: tools/editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr ""
+msgstr "بزرگنمایی در انیمیشن."
#: tools/editor/animation_editor.cpp
msgid "Length (s):"
-msgstr ""
+msgstr "طول(ها):"
#: tools/editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr ""
+msgstr "طول انیمیشن (به ثانیه)."
#: tools/editor/animation_editor.cpp
msgid "Step (s):"
-msgstr ""
+msgstr "گام(ها):"
#: tools/editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr ""
+msgstr "گام چسبنده‌ی مکان‌نما (به ثانیه)."
#: tools/editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr ""
+msgstr "ایجاد حلقه را در انیمیشن فعال/غیر فعال کن."
#: tools/editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr ""
+msgstr "ترک‌های جدید اضافه کن."
#: tools/editor/animation_editor.cpp
msgid "Move current track up."
-msgstr ""
+msgstr "ترک جاری را به بالا جابجا کن."
#: tools/editor/animation_editor.cpp
msgid "Move current track down."
-msgstr ""
+msgstr "ترک جاری را به پایین جابجا کن."
#: tools/editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr ""
+msgstr "ترک انتخاب شده را حذف کن."
#: tools/editor/animation_editor.cpp
msgid "Track tools"
-msgstr ""
+msgstr "ابزارهای ترک"
#: tools/editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr ""
+msgstr "ویرایش کلیدهای انفرادی با کلیک بر روی آن‌ها را فعال کن."
#: tools/editor/animation_editor.cpp
msgid "Anim. Optimizer"
-msgstr ""
+msgstr "بهینه‌ساز انیمیشن"
#: tools/editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr ""
+msgstr "خطای Max. Linear:"
#: tools/editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr ""
+msgstr "خطای Max. Angular:"
#: tools/editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr ""
+msgstr "زاویه‌ی قابل بهینه‌سازی بیشینه:"
#: tools/editor/animation_editor.cpp
msgid "Optimize"
-msgstr ""
+msgstr "بهینه‌سازی کن"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
+"یک AnimationPlayer از درخت صحنه انتخاب کنید تا انیمیشن‌ها را ویرایش کنید."
#: tools/editor/animation_editor.cpp
msgid "Key"
-msgstr ""
+msgstr "کلید"
#: tools/editor/animation_editor.cpp
msgid "Transition"
-msgstr ""
+msgstr "انتقال"
#: tools/editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr ""
+msgstr "نسبت تغییر مقیاس:"
#: tools/editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr ""
+msgstr "توابع را در کدام گره فراخوانی کند؟"
#: tools/editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr ""
+msgstr "کلیدهای نامعتبر را حذف کن"
#: tools/editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr ""
+msgstr "ترک‌های حل نشده و خالی را حذف کن"
#: tools/editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr ""
+msgstr "تمام انیمیشن‌ها را پاکسازی کن"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr ""
+msgstr "انیمیشن(ها) را پاکسازی کن (نه UNDO !)"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "پاکسازی"
#: tools/editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr ""
+msgstr "آرایه را تغییر اندازه بده"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr ""
+msgstr "نوع مقدار آرایه را تغییر بده"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr ""
+msgstr "مقدار آرایه را تغییر بده"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
-msgstr ""
+msgstr "جستجو:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Sort:"
-msgstr ""
+msgstr "مرتب‌سازی:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Reverse"
-msgstr ""
+msgstr "معکوس"
#: tools/editor/asset_library_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Category:"
-msgstr ""
+msgstr "طبقه‌بندی:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "All"
-msgstr ""
+msgstr "همه"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Site:"
-msgstr ""
+msgstr "تارنما:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Support.."
-msgstr ""
+msgstr "پشتیبانی.."
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Official"
-msgstr ""
+msgstr "دفتری"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr ""
+msgstr "انجمن"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr ""
+msgstr "آزمودن"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr ""
+msgstr "فایل های ZIP‌ منابع بازی"
#: tools/editor/call_dialog.cpp
msgid "Method List For '%s':"
-msgstr ""
+msgstr "لیست متد برای 's%' :"
#: tools/editor/call_dialog.cpp
msgid "Call"
-msgstr ""
+msgstr "فراخوانی"
#: tools/editor/call_dialog.cpp
msgid "Method List:"
-msgstr ""
+msgstr "فهرست متدها:"
#: tools/editor/call_dialog.cpp
msgid "Arguments:"
-msgstr ""
+msgstr "نشانوندها:"
#: tools/editor/call_dialog.cpp
msgid "Return:"
-msgstr ""
+msgstr "بازگشت:"
#: tools/editor/code_editor.cpp
msgid "Go to Line"
-msgstr ""
+msgstr "برو به خط"
#: tools/editor/code_editor.cpp
msgid "Line Number:"
-msgstr ""
+msgstr "شماره خط:"
#: tools/editor/code_editor.cpp
msgid "No Matches"
-msgstr ""
+msgstr "تطبیقی ندارد"
#: tools/editor/code_editor.cpp
msgid "Replaced %d Ocurrence(s)."
-msgstr ""
+msgstr "تعداد d% رخداد جایگزین شد."
#: tools/editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "جایگزینی"
#: tools/editor/code_editor.cpp
msgid "Replace All"
-msgstr ""
+msgstr "جایگزینی همه"
#: tools/editor/code_editor.cpp
msgid "Match Case"
-msgstr ""
+msgstr "بین حروف کوچک و بزرگ لاتین تمایز قائل شو"
#: tools/editor/code_editor.cpp
msgid "Whole Words"
-msgstr ""
+msgstr "عین کلمات (بدون هیچ کم و کاستی)"
#: tools/editor/code_editor.cpp
msgid "Selection Only"
-msgstr ""
+msgstr "تنها در قسمت انتخاب شده"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
#: tools/editor/plugins/script_editor_plugin.cpp
@@ -1191,73 +1247,73 @@ msgstr ""
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Search"
-msgstr ""
+msgstr "جستجو"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
msgid "Find"
-msgstr ""
+msgstr "یافتن"
#: tools/editor/code_editor.cpp
msgid "Next"
-msgstr ""
+msgstr "بعدی"
#: tools/editor/code_editor.cpp
msgid "Replaced %d ocurrence(s)."
-msgstr ""
+msgstr "تعداد d% رخداد جایگزین شد."
#: tools/editor/code_editor.cpp
msgid "Not found!"
-msgstr ""
+msgstr "چیزی یافت نشد!"
#: tools/editor/code_editor.cpp
msgid "Replace By"
-msgstr ""
+msgstr "جایگزین کردن با"
#: tools/editor/code_editor.cpp
msgid "Case Sensitive"
-msgstr ""
+msgstr "حساس به حالت (حروف لاتین)"
#: tools/editor/code_editor.cpp
msgid "Backwards"
-msgstr ""
+msgstr "به سمت عقب"
#: tools/editor/code_editor.cpp
msgid "Prompt On Replace"
-msgstr ""
+msgstr "موقع جایگزینی از کاربر بپرس"
#: tools/editor/code_editor.cpp
msgid "Skip"
-msgstr ""
+msgstr "رد کردن"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "بزرگنمایی بیشتر"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "بزرگنمایی کمتر"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "بازنشانی بزرگنمایی"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr ""
+msgstr "خط:"
#: tools/editor/code_editor.cpp
msgid "Col:"
-msgstr ""
+msgstr "ستون:"
#: tools/editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr ""
+msgstr "متد در گره مقصد باید مشخص شده باشد!"
#: tools/editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr ""
+msgstr "اتصال به گره:"
#: tools/editor/connections_dialog.cpp
#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
@@ -1265,50 +1321,51 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Add"
-msgstr ""
+msgstr "افزودن"
#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Remove"
-msgstr ""
+msgstr "برداشتن"
#: tools/editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr ""
+msgstr "آرگومان اضافی فراخوانی را اضافه کن:"
#: tools/editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr ""
+msgstr "آرگومان‌های اضافی فراخوانی:"
#: tools/editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr ""
+msgstr "مسیر به سمت گره:"
#: tools/editor/connections_dialog.cpp
msgid "Make Function"
-msgstr ""
+msgstr "تابع را بساز"
#: tools/editor/connections_dialog.cpp
msgid "Deferred"
-msgstr ""
+msgstr "معوق"
#: tools/editor/connections_dialog.cpp
+#, fuzzy
msgid "Oneshot"
-msgstr ""
+msgstr "تک شات"
#: tools/editor/connections_dialog.cpp
msgid "Connect"
-msgstr ""
+msgstr "اتصال"
#: tools/editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr ""
+msgstr "'s%' را به 's%' متصل کن"
#: tools/editor/connections_dialog.cpp
msgid "Connecting Signal:"
-msgstr ""
+msgstr "اتصال سیگنال:"
#: tools/editor/connections_dialog.cpp
msgid "Create Subscription"
@@ -1316,78 +1373,89 @@ msgstr ""
#: tools/editor/connections_dialog.cpp
msgid "Connect.."
-msgstr ""
+msgstr "در حال اتصال..."
#: tools/editor/connections_dialog.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Disconnect"
-msgstr ""
+msgstr "عدم اتصال"
#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "سیگنال‌ها"
#: tools/editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "جدید ایجاد کن"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
-msgstr ""
+msgstr "تطبیق‌ها:"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "توضیح:"
#: tools/editor/dependency_editor.cpp
+#, fuzzy
msgid "Search Replacement For:"
-msgstr ""
+msgstr "جستجو کن جایگزینی را برای:"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies For:"
-msgstr ""
+msgstr "بستگی‌ها برای:"
#: tools/editor/dependency_editor.cpp
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
msgstr ""
+"صحنه‌ی 's%' در حال حاضر ویرایش شده است.\n"
+"تغییرات مؤثر نخواهد بود مگر با بارگذاری مجدد."
#: tools/editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will take effect when reloaded."
msgstr ""
+"منابع 's%' در حال استفاده است.\n"
+"تغییرات با بارگذاری مجدد مؤثر خواهد بود."
#: tools/editor/dependency_editor.cpp
msgid "Dependencies"
-msgstr ""
+msgstr "بستگی‌ها"
#: tools/editor/dependency_editor.cpp
msgid "Resource"
-msgstr ""
+msgstr "منبع"
#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp
#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
msgid "Path"
-msgstr ""
+msgstr "مسیر"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies:"
-msgstr ""
+msgstr "بستگی‌ها:"
#: tools/editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr ""
+msgstr "(بستگی) معیوب را تعمیر کن"
#: tools/editor/dependency_editor.cpp
msgid "Dependency Editor"
-msgstr ""
+msgstr "ویرایشگر بستگی"
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "منبع جایگزینی را جستجو کن:"
#: tools/editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "مالکانِ:"
#: tools/editor/dependency_editor.cpp
msgid ""
@@ -1395,105 +1463,109 @@ msgid ""
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
+"پرونده‌هایی که می‌خواهید حذف شوند برای منابع دیگر مورد نیاز هستند تا کار "
+"کنند.\n"
+"آیا در هر صورت حذف شوند (بدون undo)؟"
#: tools/editor/dependency_editor.cpp
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "آیا پرونده‌های انتخاب شده از پروژه حذف شوند؟ (بدون undo)"
#: tools/editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr ""
+msgstr "خطا در بارگذاری:"
#: tools/editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "خطا در بارگذاری صحنه به دلیل بستگی‌های مفقود:"
#: tools/editor/dependency_editor.cpp
msgid "Open Anyway"
-msgstr ""
+msgstr "در هر صورت باز کن"
#: tools/editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr ""
+msgstr "کدام عمل باید اجرا شود؟"
#: tools/editor/dependency_editor.cpp
msgid "Fix Dependencies"
-msgstr ""
+msgstr "بستگی‌ها را تعمیر کن"
#: tools/editor/dependency_editor.cpp
msgid "Errors loading!"
-msgstr ""
+msgstr "خطا در بارگذاری!"
#: tools/editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "به طور دائمی تعداد 'd%' آیتم را حذف کند؟ (بدون undo !)"
#: tools/editor/dependency_editor.cpp
+#, fuzzy
msgid "Owns"
-msgstr ""
+msgstr "مال خود"
#: tools/editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr ""
+msgstr "منابع بدون مالکیت صریح:"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "پوینده‌ی منبع جدا افتاده"
#: tools/editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr ""
+msgstr "آیا پرونده‌های انتخاب شده حذف شود؟"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
#: tools/editor/plugins/item_list_editor_plugin.cpp
#: tools/editor/scene_tree_dock.cpp
msgid "Delete"
-msgstr ""
+msgstr "حذف کن"
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr ""
+msgstr "نام نامعتبر."
#: tools/editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr ""
+msgstr "کاراکترهای معتبر:"
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing engine class name."
-msgstr ""
+msgstr "نام نامعتبر. نباید با یک نام کلاس موجود در موتور برخوردی داشته باشد."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
-msgstr ""
+msgstr "نام نامعتبر. نباید یا یک نام نوع توکار برخوردی داشته باشد."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
-msgstr ""
+msgstr "نام نامعتبر. نباید با نام یک ثابت سراسری موجود برخوردی داشته باشد."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid Path."
-msgstr ""
+msgstr "مسیر نامعتبر."
#: tools/editor/editor_autoload_settings.cpp
msgid "File does not exist."
-msgstr ""
+msgstr "پرونده موجود نیست."
#: tools/editor/editor_autoload_settings.cpp
msgid "Not in resource path."
-msgstr ""
+msgstr "در مسیرِ منبع نیست."
#: tools/editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "بارگذاری خودکار (AutoLoad) را اضافه کن"
#: tools/editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "بارگذاری خودکار 's%' هم اکنون موجود است!"
#: tools/editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "بارگذاری خودکار را تغییر نام بده"
#: tools/editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
@@ -1616,28 +1688,28 @@ msgstr ""
#: tools/editor/editor_help.cpp
msgid "Class List:"
-msgstr ""
+msgstr "فهرست کلاس:"
#: tools/editor/editor_help.cpp
msgid "Search Classes"
-msgstr ""
+msgstr "جستجوی کلاسها"
#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
msgid "Class:"
-msgstr ""
+msgstr "کلاس:"
#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
#: tools/editor/script_create_dialog.cpp
msgid "Inherits:"
-msgstr ""
+msgstr "میراث:"
#: tools/editor/editor_help.cpp
msgid "Inherited by:"
-msgstr ""
+msgstr "به ارث رسیده به وسیله:"
#: tools/editor/editor_help.cpp
msgid "Brief Description:"
-msgstr ""
+msgstr "خلاصه توضیحات:"
#: tools/editor/editor_help.cpp
msgid "Public Methods:"
@@ -1651,25 +1723,21 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
#: tools/editor/editor_help.cpp
msgid "Search Text"
-msgstr ""
+msgstr "جستجوی متن"
#: tools/editor/editor_import_export.cpp
msgid "Added:"
-msgstr ""
+msgstr "افزوده شده:"
#: tools/editor/editor_import_export.cpp
msgid "Removed:"
-msgstr ""
+msgstr "برداشته شده:"
#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
msgid "Error saving atlas:"
@@ -1697,11 +1765,11 @@ msgstr ""
#: tools/editor/editor_log.cpp
msgid " Output:"
-msgstr ""
+msgstr " خروجی:"
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Importing"
-msgstr ""
+msgstr "در حال وارد کردن دوباره..."
#: tools/editor/editor_node.cpp
msgid "Importing:"
@@ -1721,11 +1789,11 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/resources_dock.cpp
msgid "Save Resource As.."
-msgstr ""
+msgstr "ذخیره منبع از ..."
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
msgid "I see.."
-msgstr ""
+msgstr "من میبینم ..."
#: tools/editor/editor_node.cpp
msgid "Can't open file for writing:"
@@ -1741,11 +1809,11 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Saving Scene"
-msgstr ""
+msgstr "ذخیره سازی صحنه"
#: tools/editor/editor_node.cpp
msgid "Analyzing"
-msgstr ""
+msgstr "در حال پردازش"
#: tools/editor/editor_node.cpp
msgid "Creating Thumbnail"
@@ -1827,7 +1895,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Open in Help"
-msgstr ""
+msgstr "باز کردن راهنما"
#: tools/editor/editor_node.cpp
msgid "There is no defined scene to run."
@@ -1864,7 +1932,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Open Scene"
-msgstr ""
+msgstr "باز کردن صحنه"
#: tools/editor/editor_node.cpp
msgid "Open Base Scene"
@@ -1880,7 +1948,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Yes"
-msgstr ""
+msgstr "تایید"
#: tools/editor/editor_node.cpp
msgid "Close scene? (Unsaved changes will be lost)"
@@ -1888,7 +1956,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr ""
+msgstr "ذخیره صحنه در ..."
#: tools/editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
@@ -1912,11 +1980,11 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Quit"
-msgstr ""
+msgstr "خروج"
#: tools/editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr ""
+msgstr "از ویرایشگر خارج می شوید؟"
#: tools/editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
@@ -1976,7 +2044,7 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Default"
-msgstr ""
+msgstr "پیشفرض"
#: tools/editor/editor_node.cpp
msgid "Switch Scene Tab"
@@ -1993,7 +2061,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Scene"
-msgstr ""
+msgstr "صحنه"
#: tools/editor/editor_node.cpp
msgid "Go to previously opened scene."
@@ -2001,7 +2069,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Fullscreen Mode"
-msgstr ""
+msgstr "حالت تمام صفحه"
#: tools/editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -2009,11 +2077,11 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Next tab"
-msgstr ""
+msgstr "زبانه بعدی"
#: tools/editor/editor_node.cpp
msgid "Previous tab"
-msgstr ""
+msgstr "زبانه قبلی"
#: tools/editor/editor_node.cpp
msgid "Operations with scene files."
@@ -2021,7 +2089,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "صحنه جدید"
#: tools/editor/editor_node.cpp
msgid "New Inherited Scene.."
@@ -2114,7 +2182,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Tools"
-msgstr ""
+msgstr "ابزارها"
#: tools/editor/editor_node.cpp
msgid "Export the project to many platforms."
@@ -2131,7 +2199,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Play"
-msgstr ""
+msgstr "پخش"
#: tools/editor/editor_node.cpp
msgid "Pause the scene"
@@ -2156,15 +2224,15 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Play Scene"
-msgstr ""
+msgstr "پخش صحنه"
#: tools/editor/editor_node.cpp
msgid "Play custom scene"
-msgstr ""
+msgstr "پخش سفارشی صحنه"
#: tools/editor/editor_node.cpp
msgid "Play Custom Scene"
-msgstr ""
+msgstr "پخش سفارشی صحنه"
#: tools/editor/editor_node.cpp
msgid "Debug options"
@@ -2240,11 +2308,11 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Settings"
-msgstr ""
+msgstr "ترجیحات"
#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr ""
+msgstr "ویرایشگر ترجیحات"
#: tools/editor/editor_node.cpp
msgid "Editor Layout"
@@ -2256,7 +2324,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "About"
-msgstr ""
+msgstr "معرفی"
#: tools/editor/editor_node.cpp
msgid "Alerts when an external resource has changed."
@@ -2268,7 +2336,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Update Always"
-msgstr ""
+msgstr "به روز رسانی دامی"
#: tools/editor/editor_node.cpp
msgid "Update Changes"
@@ -2292,7 +2360,7 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Save As.."
-msgstr ""
+msgstr "ذخیره در..."
#: tools/editor/editor_node.cpp
msgid "Go to the previous edited object in history."
@@ -2316,7 +2384,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Output"
-msgstr ""
+msgstr "خروجی"
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import"
@@ -2324,7 +2392,7 @@ msgstr ""
#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
msgid "Update"
-msgstr ""
+msgstr "بروز رسانی"
#: tools/editor/editor_node.cpp
msgid "Thanks from the Godot community!"
@@ -2332,51 +2400,51 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Thanks!"
-msgstr ""
+msgstr "تشکرات!"
#: tools/editor/editor_node.cpp
msgid "Import Templates From ZIP File"
-msgstr ""
+msgstr "واردکردن قالب ها از درون یک فایل ZIP"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Export Project"
-msgstr ""
+msgstr "صادر کردن پروژه"
#: tools/editor/editor_node.cpp
msgid "Export Library"
-msgstr ""
+msgstr "صادکردن فایل کتابخانه ای"
#: tools/editor/editor_node.cpp
msgid "Merge With Existing"
-msgstr ""
+msgstr "ترکیب کردن با نمونه ی موجود"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Password:"
-msgstr ""
+msgstr "گذرواژه:"
#: tools/editor/editor_node.cpp
msgid "Open & Run a Script"
-msgstr ""
+msgstr "باز کردن و اجرای یک اسکریپت"
#: tools/editor/editor_node.cpp
msgid "Load Errors"
-msgstr ""
+msgstr "خطاهای بارگذاری"
#: tools/editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr ""
+msgstr "افزونه های نصب شده:"
#: tools/editor/editor_plugin_settings.cpp
msgid "Version:"
-msgstr ""
+msgstr "نسخه:"
#: tools/editor/editor_plugin_settings.cpp
msgid "Author:"
-msgstr ""
+msgstr "خالق:"
#: tools/editor/editor_plugin_settings.cpp
msgid "Status:"
-msgstr ""
+msgstr "وضعیت:"
#: tools/editor/editor_profiler.cpp
msgid "Stop Profiling"
@@ -2408,7 +2476,7 @@ msgstr ""
#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
msgid "Time:"
-msgstr ""
+msgstr "زمان:"
#: tools/editor/editor_profiler.cpp
msgid "Inclusive"
@@ -2673,6 +2741,8 @@ msgstr ""
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "The quick brown fox jumps over the lazy dog."
msgstr ""
+"کلاغ فرز و چابک، ظهر هر روز با صدای ضخیم و عذاب‌آورش بـه جستجوی یک مثقال گنج "
+"پنهان در حیاط رژه می رفت."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Test:"
@@ -3584,9 +3654,8 @@ msgid "Paste Pose"
msgstr ""
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "انتخاب همه"
+msgstr "انتخاب حالت"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -5539,7 +5608,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Samples"
-msgstr ""
+msgstr "نمونه ها"
#: tools/editor/project_export.cpp
msgid "Sample Conversion Mode: (.wav files):"
@@ -5702,6 +5771,8 @@ msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
msgstr ""
+"شما درخواست بررسی پوشه های ٪‌ را برای پیدا کردن پروژه های Godot‌ را داده اید. "
+"آیا انجام این عمل را تایید می کنید!؟‌"
#: tools/editor/project_manager.cpp
msgid "Project Manager"
@@ -6015,6 +6086,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "دارایی Setter را اضافه کن"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "انتخاب حالت"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6220,9 +6301,8 @@ msgid "Save Branch as Scene"
msgstr ""
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "لطفا تأیید کنید..."
+msgstr "خذف(تایید نشده)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
@@ -6535,3 +6615,10 @@ msgstr ""
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Notifier Extents"
msgstr ""
+
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "گره سفارشی دارای get_output_port_unsequenced(idx,wmem)_ نیست، اما پورت‌های "
+#~ "نامتوالی مشخص شده است."
diff --git a/tools/translations/fr.po b/tools/translations/fr.po
index fd80de3c83..354934fefa 100644
--- a/tools/translations/fr.po
+++ b/tools/translations/fr.po
@@ -8,14 +8,17 @@
# Hugo Locurcio <hugo.l@openmailbox.org>, 2016.
# Marc <marc.gilleron@gmail.com>, 2016.
# Onyx Steinheim <thevoxelmanonyx@gmail.com>, 2016.
+# rafeu <duchainer@gmail.com>, 2016.
# Rémi Verschelde <rverschelde@gmail.com>, 2016.
+# Roger BR <drai_kin@hotmail.com>, 2016.
+# Thomas Baijot <thomasbaijot@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-08-09 20:42+0000\n"
-"Last-Translator: Hugo Locurcio <hugo.l@openmailbox.org>\n"
+"PO-Revision-Date: 2016-08-29 13:56+0000\n"
+"Last-Translator: Thomas Baijot <thomasbaijot@gmail.com>\n"
"Language-Team: French <https://hosted.weblate.org/projects/godot-engine/"
"godot/fr/>\n"
"Language: fr\n"
@@ -37,7 +40,7 @@ msgstr "Pas assez d'octets pour les octets de décodage, ou format non valide."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
-msgstr ""
+msgstr "L'argument du pas est zéro!"
#: modules/gdscript/gd_functions.cpp
msgid "Not a script with an instance"
@@ -91,7 +94,7 @@ msgstr ""
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Le nœud a retourné une séquence de sortie invalide "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -102,66 +105,57 @@ msgid "Stack overflow with stack depth: "
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
msgstr "Fonction :"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Variable"
+msgstr "Variables:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
msgstr "Signaux :"
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Le nom n'est pas un identifiant valide"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Le nom est déjà utilisé dans une autre func/var/signal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Créer une fonction"
+msgstr "Renommer la fonction"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Renommer l'échantillon"
+msgstr "Renommer la variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Renommer l'échantillon"
+msgstr "Renommer le signal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Fonction :"
+msgstr "Ajouter une fonction"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Variable"
+msgstr "Ajouter une variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Signaux"
+msgstr "Ajouter un signal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Supprimer la sélection"
+msgstr "Supprimer la fonction"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Variable"
+msgstr "Supprimer la variable"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -169,9 +163,8 @@ msgid "Editing Variable:"
msgstr "Variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Supprimer la sélection"
+msgstr "Supprimer le signal"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -179,21 +172,48 @@ msgid "Editing Signal:"
msgstr "Connecter un signal :"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "Ajouter un nœud enfant"
+msgstr "Ajouter un nœud"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
+msgid "Add Preload Node"
+msgstr "Ajouter un nœud enfant"
+
+#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
-msgstr "Nœud à partir d'une scène"
+msgstr "Ajouter un nœud à partir de l'arbre"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Add Setter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -206,22 +226,20 @@ msgid "Edit"
msgstr "Modifier"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "Type de données :"
+msgstr "Type de base"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
msgstr "Membres :"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Available Nodes:"
-msgstr "Nœud TimeScale"
+msgstr "Nœuds disponibles:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Sélectionner ou créer une fonction pour éditer le graph"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -237,24 +255,20 @@ msgid "Close"
msgstr "Fermer"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "Arguments supplémentaires :"
+msgstr "Editer les arguments du signal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Variable"
+msgstr "Editer la variable"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Changer le type"
+msgstr "Changer"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Supprimer les fichiers sélectionnés ?"
+msgstr "Supprimer la selection"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -263,8 +277,23 @@ msgstr "Placer un point d'arrêt"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Trouver le suivant"
+msgid "Find Node Type"
+msgstr "Trouver le type du noeud"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Copier la pose"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Créer un nœud"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Coller la pose"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -272,11 +301,11 @@ msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "L'itérateur est devenu invalide"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "L'itérateur est devenu invalide "
#: modules/visual_script/visual_script_func_nodes.cpp
#, fuzzy
@@ -285,12 +314,11 @@ msgstr "Nom de classe parent invalide"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "L'objet de base n'est pas un nœud !"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "Le chemin n'est pas local"
+msgstr "Le chemin ne mène pas au nœud !"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
@@ -302,9 +330,8 @@ msgid ": Invalid argument of type: "
msgstr "Nom de classe parent invalide"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Nom de classe parent invalide"
+msgstr ": Arguments invalides "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -315,12 +342,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -575,7 +596,8 @@ msgstr "Tous les fichiers (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Ouvrir"
@@ -1110,18 +1132,17 @@ msgid "Resize Array"
msgstr "Redimensionner le tableau"
#: tools/editor/array_property_edit.cpp
-#, fuzzy
msgid "Change Array Value Type"
-msgstr "Changer les valeurs types d'un tableau"
+msgstr "Changer les types des valeurs du tableau"
#: tools/editor/array_property_edit.cpp
-#, fuzzy
msgid "Change Array Value"
-msgstr "Changer la valeur d'un tableau"
+msgstr "Changer les valeurs du tableau"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Rechercher :"
@@ -1279,7 +1300,7 @@ msgstr "Dézoomer"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Réinitialiser le zoom"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1370,10 +1391,16 @@ msgid "Create New"
msgstr "Créer un nouveau"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Correspondances :"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Description :"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Rechercher un remplacement pour :"
@@ -1534,9 +1561,8 @@ msgid "File does not exist."
msgstr "Le fichier n'existe pas."
#: tools/editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Not in resource path."
-msgstr "Chemin de la ressource"
+msgstr "Pas dans le chemin de la ressource."
#: tools/editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
@@ -1707,10 +1733,6 @@ msgstr "Items de thème GUI :"
msgid "Constants:"
msgstr "Constantes :"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Description :"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Description de la méthode :"
@@ -2019,9 +2041,8 @@ msgstr ""
"(les modifications non sauvegardées seront perdues)"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Pick a Main Scene"
-msgstr "Scène principale"
+msgstr "Choisir une scène principale"
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
msgid "Ugh"
@@ -2082,19 +2103,16 @@ msgid "Fullscreen Mode"
msgstr "Mode plein écran"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Distraction Free Mode"
-msgstr "Mode distraction libre"
+msgstr "Mode sans distraction"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Next tab"
-msgstr "Suivant"
+msgstr "Onglet suivant"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Previous tab"
-msgstr "Répertoire précédent"
+msgstr "Onglet precedent"
#: tools/editor/editor_node.cpp
msgid "Operations with scene files."
@@ -2117,9 +2135,8 @@ msgid "Save Scene"
msgstr "Enregistrer la scène"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Save all Scenes"
-msgstr "Enregistrer la scène"
+msgstr "Enregistrer toutes les scènes"
#: tools/editor/editor_node.cpp
msgid "Close Scene"
@@ -2258,12 +2275,11 @@ msgid "Deploy with Remote Debug"
msgstr "Déployer avec le débogage distant"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid ""
"When exporting or deploying, the resulting executable will attempt to "
"connect to the IP of this computer in order to be debugged."
msgstr ""
-"Lors de l'exportation ou du déploiement, l'exécutable tentera de se "
+"Lors de l'exportation ou du déploiement, l'exécutable produit tentera de se "
"connecter à l'adresse IP de cet ordinateur afin de procéder au débogage."
#: tools/editor/editor_node.cpp
@@ -2307,12 +2323,11 @@ msgid "Visible Navigation"
msgstr "Navigation visible"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid ""
"Navigation meshes and polygons will be visible on the running game if this "
"option is turned on."
msgstr ""
-"la navigation des maillages et des polygones sera visible en jeu si cette "
+"Les maillages et polygones de navigation seront visibles en jeu si cette "
"option est activée."
#: tools/editor/editor_node.cpp
@@ -2321,7 +2336,6 @@ msgid "Sync Scene Changes"
msgstr "Changement de synchronisation de scène"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid ""
"When this option is turned on, any changes made to the scene in the editor "
"will be replicated in the running game.\n"
@@ -2330,8 +2344,8 @@ msgid ""
msgstr ""
"Lorsque cette option est activée, toutes les modifications apportées à la "
"scène dans l'éditeur seront reproduites en jeu.\n"
-"Lorsque c'est utilisé à distance sur un périphérique, c'est plus efficace "
-"avec le système de fichiers réseau."
+"Lorsqu'elle est utilisée à distance sur un périphérique, l'efficacité est "
+"meilleure avec le système de fichiers réseau."
#: tools/editor/editor_node.cpp
msgid "Sync Script Changes"
@@ -2491,29 +2505,24 @@ msgid "Status:"
msgstr "État :"
#: tools/editor/editor_profiler.cpp
-#, fuzzy
msgid "Stop Profiling"
-msgstr "Arrêt du profilage"
+msgstr "Arrêter le profilage"
#: tools/editor/editor_profiler.cpp
-#, fuzzy
msgid "Start Profiling"
-msgstr "Démarrage du profilage"
+msgstr "Démarrer le profilage"
#: tools/editor/editor_profiler.cpp
-#, fuzzy
msgid "Measure:"
-msgstr "Quantité:"
+msgstr "Mesure:"
#: tools/editor/editor_profiler.cpp
-#, fuzzy
msgid "Frame Time (sec)"
-msgstr "Image par seconde"
+msgstr "Temps image (en seconde)"
#: tools/editor/editor_profiler.cpp
-#, fuzzy
msgid "Average Time (sec)"
-msgstr "Temps moyen (sec)"
+msgstr "Temps moyen (seconde)"
#: tools/editor/editor_profiler.cpp
#, fuzzy
@@ -3369,9 +3378,9 @@ msgid "ERROR: No animation to edit!"
msgstr "ERREUR : Pas d'animation à modifier !"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Play selected animation backwards from current pos. (A)"
-msgstr "Lire l'animation sélectionnée à rebours de la position actuelle. (A)"
+msgstr ""
+"Jouer l'animation sélectionnée à l'envers depuis la position actuelle. (A)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#, fuzzy
@@ -6214,6 +6223,16 @@ msgstr "Global"
msgid "Sections:"
msgstr "Sections :"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Sélectionner des points"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Mode sélection (Q)"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "Impossible d'exécuter l'outil PVRTC :"
diff --git a/tools/translations/id.po b/tools/translations/id.po
index 0b8c1db749..0478612745 100644
--- a/tools/translations/id.po
+++ b/tools/translations/id.po
@@ -2,191 +2,239 @@
# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
# This file is distributed under the same license as the Godot source code.
#
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Abdul Aziz Muslim Alqudsy <abdul.aziz.muslim.alqudsy@gmail.com>, 2016.
+# Andinawan Asa <asaandinawan@gmail.com>, 2016.
+# Khairul Hidayat <khairulcyber4rt@gmail.com>, 2016.
+# yursan9 <rizal.sagi@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2016-08-27 02:11+0000\n"
+"Last-Translator: yursan9 <rizal.sagi@gmail.com>\n"
+"Language-Team: Indonesian <https://hosted.weblate.org/projects/godot-engine/"
+"godot/id/>\n"
"Language: id\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 2.8-dev\n"
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
msgstr ""
+"Tipe argument salah dalam menggunakan convert(), gunakan konstanta TYPE_*."
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr ""
+msgstr "Tidak cukup bytes untuk menerjemahkan, atau format tidak sah."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
-msgstr ""
+msgstr "Langkah argumen adalah nol!"
#: modules/gdscript/gd_functions.cpp
+#, fuzzy
msgid "Not a script with an instance"
-msgstr ""
+msgstr "Skrip tidak mempunyai turunannya"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a script"
-msgstr ""
+msgstr "Tidak berbasis skrip"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a resource file"
-msgstr ""
+msgstr "Tidak berbasis resource file"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr ""
+msgstr "Format kamus acuan tidak sah (@path hilang)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
-msgstr ""
+msgstr "Format kamus acuan tidak sah (tidak dapat memuat script pada @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr ""
+msgstr "Format kamus acuan tidak sah (skrip tidak sah pada @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
-msgstr ""
+msgstr "Kamus acuan tidak sah (sub kelas tidak sah)"
#: modules/visual_script/visual_script.cpp
msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Sebuah node dihasilkan tanpa kerja memori, silahkan baca dokumentasi tentang "
+"bagaimana menggunakannya dengan benar!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"Node dihasilkan, tetapi keadaan sebuah fungsi tidak kembali saat kerja "
+"memori pertama."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"Nilai pengembalian harus ditetapkan pada elemen pertama dari node kerja "
+"memori! Silahkan perbaiki node anda."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Node mengembalikan sebuah keluaran urutan yang tidak sah: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
+"Telah ditemukan urutan dalam jumlah sedikit tetapi bukan node dalam jumlah "
+"besar, laporkan bug!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Tumpukan melimpah dengan kedalaman tumpukan: "
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr ""
+msgstr "Fungsi-fungsi:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
-msgstr ""
+msgstr "Variabel-variabel:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
-msgstr ""
+msgstr "Sinyal-sinyal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Nama bukan sebuah pengidentifikasi yang sah:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Nama telah digunakan oleh fungsi/variabel/sinyal yang lain:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Function"
-msgstr ""
+msgstr "Namai kembali Fungsi"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Variable"
-msgstr ""
+msgstr "Namai kembali Variabel"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Signal"
-msgstr ""
+msgstr "Namai kembali Sinyal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function"
-msgstr ""
+msgstr "Tambahkan Fungsi"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
-msgstr ""
+msgstr "Tambahkan Variabel"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr ""
+msgstr "Tambahkan Sinyal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
-msgstr ""
+msgstr "Hapus Fungsi"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr ""
+msgstr "Hapus Variabel"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
-msgstr ""
+msgstr "Mengedit Variabel:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr ""
+msgstr "Hapus Sinyal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
-msgstr ""
+msgstr "Mengedit Sinyal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
+msgstr "Tambahkan Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Meta to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Tambahkan Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Tambahkan Node (Node-node) dari Tree"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Tambahkan Properti Getter"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Tambahkan Properti Setter"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Edit"
-msgstr ""
+msgstr "Edit"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
-msgstr ""
+msgstr "Tipe Dasar:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
-msgstr ""
+msgstr "Member-member:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "Node-node yang Tersedia:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Pilih atau ciptakan sebuah fungsi untuk mengedit grafik"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -199,104 +247,121 @@ msgstr ""
#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
msgid "Close"
-msgstr ""
+msgstr "Tutup"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr ""
+msgstr "Edit Argumen-argumen Sinyal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
-msgstr ""
+msgstr "Edit Variabel:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change"
-msgstr ""
+msgstr "Ubah"
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete Selected"
-msgstr ""
+msgstr "Hapus yang Dipilih"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
-msgstr ""
+msgstr "Beralih Breakpoint"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "Cari Tipe Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Salin Resource"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Cut Nodes"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Path ke Node:"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "Tipe masukan tidak iterable: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "Iterator menjadi tidak sah"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "Iterator menjadi tidak sah: "
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name."
-msgstr ""
+msgstr "Nama properti index tidak sah."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "Objek dasar bukan sebuah Node!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
-msgstr ""
+msgstr "Path tidak menunjukkan Node!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Nama properti index '%s' tidak sah dalam node %s."
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ""
+msgstr ": Argumen tidak sah dari tipe: "
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid arguments: "
-msgstr ""
+msgstr ": Argumen-argumen tidak sah: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet tidak ditemukan dalam script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet tidak ditemukan dalam script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
+"Node modifikasi tidak memiliki method _step(), tidak bisa memproses grafik."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"Nilai kembali dari _step() tidak sah, seharusnya integer (seq out), atau "
+"string (error)."
#: scene/2d/animated_sprite.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
"order for AnimatedSprite to display frames."
msgstr ""
+"Sebuah resource SpriteFrames seharusnya diciptakan atau diatur dalam "
+"properti 'Frames' agar AnimatedSprite menampilkan frame-frame."
#: scene/2d/canvas_modulate.cpp
msgid ""
"Only one visible CanvasModulate is allowed per scene (or set of instanced "
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
+"Hanya satu visible CanvasModulate yang diizinkan per scene (atau atur pada "
+"scene-scene yang diacu). Yang diciptakan pertama akan bekerja, sedangkan "
+"sisanya akan diabaikan."
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -304,10 +369,15 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
+"CollisionPolygon2D hanya berfungsi untuk menyediakan sebuah bentuk collision "
+"pada sebuah CollisionObject2D node asal. Mohon hanya gunakan itu sebagai "
+"sebuah child dari Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, dll. "
+"untuk memberikan mereka sebuah bentuk."
#: scene/2d/collision_polygon_2d.cpp
msgid "An empty CollisionPolygon2D has no effect on collision."
msgstr ""
+"Sebuah CollisionPolygon2D yang kosong tidak memiliki efek pada collision."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -315,84 +385,113 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
+"CollisionShape2D hanya berfungsi untuk menyediakan sebuah bentuk collision "
+"pada sebuah CollisionObject2D node asal. Mohon hanya gunakan itu sebagai "
+"sebuah child dari Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, dll. "
+"untuk memberikan mereka sebuah bentuk."
#: scene/2d/collision_shape_2d.cpp
msgid ""
"A shape must be provided for CollisionShape2D to function. Please create a "
"shape resource for it!"
msgstr ""
+"Sebuah bentuk harus disediakan untuk CollisionShape2D untuk fungsi. Mohon "
+"ciptakan resource bentuk untuk itu!"
#: scene/2d/light_2d.cpp
msgid ""
"A texture with the shape of the light must be supplied to the 'texture' "
"property."
msgstr ""
+"Sebuah tekstur dengan bentuk cahaya harus disuplai ke properti 'texture'."
#: scene/2d/light_occluder_2d.cpp
msgid ""
"An occluder polygon must be set (or drawn) for this occluder to take effect."
msgstr ""
+"Sebuah polygon occluder harus diatur (atau digambar) untuk occluder ini "
+"berpengaruh."
#: scene/2d/light_occluder_2d.cpp
msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
msgstr ""
+"Polygon occluder untuk occluder ini kosong. Mohon gambar dulu sebuah polygon!"
#: scene/2d/navigation_polygon.cpp
msgid ""
"A NavigationPolygon resource must be set or created for this node to work. "
"Please set a property or draw a polygon."
msgstr ""
+"Sebuah resource NavigationPolygon harus diatur atau diciptakan untuk node "
+"ini bekerja. Mohon atur sebuah properti atau gambar sebuah polygon."
#: scene/2d/navigation_polygon.cpp
msgid ""
"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
"node. It only provides navigation data."
msgstr ""
+"NavigationPolygonInstance harus menjadi sebuah child atau grandchild ke "
+"sebuah node Navigation2D. Ini hanya menyediakan data navigasi."
#: scene/2d/parallax_layer.cpp
msgid ""
"ParallaxLayer node only works when set as child of a ParallaxBackground node."
msgstr ""
+"Node ParallaxLayer hanya bekerja ketika diatur sebagai child dari sebuah "
+"node ParallaxBackground."
#: scene/2d/particles_2d.cpp
msgid "Path property must point to a valid Particles2D node to work."
msgstr ""
+"Properti path harus menunjuk ke sebuah node Particles2D yang sah agar "
+"bekerja."
#: scene/2d/path_2d.cpp
msgid "PathFollow2D only works when set as a child of a Path2D node."
msgstr ""
+"PathFollow2D hanya bekerja ketika diatur sebagai sebuah child dari sebuah "
+"node Path2D."
#: scene/2d/remote_transform_2d.cpp
msgid "Path property must point to a valid Node2D node to work."
msgstr ""
+"Properti path harus menunjuk pada sebuah node Node2D yang sah untuk bekerja."
#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
msgid ""
"A SampleLibrary resource must be created or set in the 'samples' property in "
"order for SamplePlayer to play sound."
msgstr ""
+"Sebuah resource SampleLibrary harus diciptakan atau diatur didalam properti "
+"'samples' agar SamplePlayer memainkan suara."
#: scene/2d/sprite.cpp
msgid ""
"Path property must point to a valid Viewport node to work. Such Viewport "
"must be set to 'render target' mode."
msgstr ""
+"Properti path harus menunjuk pada node Viewport yang sah untuk bekerja. "
+"Viewport tersebut harus diatur ke mode 'render target'."
#: scene/2d/sprite.cpp
msgid ""
"The Viewport set in the path property must be set as 'render target' in "
"order for this sprite to work."
msgstr ""
+"Pengaturan Vieport dalam properti path harus diatur sebagai 'render target' "
+"agar sprite bekerja."
#: scene/2d/visibility_notifier_2d.cpp
msgid ""
"VisibilityEnable2D works best when used with the edited scene root directly "
"as parent."
msgstr ""
+"VisibilityEnable2D bekerja dengan sangat baik ketika digunakan dengan "
+"mengedit root scene secara langsung sebagai parent."
#: scene/3d/baked_light_instance.cpp
msgid "BakedLightInstance does not contain a BakedLight resource."
-msgstr ""
+msgstr "BakedLightInstance tidak berisi resource BakedLight."
#: scene/3d/body_shape.cpp
msgid ""
@@ -400,12 +499,18 @@ msgid ""
"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
"KinematicBody, etc. to give them a shape."
msgstr ""
+"CollisionShape hanya berfungsi untuk memberikan sebuah bentuk collision ke "
+"node CollisionObject asal. Mohon hanya gunakan ini sebagai child dari Area, "
+"StaticBody, RigidBody, KinematicBody, dll. untuk memberi mereka sebuah "
+"bentuk."
#: scene/3d/body_shape.cpp
msgid ""
"A shape must be provided for CollisionShape to function. Please create a "
"shape resource for it!"
msgstr ""
+"Sebuah bentuk harus disediakan untuk CollisionShape untuk fungsi. Mohon "
+"ciptakan sebuah resource bentuk untuk itu!"
#: scene/3d/collision_polygon.cpp
msgid ""
@@ -413,203 +518,220 @@ msgid ""
"CollisionObject derived node. Please only use it as a child of Area, "
"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
msgstr ""
+"CollisionPolygon hanya berfungsi untuk menyediakan sebuah bentuk collision "
+"ke node CollisionObject asal. Mohon hanya gunakan ini sebagai child dari "
+"Area, StaticBody, RigidBody, KinematicBody, dll. untuk memberi mereka bentuk."
#: scene/3d/collision_polygon.cpp
msgid "An empty CollisionPolygon has no effect on collision."
msgstr ""
+"Sebuah CollisionPolygon yang kosong tidak memiliki efek pada collision."
#: scene/3d/navigation_mesh.cpp
msgid "A NavigationMesh resource must be set or created for this node to work."
msgstr ""
+"Sebuah resource NavigationMesh harus diatur atau diciptakan untuk node ini "
+"bekerja."
#: scene/3d/navigation_mesh.cpp
msgid ""
"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
"It only provides navigation data."
msgstr ""
+"NavigationMeshInstance harus menjadi child atau grandchild untuk sebuah node "
+"Navigation. Ini hanya menyediakan data navigasi."
#: scene/3d/scenario_fx.cpp
msgid ""
"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
msgstr ""
+"Hanya satu WorldEnvironment yang diizinkan per scene (atau atur scene-scene "
+"yang diacu)."
#: scene/3d/spatial_sample_player.cpp
msgid ""
"A SampleLibrary resource must be created or set in the 'samples' property in "
"order for SpatialSamplePlayer to play sound."
msgstr ""
+"Sebuah resource SampleLibrary harus dibuat atau diatur didalam properti "
+"'samples' agar SpatialSamplePlayer memainkan suara."
#: scene/3d/sprite_3d.cpp
msgid ""
"A SpriteFrames resource must be created or set in the 'Frames' property in "
"order for AnimatedSprite3D to display frames."
msgstr ""
+"Sebuah resource SpriteFrames harus diciptakan atau diatur didalam properti "
+"'Frames' agar AnimatedSprite3D menampilkan frame-frame."
#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Cancel"
-msgstr ""
+msgstr "Batal"
#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp
msgid "OK"
-msgstr ""
+msgstr "Oke"
#: scene/gui/dialogs.cpp
msgid "Alert!"
-msgstr ""
+msgstr "Peringatan!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr ""
+msgstr "Mohon konfirmasi..."
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "File Exists, Overwrite?"
-msgstr ""
+msgstr "File telah ada, Overwrite?"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Recognized"
-msgstr ""
+msgstr "Semua diakui"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Files (*)"
-msgstr ""
+msgstr "Semua File-file (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
-msgstr ""
+msgstr "Buka"
#: scene/gui/file_dialog.cpp
msgid "Open a File"
-msgstr ""
+msgstr "Buka sebuah File"
#: scene/gui/file_dialog.cpp
msgid "Open File(s)"
-msgstr ""
+msgstr "Buka File (File-file)"
#: scene/gui/file_dialog.cpp
msgid "Open a Directory"
-msgstr ""
+msgstr "Buka sebuah Direktori"
#: scene/gui/file_dialog.cpp
msgid "Open a File or Directory"
-msgstr ""
+msgstr "Buka sebuah File atau Direktori"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save"
-msgstr ""
+msgstr "Simpan"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Save a File"
-msgstr ""
+msgstr "Simpan sebuah File"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp
msgid "Create Folder"
-msgstr ""
+msgstr "Buat Folder"
#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp
#: tools/editor/editor_file_dialog.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
#: tools/editor/script_create_dialog.cpp
msgid "Path:"
-msgstr ""
+msgstr "Path:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Directories & Files:"
-msgstr ""
+msgstr "Direktori-direktori & File-file:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/script_editor_debugger.cpp
msgid "File:"
-msgstr ""
+msgstr "File:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Filter:"
-msgstr ""
+msgstr "Filter:"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Name:"
-msgstr ""
+msgstr "Nama:"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp
msgid "Could not create folder."
-msgstr ""
+msgstr "Tidak dapat membuat folder."
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Must use a valid extension."
-msgstr ""
+msgstr "Harus menggunakan ekstensi yang sah."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Shift+"
-msgstr ""
+msgstr "Shift+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Alt+"
-msgstr ""
+msgstr "Alt+"
#: scene/gui/input_action.cpp
msgid "Ctrl+"
-msgstr ""
+msgstr "Ctrl+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Meta+"
-msgstr ""
+msgstr "Meta+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Device"
-msgstr ""
+msgstr "Perangkat"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Button"
-msgstr ""
+msgstr "Tombol"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Left Button."
-msgstr ""
+msgstr "Tombol Kiri."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Right Button."
-msgstr ""
+msgstr "Tombol Kanan."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Middle Button."
-msgstr ""
+msgstr "Tombol Tengah."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#, fuzzy
msgid "Wheel Up."
-msgstr ""
+msgstr "Scroll keatas."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#, fuzzy
msgid "Wheel Down."
-msgstr ""
+msgstr "Scroll kebawah."
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Axis"
-msgstr ""
+msgstr "Axis"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Cut"
-msgstr ""
+msgstr "Potong"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
msgid "Copy"
-msgstr ""
+msgstr "Kopy"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
@@ -618,27 +740,27 @@ msgstr ""
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
msgid "Paste"
-msgstr ""
+msgstr "Tempel"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_export.cpp
msgid "Select All"
-msgstr ""
+msgstr "Pilih Semua"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
#: tools/editor/plugins/rich_text_editor_plugin.cpp
#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Clear"
-msgstr ""
+msgstr "Bersihkan"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Undo"
-msgstr ""
+msgstr "Batal"
#: scene/gui/popup.cpp
msgid ""
@@ -646,90 +768,109 @@ msgid ""
"functions. Making them visible for editing is fine though, but they will "
"hide upon running."
msgstr ""
+"Popup-popup akan sembunyi secara default kecuali panggil popup() atau apapun "
+"dari fungsi-fungsi popup*(). Meskipun membuat mereka terlihat untuk mengedit "
+"itu baik, tetapi mereka akan sembunyi saat berjalan."
#: scene/main/viewport.cpp
+#, fuzzy
msgid ""
"This viewport is not set as render target. If you intend for it to display "
"its contents directly to the screen, make it a child of a Control so it can "
"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
"texture to some node for display."
msgstr ""
+"Viewport ini tidak diatur sebagai target render. Jika anda berniat untuk "
+"menampilkan konten-kontennya secara langsung ke layar, buatlah sebuah child "
+"dari kontrol jadi hal tersebut bisa memperoleh ukuran. Jika tidak, buatlah "
+"sebuah RenderTarget dan tetapkannya tekstur internal untuk beberapa node "
+"untuk ditampilkan."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Error initializing FreeType."
-msgstr ""
+msgstr "Error menginisialisasi FreeType."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Unknown font format."
-msgstr ""
+msgstr "Format font tidak diketahui."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Error loading font."
-msgstr ""
+msgstr "Error memuat font."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Invalid font size."
-msgstr ""
+msgstr "Ukuran font tidak sah."
#: tools/editor/animation_editor.cpp
msgid "Disabled"
-msgstr ""
+msgstr "Dinonaktifkan"
#: tools/editor/animation_editor.cpp
msgid "All Selection"
-msgstr ""
+msgstr "Semua pilihan"
#: tools/editor/animation_editor.cpp
msgid "Move Add Key"
-msgstr ""
+msgstr "Pindahkan Kunci Tambah"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Transition"
-msgstr ""
+msgstr "Ubah Transisi Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Transform"
-msgstr ""
+msgstr "Ubah Transformasi Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Value"
-msgstr ""
+msgstr "Ubah Nilai Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Change Call"
-msgstr ""
+msgstr "Ubah Panggilan Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Add Track"
-msgstr ""
+msgstr "Tambah Track Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Duplicate Keys"
-msgstr ""
+msgstr "Duplikat Tombol Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Move Anim Track Up"
-msgstr ""
+msgstr "Pindahkan Track Anim ke Atas"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Move Anim Track Down"
-msgstr ""
+msgstr "Pindahkan Track Anim ke Bawah"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Remove Anim Track"
-msgstr ""
+msgstr "Hapus Track Anim"
#: tools/editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr ""
+msgstr "Atur transisi ke:"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Track Rename"
-msgstr ""
+msgstr "Namai Kembali Track Anim"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Change Interpolation"
@@ -737,113 +878,117 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Anim Track Change Value Mode"
-msgstr ""
+msgstr "Ganti Mode Nilai Track Anim"
#: tools/editor/animation_editor.cpp
msgid "Edit Node Curve"
-msgstr ""
+msgstr "Edit Kurva Node"
#: tools/editor/animation_editor.cpp
msgid "Edit Selection Curve"
-msgstr ""
+msgstr "Edit Kurva Pilihan"
#: tools/editor/animation_editor.cpp
msgid "Anim Delete Keys"
-msgstr ""
+msgstr "Hapus Kunci Anim"
#: tools/editor/animation_editor.cpp
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Duplicate Selection"
-msgstr ""
+msgstr "Duplikat Pilihan"
#: tools/editor/animation_editor.cpp
msgid "Duplicate Transposed"
-msgstr ""
+msgstr "Duplikat Dialihkan"
#: tools/editor/animation_editor.cpp
msgid "Remove Selection"
-msgstr ""
+msgstr "Hapus Pilihan"
#: tools/editor/animation_editor.cpp
msgid "Continuous"
-msgstr ""
+msgstr "Lanjut"
#: tools/editor/animation_editor.cpp
msgid "Discrete"
-msgstr ""
+msgstr "Berlainan"
#: tools/editor/animation_editor.cpp
msgid "Trigger"
-msgstr ""
+msgstr "Pemicu"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Key"
-msgstr ""
+msgstr "Tambah Kunci Anim"
#: tools/editor/animation_editor.cpp
msgid "Anim Move Keys"
-msgstr ""
+msgstr "Pindahkan Kunci Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Scale Selection"
-msgstr ""
+msgstr "Beri Skala Seleksi"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Scale From Cursor"
-msgstr ""
+msgstr "Beri Skala dari Kursor"
#: tools/editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr ""
+msgstr "Lanjut ke Langkah Berikutnya"
#: tools/editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr ""
+msgstr "Lanjut ke Langkah Sebelumnya"
#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
msgid "Linear"
-msgstr ""
+msgstr "Linier"
#: tools/editor/animation_editor.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Constant"
-msgstr ""
+msgstr "Konstan"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "In"
-msgstr ""
+msgstr "Kedalam"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Out"
-msgstr ""
+msgstr "Keluar"
#: tools/editor/animation_editor.cpp
msgid "In-Out"
-msgstr ""
+msgstr "Masuk-Keluar"
#: tools/editor/animation_editor.cpp
msgid "Out-In"
-msgstr ""
+msgstr "Keluar-Masuk"
#: tools/editor/animation_editor.cpp
msgid "Transitions"
-msgstr ""
+msgstr "Transisi"
#: tools/editor/animation_editor.cpp
msgid "Optimize Animation"
-msgstr ""
+msgstr "Optimalkan Animasi"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation"
-msgstr ""
+msgstr "Bersihkan Animasi"
#: tools/editor/animation_editor.cpp
msgid "Create NEW track for %s and insert key?"
-msgstr ""
+msgstr "Buat track BARU untuk %s dan masukkan tombol?"
#: tools/editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr ""
+msgstr "Buat track BARU %d dan masukkan tombol-tombol?"
#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -852,267 +997,275 @@ msgstr ""
#: tools/editor/plugins/particles_editor_plugin.cpp
#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
msgid "Create"
-msgstr ""
+msgstr "Buat"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Create & Insert"
-msgstr ""
+msgstr "Anim Buat & Masukan"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Insert Track & Key"
-msgstr ""
+msgstr "Masukkan Track & Tombol Anim"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Insert Key"
-msgstr ""
+msgstr "Anim Masukkan Tombol"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr ""
+msgstr "Ubah Panjang Animasi"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr ""
+msgstr "Ubah Perulangan Animasi"
#: tools/editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
-msgstr ""
+msgstr "Buat Nilai Kunci Animasi Tertulis"
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim Insert"
-msgstr ""
+msgstr "Anim Masukkan"
#: tools/editor/animation_editor.cpp
msgid "Anim Scale Keys"
-msgstr ""
+msgstr "Skala Kunci Anim"
#: tools/editor/animation_editor.cpp
msgid "Anim Add Call Track"
-msgstr ""
+msgstr "Tambah Pemanggilan Track Anim"
#: tools/editor/animation_editor.cpp
msgid "Animation zoom."
-msgstr ""
+msgstr "Zoom animasi."
#: tools/editor/animation_editor.cpp
msgid "Length (s):"
-msgstr ""
+msgstr "Panjang:"
#: tools/editor/animation_editor.cpp
msgid "Animation length (in seconds)."
-msgstr ""
+msgstr "Panjang animasi (dalam detik)."
#: tools/editor/animation_editor.cpp
msgid "Step (s):"
-msgstr ""
+msgstr "Langkah:"
#: tools/editor/animation_editor.cpp
msgid "Cursor step snap (in seconds)."
-msgstr ""
+msgstr "Langkah kursor sekejap (dalam detik)."
#: tools/editor/animation_editor.cpp
msgid "Enable/Disable looping in animation."
-msgstr ""
+msgstr "Aktifkan/Nonaktifkan pengulangan dalam animasi."
#: tools/editor/animation_editor.cpp
msgid "Add new tracks."
-msgstr ""
+msgstr "Tambah tracks baru."
#: tools/editor/animation_editor.cpp
msgid "Move current track up."
-msgstr ""
+msgstr "Pindahkan track sekarang ke atas."
#: tools/editor/animation_editor.cpp
msgid "Move current track down."
-msgstr ""
+msgstr "Pindahkan track sekarang ke bawah."
#: tools/editor/animation_editor.cpp
msgid "Remove selected track."
-msgstr ""
+msgstr "Hapus track yang dipilih."
#: tools/editor/animation_editor.cpp
msgid "Track tools"
-msgstr ""
+msgstr "Alat track"
#: tools/editor/animation_editor.cpp
msgid "Enable editing of individual keys by clicking them."
-msgstr ""
+msgstr "Aktifkan penyuntingan tombol-tombol individual dengan mengkliknya."
#: tools/editor/animation_editor.cpp
+#, fuzzy
msgid "Anim. Optimizer"
-msgstr ""
+msgstr "Anim. Optimisasi"
#: tools/editor/animation_editor.cpp
msgid "Max. Linear Error:"
-msgstr ""
+msgstr "Maks. Linier Error:"
#: tools/editor/animation_editor.cpp
msgid "Max. Angular Error:"
-msgstr ""
+msgstr "Maks. Angular Error:"
#: tools/editor/animation_editor.cpp
msgid "Max Optimizable Angle:"
-msgstr ""
+msgstr "Maksimal Angle yang dapat Dioptimalkan:"
#: tools/editor/animation_editor.cpp
msgid "Optimize"
-msgstr ""
+msgstr "Optimasi"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr ""
+msgstr "Pilih sebuah AnimationPlayer dari Scene Tree untuk menyunting animasi."
#: tools/editor/animation_editor.cpp
msgid "Key"
-msgstr ""
+msgstr "Tombol"
#: tools/editor/animation_editor.cpp
msgid "Transition"
-msgstr ""
+msgstr "Transisi"
#: tools/editor/animation_editor.cpp
msgid "Scale Ratio:"
-msgstr ""
+msgstr "Skala Rasio:"
#: tools/editor/animation_editor.cpp
msgid "Call Functions in Which Node?"
-msgstr ""
+msgstr "Memanggil Fungsi-Fungsi dalam Node yang Mana?"
#: tools/editor/animation_editor.cpp
msgid "Remove invalid keys"
-msgstr ""
+msgstr "Hapus Tombol-tombol yang tidak sah"
#: tools/editor/animation_editor.cpp
msgid "Remove unresolved and empty tracks"
-msgstr ""
+msgstr "Hapus tracks yang kosong dan belum diselesaikan"
#: tools/editor/animation_editor.cpp
msgid "Clean-up all animations"
-msgstr ""
+msgstr "Bersihkan semua animasi"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr ""
+msgstr "Bersihkan Animasi (Tidak Dapat Dikembalikan!)"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up"
-msgstr ""
+msgstr "Bersihkan"
#: tools/editor/array_property_edit.cpp
msgid "Resize Array"
-msgstr ""
+msgstr "Ubah ukuran Array"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr ""
+msgstr "Ubah Tipe Nilai Array"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value"
-msgstr ""
+msgstr "Ubah Nilai Array"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
-msgstr ""
+msgstr "Cari:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Sort:"
-msgstr ""
+msgstr "Sortir:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Reverse"
-msgstr ""
+msgstr "Terbalik"
#: tools/editor/asset_library_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Category:"
-msgstr ""
+msgstr "Kategori:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "All"
-msgstr ""
+msgstr "Semua"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Site:"
-msgstr ""
+msgstr "Situs:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Support.."
-msgstr ""
+msgstr "Dukungan.."
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Official"
-msgstr ""
+msgstr "Resmi"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Community"
-msgstr ""
+msgstr "Komunitas"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Testing"
-msgstr ""
+msgstr "Menguji"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
-msgstr ""
+msgstr "Aset-aset File ZIP"
#: tools/editor/call_dialog.cpp
msgid "Method List For '%s':"
-msgstr ""
+msgstr "Daftar Fungsi Untuk '%s':"
#: tools/editor/call_dialog.cpp
msgid "Call"
-msgstr ""
+msgstr "Panggil"
#: tools/editor/call_dialog.cpp
msgid "Method List:"
-msgstr ""
+msgstr "Daftar Fungsi:"
#: tools/editor/call_dialog.cpp
msgid "Arguments:"
-msgstr ""
+msgstr "Argumen:"
#: tools/editor/call_dialog.cpp
+#, fuzzy
msgid "Return:"
-msgstr ""
+msgstr "Kembali:"
#: tools/editor/code_editor.cpp
msgid "Go to Line"
-msgstr ""
+msgstr "Pergi ke Barisan"
#: tools/editor/code_editor.cpp
msgid "Line Number:"
-msgstr ""
+msgstr "Nomor Barisan:"
#: tools/editor/code_editor.cpp
msgid "No Matches"
-msgstr ""
+msgstr "Tidak ada yang cocok"
#: tools/editor/code_editor.cpp
+#, fuzzy
msgid "Replaced %d Ocurrence(s)."
-msgstr ""
+msgstr "Diganti Kejadian (Kejadian-kejadian) %d."
#: tools/editor/code_editor.cpp
msgid "Replace"
-msgstr ""
+msgstr "Tukar"
#: tools/editor/code_editor.cpp
msgid "Replace All"
-msgstr ""
+msgstr "Tukar Semua"
#: tools/editor/code_editor.cpp
msgid "Match Case"
-msgstr ""
+msgstr "Kasus Kecocokan"
#: tools/editor/code_editor.cpp
msgid "Whole Words"
-msgstr ""
+msgstr "Semua Kata"
#: tools/editor/code_editor.cpp
msgid "Selection Only"
-msgstr ""
+msgstr "Hanya yang Dipilih"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
#: tools/editor/plugins/script_editor_plugin.cpp
@@ -1120,73 +1273,76 @@ msgstr ""
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Search"
-msgstr ""
+msgstr "Cari"
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
msgid "Find"
-msgstr ""
+msgstr "Cari"
#: tools/editor/code_editor.cpp
msgid "Next"
-msgstr ""
+msgstr "Berikutnya"
#: tools/editor/code_editor.cpp
+#, fuzzy
msgid "Replaced %d ocurrence(s)."
-msgstr ""
+msgstr "Diganti kejadian (kejadian-kejadian) %d."
#: tools/editor/code_editor.cpp
msgid "Not found!"
-msgstr ""
+msgstr "Tidak ditemukan!"
#: tools/editor/code_editor.cpp
msgid "Replace By"
-msgstr ""
+msgstr "Ganti dengan"
#: tools/editor/code_editor.cpp
+#, fuzzy
msgid "Case Sensitive"
-msgstr ""
+msgstr "Case Sensitive"
#: tools/editor/code_editor.cpp
msgid "Backwards"
-msgstr ""
+msgstr "Ke belakang"
#: tools/editor/code_editor.cpp
+#, fuzzy
msgid "Prompt On Replace"
-msgstr ""
+msgstr "Cepat Pada Penggantian"
#: tools/editor/code_editor.cpp
msgid "Skip"
-msgstr ""
+msgstr "Lalui"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "Perbesar Pandangan"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "Perkecil Pandangan"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Kebalikan Semula Pandangan"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
-msgstr ""
+msgstr "Baris:"
#: tools/editor/code_editor.cpp
msgid "Col:"
-msgstr ""
+msgstr "Kolom:"
#: tools/editor/connections_dialog.cpp
msgid "Method in target Node must be specified!"
-msgstr ""
+msgstr "Method dalam Node target harus spesifik!"
#: tools/editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr ""
+msgstr "Sambungkan Ke Node:"
#: tools/editor/connections_dialog.cpp
#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
@@ -1194,573 +1350,598 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_settings.cpp
msgid "Add"
-msgstr ""
+msgstr "Tambah"
#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Remove"
-msgstr ""
+msgstr "Hapus"
#: tools/editor/connections_dialog.cpp
msgid "Add Extra Call Argument:"
-msgstr ""
+msgstr "Tambah Argumen Panggilan Ekstra:"
#: tools/editor/connections_dialog.cpp
msgid "Extra Call Arguments:"
-msgstr ""
+msgstr "Argumen-argumen Panggilan Ekstra:"
#: tools/editor/connections_dialog.cpp
msgid "Path to Node:"
-msgstr ""
+msgstr "Path ke Node:"
#: tools/editor/connections_dialog.cpp
msgid "Make Function"
-msgstr ""
+msgstr "Buat Fungsi"
#: tools/editor/connections_dialog.cpp
msgid "Deferred"
-msgstr ""
+msgstr "Ditunda"
#: tools/editor/connections_dialog.cpp
msgid "Oneshot"
-msgstr ""
+msgstr "Satu Waktu"
#: tools/editor/connections_dialog.cpp
msgid "Connect"
-msgstr ""
+msgstr "Menghubungkan"
#: tools/editor/connections_dialog.cpp
msgid "Connect '%s' to '%s'"
-msgstr ""
+msgstr "Sambungkan '%s' ke '%s'"
#: tools/editor/connections_dialog.cpp
msgid "Connecting Signal:"
-msgstr ""
+msgstr "Menyambungkan Sinyal:"
#: tools/editor/connections_dialog.cpp
msgid "Create Subscription"
-msgstr ""
+msgstr "Buat Subskribsi"
#: tools/editor/connections_dialog.cpp
msgid "Connect.."
-msgstr ""
+msgstr "Menyambungkan.."
#: tools/editor/connections_dialog.cpp
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Disconnect"
-msgstr ""
+msgstr "Tidak tersambung"
#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "Sinyal-sinyal"
#: tools/editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "Buat Baru"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+#, fuzzy
msgid "Matches:"
-msgstr ""
+msgstr "Kecocokan:"
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Deskripsi:"
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
-msgstr ""
+msgstr "Cari Ganti Untuk:"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies For:"
-msgstr ""
+msgstr "Ketergantungan Untuk:"
#: tools/editor/dependency_editor.cpp
msgid ""
"Scene '%s' is currently being edited.\n"
"Changes will not take effect unless reloaded."
msgstr ""
+"Scene '%s' sedang disunting saat ini.\n"
+"Perubahan-perubahan tidak akan berefek kecuali dimuat ulang."
#: tools/editor/dependency_editor.cpp
msgid ""
"Resource '%s' is in use.\n"
"Changes will take effect when reloaded."
msgstr ""
+"Resource '%s' sedang digunakan.\n"
+"Perubahan-perubahan akan terjadi ketika dimuat ulang."
#: tools/editor/dependency_editor.cpp
msgid "Dependencies"
-msgstr ""
+msgstr "Ketergantungan"
#: tools/editor/dependency_editor.cpp
msgid "Resource"
-msgstr ""
+msgstr "Resource"
#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp
#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
msgid "Path"
-msgstr ""
+msgstr "Path"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies:"
-msgstr ""
+msgstr "Ketergantungan:"
#: tools/editor/dependency_editor.cpp
msgid "Fix Broken"
-msgstr ""
+msgstr "Perbaiki yang Rusak"
#: tools/editor/dependency_editor.cpp
+#, fuzzy
msgid "Dependency Editor"
-msgstr ""
+msgstr "Editor Ketergantungan"
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement Resource:"
-msgstr ""
+msgstr "Cari Resource Pengganti:"
#: tools/editor/dependency_editor.cpp
msgid "Owners Of:"
-msgstr ""
+msgstr "Pemilik Dari:"
#: tools/editor/dependency_editor.cpp
+#, fuzzy
msgid ""
"The files being removed are required by other resources in order for them to "
"work.\n"
"Remove them anyway? (no undo)"
msgstr ""
+"File-file yang telah dihapus diperlukan oleh resource-resource lainnya agar "
+"mereka bekerja.\n"
+"Hapus saja mereka? (tanpa membatalkan/undo)"
#: tools/editor/dependency_editor.cpp
+#, fuzzy
msgid "Remove selected files from the project? (no undo)"
-msgstr ""
+msgstr "Hapus file-file yang dipilih dari proyek? (tanpa membatalkan/undo)"
#: tools/editor/dependency_editor.cpp
msgid "Error loading:"
-msgstr ""
+msgstr "Error memuat:"
#: tools/editor/dependency_editor.cpp
+#, fuzzy
msgid "Scene failed to load due to missing dependencies:"
-msgstr ""
+msgstr "Scene gagal memuat disebabkan oleh ketergantungan yang hilang:"
#: tools/editor/dependency_editor.cpp
msgid "Open Anyway"
-msgstr ""
+msgstr "Buka Saja"
#: tools/editor/dependency_editor.cpp
msgid "Which action should be taken?"
-msgstr ""
+msgstr "Tindakan mana yang seharusnya diambil?"
#: tools/editor/dependency_editor.cpp
+#, fuzzy
msgid "Fix Dependencies"
-msgstr ""
+msgstr "Perbaiki Ketergantungan"
#: tools/editor/dependency_editor.cpp
msgid "Errors loading!"
-msgstr ""
+msgstr "Gagal memuat!"
#: tools/editor/dependency_editor.cpp
msgid "Permanently delete %d item(s)? (No undo!)"
-msgstr ""
+msgstr "Hapus secara permanen %d item? (Tidak dapat dikembalikan!)"
#: tools/editor/dependency_editor.cpp
msgid "Owns"
-msgstr ""
+msgstr "Memiliki"
#: tools/editor/dependency_editor.cpp
msgid "Resources Without Explicit Ownership:"
-msgstr ""
+msgstr "Resource-resource tanpa kepemilikan yang jelas:"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#, fuzzy
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "Penjelajah Resource Orphan"
#: tools/editor/dependency_editor.cpp
msgid "Delete selected files?"
-msgstr ""
+msgstr "Hapus file yang dipilih?"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
#: tools/editor/plugins/item_list_editor_plugin.cpp
#: tools/editor/scene_tree_dock.cpp
msgid "Delete"
-msgstr ""
+msgstr "Hapus"
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name."
-msgstr ""
+msgstr "Nama tidak sah."
#: tools/editor/editor_autoload_settings.cpp
msgid "Valid characters:"
-msgstr ""
+msgstr "Karakter sah:"
#: tools/editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Invalid name. Must not collide with an existing engine class name."
-msgstr ""
+msgstr "Nama tidak sah. Harus tidak serupa dengan class name engine yang ada."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing buit-in type name."
-msgstr ""
+msgstr "Nama tidak sah. Tidak boleh serupa dengan nama bawaan."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
+"Nama tidak sah. Tidak boleh serupa dengan nama konstanta global yang ada."
#: tools/editor/editor_autoload_settings.cpp
msgid "Invalid Path."
-msgstr ""
+msgstr "Path Tidak Sah."
#: tools/editor/editor_autoload_settings.cpp
msgid "File does not exist."
-msgstr ""
+msgstr "File tidak ada."
#: tools/editor/editor_autoload_settings.cpp
msgid "Not in resource path."
-msgstr ""
+msgstr "Tidak didalam path resource."
#: tools/editor/editor_autoload_settings.cpp
msgid "Add AutoLoad"
-msgstr ""
+msgstr "Tambahkan AutoLoad"
#: tools/editor/editor_autoload_settings.cpp
msgid "Autoload '%s' already exists!"
-msgstr ""
+msgstr "Autoload '%s' telah ada!"
#: tools/editor/editor_autoload_settings.cpp
msgid "Rename Autoload"
-msgstr ""
+msgstr "Namai kembali Autoload"
#: tools/editor/editor_autoload_settings.cpp
msgid "Toggle AutoLoad Globals"
-msgstr ""
+msgstr "Beralih AutoLoad Globals"
#: tools/editor/editor_autoload_settings.cpp
msgid "Move Autoload"
-msgstr ""
+msgstr "Pindahkan Autoload"
#: tools/editor/editor_autoload_settings.cpp
msgid "Remove Autoload"
-msgstr ""
+msgstr "Hapus Autoload"
#: tools/editor/editor_autoload_settings.cpp
+#, fuzzy
msgid "Enable"
-msgstr ""
+msgstr "Aktifkan"
#: tools/editor/editor_autoload_settings.cpp
msgid "Rearrange Autoloads"
-msgstr ""
+msgstr "Mengatur kembali Autoload-autoload"
#: tools/editor/editor_autoload_settings.cpp
msgid "Node Name:"
-msgstr ""
+msgstr "Nama Node:"
#: tools/editor/editor_autoload_settings.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
#: tools/editor/plugins/sample_library_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Name"
-msgstr ""
+msgstr "Nama"
#: tools/editor/editor_autoload_settings.cpp
msgid "Singleton"
-msgstr ""
+msgstr "Singleton"
#: tools/editor/editor_autoload_settings.cpp
msgid "List:"
-msgstr ""
+msgstr "Daftar:"
#: tools/editor/editor_data.cpp
msgid "Updating Scene"
-msgstr ""
+msgstr "Memperbaharui Scene"
#: tools/editor/editor_data.cpp
msgid "Storing local changes.."
-msgstr ""
+msgstr "Menyimpan perubahan-perubahan lokal.."
#: tools/editor/editor_data.cpp
msgid "Updating scene.."
-msgstr ""
+msgstr "Memperbaharui scene.."
#: tools/editor/editor_dir_dialog.cpp
msgid "Choose a Directory"
-msgstr ""
+msgstr "Pilih sebuah Direktori"
#: tools/editor/editor_dir_dialog.cpp
msgid "Choose"
-msgstr ""
+msgstr "Pilih"
#: tools/editor/editor_file_dialog.cpp
+#, fuzzy
msgid "Go Back"
-msgstr ""
+msgstr "Mundur"
#: tools/editor/editor_file_dialog.cpp
+#, fuzzy
msgid "Go Forward"
-msgstr ""
+msgstr "Maju"
#: tools/editor/editor_file_dialog.cpp
+#, fuzzy
msgid "Go Up"
-msgstr ""
+msgstr "Naik"
#: tools/editor/editor_file_dialog.cpp
msgid "Refresh"
-msgstr ""
+msgstr "Segarkan"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr ""
+msgstr "Beralih File Tersembunyi"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
-msgstr ""
+msgstr "Beralih Favorit"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Mode"
-msgstr ""
+msgstr "Beralih Mode"
#: tools/editor/editor_file_dialog.cpp
msgid "Focus Path"
-msgstr ""
+msgstr "Garis Fokus"
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr ""
+msgstr "Pindahkan Favorit Keatas"
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr ""
+msgstr "Pindahkan Favorit Kebawah"
#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
msgid "Favorites:"
-msgstr ""
+msgstr "Favorit:"
#: tools/editor/editor_file_dialog.cpp
msgid "Recent:"
-msgstr ""
+msgstr "Saat ini:"
#: tools/editor/editor_file_dialog.cpp
msgid "Preview:"
-msgstr ""
+msgstr "Pratinjau:"
#: tools/editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr ""
+msgstr "Sumber Pemindaian"
#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
-msgstr ""
+msgstr "Mencari Bantuan"
#: tools/editor/editor_help.cpp
msgid "Class List:"
-msgstr ""
+msgstr "Daftar Class:"
#: tools/editor/editor_help.cpp
msgid "Search Classes"
-msgstr ""
+msgstr "Cari Kelas"
#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
msgid "Class:"
-msgstr ""
+msgstr "Kelas:"
#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
#: tools/editor/script_create_dialog.cpp
msgid "Inherits:"
-msgstr ""
+msgstr "Turunan:"
#: tools/editor/editor_help.cpp
msgid "Inherited by:"
-msgstr ""
+msgstr "Diturunkan oleh:"
#: tools/editor/editor_help.cpp
msgid "Brief Description:"
-msgstr ""
+msgstr "Deskripsi Singkat:"
#: tools/editor/editor_help.cpp
msgid "Public Methods:"
-msgstr ""
+msgstr "Metode Publik:"
#: tools/editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr ""
+msgstr "Item-item Tema GUI:"
#: tools/editor/editor_help.cpp
msgid "Constants:"
-msgstr ""
-
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
+msgstr "Konstanta:"
#: tools/editor/editor_help.cpp
msgid "Method Description:"
-msgstr ""
+msgstr "Deskripsi Metode:"
#: tools/editor/editor_help.cpp
msgid "Search Text"
-msgstr ""
+msgstr "Mencari Teks"
#: tools/editor/editor_import_export.cpp
msgid "Added:"
-msgstr ""
+msgstr "Ditambahkan:"
#: tools/editor/editor_import_export.cpp
msgid "Removed:"
-msgstr ""
+msgstr "Dihapus:"
#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
msgid "Error saving atlas:"
-msgstr ""
+msgstr "Gagal menyimpan atlas:"
#: tools/editor/editor_import_export.cpp
msgid "Could not save atlas subtexture:"
-msgstr ""
+msgstr "Tidak dapat menyimpan sub tekstur atlas:"
#: tools/editor/editor_import_export.cpp
msgid "Storing File:"
-msgstr ""
+msgstr "Menyimpan File:"
#: tools/editor/editor_import_export.cpp
msgid "Packing"
-msgstr ""
+msgstr "Mengemas"
#: tools/editor/editor_import_export.cpp
msgid "Exporting for %s"
-msgstr ""
+msgstr "Mengekspor untuk %s"
#: tools/editor/editor_import_export.cpp
msgid "Setting Up.."
-msgstr ""
+msgstr "Mengatur.."
#: tools/editor/editor_log.cpp
msgid " Output:"
-msgstr ""
+msgstr " Keluaran:"
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Importing"
-msgstr ""
+msgstr "Mengimpor ulang"
#: tools/editor/editor_node.cpp
msgid "Importing:"
-msgstr ""
+msgstr "Mengimpor:"
#: tools/editor/editor_node.cpp
msgid "Node From Scene"
-msgstr ""
+msgstr "Node Dari Scene"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/resources_dock.cpp
msgid "Error saving resource!"
-msgstr ""
+msgstr "Error menyimpan resource!"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/resources_dock.cpp
msgid "Save Resource As.."
-msgstr ""
+msgstr "Simpan Resource Sebagai.."
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+#, fuzzy
msgid "I see.."
-msgstr ""
+msgstr "Aku tahu.."
#: tools/editor/editor_node.cpp
msgid "Can't open file for writing:"
-msgstr ""
+msgstr "Tidak dapat membuka file untuk menulis:"
#: tools/editor/editor_node.cpp
msgid "Requested file format unknown:"
-msgstr ""
+msgstr "Format file yang diminta tidak diketahui:"
#: tools/editor/editor_node.cpp
msgid "Error while saving."
-msgstr ""
+msgstr "Error saat menyimpan."
#: tools/editor/editor_node.cpp
msgid "Saving Scene"
-msgstr ""
+msgstr "Menyimpan Scene"
#: tools/editor/editor_node.cpp
msgid "Analyzing"
-msgstr ""
+msgstr "Menganalisis"
#: tools/editor/editor_node.cpp
msgid "Creating Thumbnail"
-msgstr ""
+msgstr "Membuat Thumbnail"
#: tools/editor/editor_node.cpp
msgid ""
"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
msgstr ""
+"Tidak dapat menyimpan scene. Dependensi (instance) mungkin tidak terpenuhi."
#: tools/editor/editor_node.cpp
msgid "Failed to load resource."
-msgstr ""
+msgstr "Gagal memuat resource."
#: tools/editor/editor_node.cpp
msgid "Can't load MeshLibrary for merging!"
-msgstr ""
+msgstr "Tidak dapat memuat MeshLibrary untuk menggabungkan!"
#: tools/editor/editor_node.cpp
+#, fuzzy
msgid "Error saving MeshLibrary!"
-msgstr ""
+msgstr "Error menyimpan MeshLibrary!"
#: tools/editor/editor_node.cpp
msgid "Can't load TileSet for merging!"
-msgstr ""
+msgstr "Tidak dapat memuat TileSet untuk menggabungkan!"
#: tools/editor/editor_node.cpp
msgid "Error saving TileSet!"
-msgstr ""
+msgstr "Error menyimpan TileSet!"
#: tools/editor/editor_node.cpp
msgid "Can't open export templates zip."
-msgstr ""
+msgstr "Tidak dapat membuka ekspor template-template zip."
#: tools/editor/editor_node.cpp
msgid "Loading Export Templates"
-msgstr ""
+msgstr "Memuat Ekspor Template-template."
#: tools/editor/editor_node.cpp
msgid "Error trying to save layout!"
-msgstr ""
+msgstr "Error mencoba untuk menyimpan layout!"
#: tools/editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr ""
+msgstr "Layout editor default ditimpa."
#: tools/editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr ""
+msgstr "Nama layout tidak ditemukan!"
#: tools/editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr ""
+msgstr "Mengembalikan semula layout default ke pengaturan-pengaturan awal."
#: tools/editor/editor_node.cpp
msgid "Copy Params"
-msgstr ""
+msgstr "Salin Parameter"
#: tools/editor/editor_node.cpp
msgid "Paste Params"
-msgstr ""
+msgstr "Tempel Parameter"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Paste Resource"
-msgstr ""
+msgstr "Tempel Resource"
#: tools/editor/editor_node.cpp
msgid "Copy Resource"
-msgstr ""
+msgstr "Salin Resource"
#: tools/editor/editor_node.cpp
msgid "Make Built-In"
-msgstr ""
+msgstr "Buat Menjadi Bawaan"
#: tools/editor/editor_node.cpp
msgid "Make Sub-Resources Unique"
-msgstr ""
+msgstr "Membuat sub-Resource Unik"
#: tools/editor/editor_node.cpp
msgid "Open in Help"
-msgstr ""
+msgstr "Buka di Bantuan"
#: tools/editor/editor_node.cpp
msgid "There is no defined scene to run."
-msgstr ""
+msgstr "Tidak ada definisi scene untuk dijalankan."
#: tools/editor/editor_node.cpp
msgid ""
@@ -1768,6 +1949,9 @@ msgid ""
"You can change it later in later in \"Project Settings\" under the "
"'application' category."
msgstr ""
+"Tidak ada scene utama yang pernah didefinisikan, pilih satu?\n"
+"Anda dapat mengubahnya nanti di akhir dalam \"Project Settings\" dibawah "
+"kategori 'application'."
#: tools/editor/editor_node.cpp
msgid ""
@@ -1775,6 +1959,9 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"Scene '%s' tidak tersedia, pilih yang sah?\n"
+"Anda dapat menggantinya kemudian di \"Pengaturan Proyek\" di bawah kategori "
+"'aplikasi'."
#: tools/editor/editor_node.cpp
msgid ""
@@ -1782,187 +1969,197 @@ msgid ""
"You can change it later in \"Project Settings\" under the 'application' "
"category."
msgstr ""
+"Scene '%s' bukanlah sebuah file scene, pilih yang sah?\n"
+"Anda dapat menggantinya kemudian di \"Pengaturan Proyek\" di bawah kategori "
+"'aplikasi'."
#: tools/editor/editor_node.cpp
msgid "Current scene was never saved, please save it prior to running."
msgstr ""
+"Scene saat ini belum pernah disimpan, mohon simpat dahulu untuk "
+"menjalankannya."
#: tools/editor/editor_node.cpp
msgid "Could not start subprocess!"
-msgstr ""
+msgstr "Tidak dapat memulai subprocess!"
#: tools/editor/editor_node.cpp
msgid "Open Scene"
-msgstr ""
+msgstr "Buka Scene"
#: tools/editor/editor_node.cpp
msgid "Open Base Scene"
-msgstr ""
+msgstr "Buka Scene Dasar"
#: tools/editor/editor_node.cpp
msgid "Quick Open Scene.."
-msgstr ""
+msgstr "Buka Cepat Scene.."
#: tools/editor/editor_node.cpp
msgid "Quick Open Script.."
-msgstr ""
+msgstr "Buka Cepat Script.."
#: tools/editor/editor_node.cpp
msgid "Yes"
-msgstr ""
+msgstr "Ya"
#: tools/editor/editor_node.cpp
msgid "Close scene? (Unsaved changes will be lost)"
-msgstr ""
+msgstr "Tutup scene? (Perubahan-perubahan yang belum disimpan akan hilang)"
#: tools/editor/editor_node.cpp
msgid "Save Scene As.."
-msgstr ""
+msgstr "Simpan Scene Sebagai.."
#: tools/editor/editor_node.cpp
msgid "This scene has never been saved. Save before running?"
-msgstr ""
+msgstr "Scene ini belum pernah disimpan. Simpan sebelum menjalankan?"
#: tools/editor/editor_node.cpp
msgid "Please save the scene first."
-msgstr ""
+msgstr "Mohon simpan scene terlebih dahulu."
#: tools/editor/editor_node.cpp
msgid "Save Translatable Strings"
-msgstr ""
+msgstr "Simpan Kalimat yang Dapat Diterjemahkan"
#: tools/editor/editor_node.cpp
msgid "Export Mesh Library"
-msgstr ""
+msgstr "Ekspor Mesh Library"
#: tools/editor/editor_node.cpp
msgid "Export Tile Set"
-msgstr ""
+msgstr "Ekspor Tile Set"
#: tools/editor/editor_node.cpp
msgid "Quit"
-msgstr ""
+msgstr "Keluar"
#: tools/editor/editor_node.cpp
msgid "Exit the editor?"
-msgstr ""
+msgstr "Keluar editor?"
#: tools/editor/editor_node.cpp
msgid "Current scene not saved. Open anyway?"
-msgstr ""
+msgstr "Scene saat ini tidak disimpan. Buka saja?"
#: tools/editor/editor_node.cpp
msgid "Can't reload a scene that was never saved."
-msgstr ""
+msgstr "Tidak bisa memuat ulang scene yang tidak pernah disimpan."
#: tools/editor/editor_node.cpp
msgid "Revert"
-msgstr ""
+msgstr "Pulihkan"
#: tools/editor/editor_node.cpp
msgid "This action cannot be undone. Revert anyway?"
-msgstr ""
+msgstr "Tindakan ini tidak dapat dibatalkan. Pulihkan saja?"
#: tools/editor/editor_node.cpp
msgid "Quick Run Scene.."
-msgstr ""
+msgstr "Jalankan Cepat Scene.."
#: tools/editor/editor_node.cpp
msgid ""
"Open Project Manager? \n"
"(Unsaved changes will be lost)"
msgstr ""
+"Buka Manajer Proyek?\n"
+"(Perubahan yang tidak disimpan akan hilang)"
#: tools/editor/editor_node.cpp
msgid "Pick a Main Scene"
-msgstr ""
+msgstr "Pilih sebuah Scene Utama"
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+#, fuzzy
msgid "Ugh"
-msgstr ""
+msgstr "Wadoo"
#: tools/editor/editor_node.cpp
msgid ""
"Error loading scene, it must be inside the project path. Use 'Import' to "
"open the scene, then save it inside the project path."
msgstr ""
+"Gagal memuat scene, harus dalam alamat proyek. Gunakan 'Impor\" untuk "
+"membuka scene tersebut, kemudian simpan di dalam alamat proyek."
#: tools/editor/editor_node.cpp
msgid "Error loading scene."
-msgstr ""
+msgstr "Gagal memuat scene."
#: tools/editor/editor_node.cpp
msgid "Scene '%s' has broken dependencies:"
-msgstr ""
+msgstr "Scene '%s' memiliki dependensi yang rusak:"
#: tools/editor/editor_node.cpp
msgid "Save Layout"
-msgstr ""
+msgstr "Simpan Penampilan"
#: tools/editor/editor_node.cpp
msgid "Delete Layout"
-msgstr ""
+msgstr "Hapus Penampilan"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Default"
-msgstr ""
+msgstr "Bawaan"
#: tools/editor/editor_node.cpp
msgid "Switch Scene Tab"
-msgstr ""
+msgstr "Pilih Tab Scene"
#: tools/editor/editor_node.cpp
msgid "%d more file(s)"
-msgstr ""
+msgstr "%d file lagi"
#: tools/editor/editor_node.cpp
msgid "%d more file(s) or folder(s)"
-msgstr ""
+msgstr "%d file atau folder lagi"
#: tools/editor/editor_node.cpp
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Scene"
-msgstr ""
+msgstr "Suasana"
#: tools/editor/editor_node.cpp
msgid "Go to previously opened scene."
-msgstr ""
+msgstr "Pergi ke scene yang dibuka sebelumnya."
#: tools/editor/editor_node.cpp
msgid "Fullscreen Mode"
-msgstr ""
+msgstr "Mode Layar Penuh"
#: tools/editor/editor_node.cpp
msgid "Distraction Free Mode"
-msgstr ""
+msgstr "Mode Tanpa Gangguan"
#: tools/editor/editor_node.cpp
msgid "Next tab"
-msgstr ""
+msgstr "Tab selanjutnya"
#: tools/editor/editor_node.cpp
msgid "Previous tab"
-msgstr ""
+msgstr "Tab sebelumnya"
#: tools/editor/editor_node.cpp
msgid "Operations with scene files."
-msgstr ""
+msgstr "Operasi dengan file scene."
#: tools/editor/editor_node.cpp
msgid "New Scene"
-msgstr ""
+msgstr "Scene Baru"
#: tools/editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr ""
+msgstr "Scene Turunan Baru.."
#: tools/editor/editor_node.cpp
msgid "Open Scene.."
-msgstr ""
+msgstr "Buka Scene.."
#: tools/editor/editor_node.cpp
msgid "Save Scene"
-msgstr ""
+msgstr "Simpan Scene"
#: tools/editor/editor_node.cpp
msgid "Save all Scenes"
@@ -5943,6 +6140,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Tambahkan Properti Setter"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Metode Publik:"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6462,3 +6669,10 @@ msgstr ""
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Notifier Extents"
msgstr ""
+
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "Node modifikasi tidak memiliki _get_output_port_unsequenced(idx,wmem), "
+#~ "tetapi port-port unsequenced dispesifikasikan."
diff --git a/tools/translations/it.po b/tools/translations/it.po
index c1d2686b2e..6f268298a7 100644
--- a/tools/translations/it.po
+++ b/tools/translations/it.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-07-15 12:38+0000\n"
+"PO-Revision-Date: 2016-08-29 11:05+0000\n"
"Last-Translator: Dario Bonfanti <bonfi.96@hotmail.it>\n"
"Language-Team: Italian <https://hosted.weblate.org/projects/godot-engine/"
"godot/it/>\n"
@@ -69,40 +69,44 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Un nodo ha ceduto senza memoria di lavoro, si prega di leggere la "
+"documentazione riguardo a come cedere in maniera corretta!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"Il nodo ha ceduto, ma non ha ritornato uno stato di funzione nella prima "
+"memoria di lavoro."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"Il valore di return deve essere assegnato al primo elemento della memoria di "
+"lavoro del nodo! Si prega di aggiustare il nodo."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Il nodo ha ritornato una sequenza di output invalida: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
-msgstr ""
+msgstr "Trovato bit di sequenza ma non il nodo nello stack, segnalare il bug!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Overflow dello stack con profondità dello stack: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Funzione:"
+msgstr "Funzioni:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Valiabile"
+msgstr "Valiabili:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -110,86 +114,102 @@ msgstr "Segnali:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Il nome non è un identificatore valido:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Nome già in uso da un altro funz/var/segnale:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Rendi Funzione"
+msgstr "Rinomina Funzione"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Rinomina Sample"
+msgstr "Rinomina Variabile"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Rinomina Sample"
+msgstr "Rinomina Segnale"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Funzione:"
+msgstr "Aggiungi Funzione"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Valiabile"
+msgstr "Aggiungi Variabile"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Segnali"
+msgstr "Aggiungi Segnale"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Rimuovi Selezione"
+msgstr "Rimuovi Funzione"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Valiabile"
+msgstr "Rimuovi Variabile"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Valiabile"
+msgstr "Modifica Variabile:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Rimuovi Selezione"
+msgstr "Rimuovi Segnale"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Connessione Segnali:"
+msgstr "Modifica Segnale:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "Aggiungi Nodo Figlio"
+msgstr "Aggiungi Nodo"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
-msgid "Add Node(s) From Tree"
-msgstr "Nodo Da Scena"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Aggiungi Nodo Figlio"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Aggiungi Nodo(i) Da Albero"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Aggiungi Proprietà Getter"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Aggiungi Proprietà Setter"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -199,22 +219,20 @@ msgid "Edit"
msgstr "Modifica"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "Tipo Dato:"
+msgstr "Tipo Base:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
msgstr "Membri:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Available Nodes:"
-msgstr "Nodo TimeScale"
+msgstr "Nodi Disponibili:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Seleziona o crea una funzione per modificare il grafico"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -230,24 +248,20 @@ msgid "Close"
msgstr "Chiudi"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "Argomenti Chiamata Extra:"
+msgstr "Modifica Argomenti Segnali:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Valiabile"
+msgstr "Modifica Variabile:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Cambia Tipo"
+msgstr "Cambia"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Eliminare i file selezionati?"
+msgstr "Elimina selezionati"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -256,72 +270,81 @@ msgstr "Abilita Breakpoint"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Trova Successivo"
+msgid "Find Node Type"
+msgstr "Trova Tipo Nodo"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Copia Posa"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Crea Nodo"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Incolla Posa"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "Il tipo di input non è iterabile: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "L'iteratore è diventato invalido"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "L'iteratore è diventato invalido: "
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Invalid index property name."
-msgstr "Nome classe genitore invalido"
+msgstr "Nome proprietà indice invalido."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "L'oggetto base non è un Nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "Percorso non locale"
+msgstr "Il percorso non conduce ad un Nodo!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Nome proprietà indice invalido '%s' nel nodo %s."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid argument of type: "
-msgstr "Nome classe genitore invalido"
+msgstr ": Argomento invalido di tipo: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Nome classe genitore invalido"
+msgstr ": Argomenti invalidi: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet non trovato nello script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet non trovato nello script: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
+"Il nodo personalizato non ha un metodo _step(), impossibile processare il "
+"grafico."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"Valore di return invalido da _step(), deve esere intero (seq out), oppure "
+"stringa (errore)."
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -573,7 +596,8 @@ msgstr "Tutti i File (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Apri"
@@ -1065,6 +1089,7 @@ msgstr "Ottimizza"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
msgstr ""
+"Seleziona un AnimationPlayer dallo Scene Tree per modificare le animazioni."
#: tools/editor/animation_editor.cpp
msgid "Key"
@@ -1116,7 +1141,8 @@ msgstr "Cambia Valore Array"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Cerca:"
@@ -1274,7 +1300,7 @@ msgstr "Zoom Out"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Resetta Zoom"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1365,10 +1391,16 @@ msgid "Create New"
msgstr "Crea Nuovo"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Corrispondenze:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descrizione:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Cerca Rimpiazzo Per:"
@@ -1697,10 +1729,6 @@ msgstr "Elementi Tema GUI:"
msgid "Constants:"
msgstr "Costanti:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descrizione:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Descrizione Metodo:"
@@ -3680,9 +3708,8 @@ msgid "Paste Pose"
msgstr "Incolla Posa"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "Modalità di Selezione(Q)"
+msgstr "Modalità di Selezione"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3703,14 +3730,12 @@ msgid "Alt+RMB: Depth list selection"
msgstr "Alt+RMB: Selezione Lista Profondità"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "Modalità Movimento (W)"
+msgstr "Modalità Movimento"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate Mode"
-msgstr "Modalità Rotazione (E)"
+msgstr "Modalità Rotazione"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -4525,9 +4550,8 @@ msgid "Save Theme As"
msgstr "Salva Tema Come"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "Clona Sotto"
+msgstr "Chiudi Documentazione"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -5799,12 +5823,10 @@ msgid "Unnamed Project"
msgstr "Progetto Senza Nome"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to open more than one project?"
msgstr "Sei sicuro di voler aprire più di un progetto?"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to run more than one project?"
msgstr "Sei sicuro di voler eseguire più di un progetto?"
@@ -5818,7 +5840,7 @@ msgstr ""
msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
-msgstr ""
+msgstr "Stai per esaminare %s cartelle per progetti Godot esistenti. Confermi?"
#: tools/editor/project_manager.cpp
msgid "Project Manager"
@@ -5837,9 +5859,8 @@ msgid "Scan"
msgstr "Esamina"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Select a Folder to Scan"
-msgstr "Scegli un Nodo"
+msgstr "Scegli una Cartella da Scansionare"
#: tools/editor/project_manager.cpp
msgid "New Project"
@@ -6133,6 +6154,16 @@ msgstr "Globale"
msgid "Sections:"
msgstr "Sezioni:"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Selezione Punti"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Modalità di Selezione"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "Impossibile eseguire lo strumento di PVRTC:"
@@ -6206,9 +6237,8 @@ msgid "No parent to instance a child at."
msgstr "Nessun genitore del quale istanziare un figlio."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "No parent to instance the scenes at."
-msgstr "Nessun genitore del quale istanziare un figlio."
+msgstr "Nessun genitore nel quale istanziare una scena."
#: tools/editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
@@ -6343,9 +6373,8 @@ msgid "Save Branch as Scene"
msgstr "Salva Ramo come Scena"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "Si Prega Di Confermare..."
+msgstr "Elimina (Senza Conferma)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
@@ -6360,9 +6389,8 @@ msgstr ""
"root esiste."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Create a new script for the selected node."
-msgstr "Istanzia le scene selezionate come figlie del nodo selezionato."
+msgstr "Crea un nuovo script per il nodo selezionato."
#: tools/editor/scene_tree_editor.cpp
msgid ""
@@ -6664,6 +6692,13 @@ msgstr "Cambia lunghezza Ray Shape"
msgid "Change Notifier Extents"
msgstr "Cambia Estensione di Notifier"
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "Il nodo personalizzato non ha _get_output_port_unsequenced(idx,wmem), ma "
+#~ "le porte unsequenced sono state specificate."
+
#~ msgid "Cannot go into subdir:"
#~ msgstr "Impossibile accedere alla subdirectory:"
diff --git a/tools/translations/ja.po b/tools/translations/ja.po
index a576596025..1f0c073082 100644
--- a/tools/translations/ja.po
+++ b/tools/translations/ja.po
@@ -171,16 +171,44 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Add Node(s) From Tree"
msgstr "シーンからのノード"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Add Setter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -245,9 +273,22 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "ノードへのパス:"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -293,12 +334,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -553,7 +588,8 @@ msgstr "すべてのファイル(*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "開く"
@@ -1096,7 +1132,8 @@ msgstr "配列の値を変更"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "検索:"
@@ -1346,10 +1383,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1667,10 +1710,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -6045,6 +6084,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "すべて選択"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "すべて選択"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/ko.po b/tools/translations/ko.po
index 8199de00d4..72d9fc1167 100644
--- a/tools/translations/ko.po
+++ b/tools/translations/ko.po
@@ -2,13 +2,13 @@
# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
# This file is distributed under the same license as the Godot source code.
#
-# volzhs <volzhs@gmail.com>, 2016.
+# 박한얼 (volzhs) <volzhs@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-07-29 08:31+0000\n"
+"PO-Revision-Date: 2016-08-17 10:07+0000\n"
"Last-Translator: 박한얼 <volzhs@gmail.com>\n"
"Language-Team: Korean <https://hosted.weblate.org/projects/godot-engine/"
"godot/ko/>\n"
@@ -95,14 +95,12 @@ msgid "Stack overflow with stack depth: "
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
msgstr "함수:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "변수"
+msgstr "변수:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -117,76 +115,92 @@ msgid "Name already in use by another func/var/signal:"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "함수 만들기"
+msgstr "함수명 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "샘플 이름 변경"
+msgstr "변수명 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "샘플 이름 변경"
+msgstr "시그널명 변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "함수:"
+msgstr "함수 추가"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "변수"
+msgstr "변수 추가"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "시그널"
+msgstr "시그널 추가"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "선택 삭제"
+msgstr "함수 제거"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "변수"
+msgstr "변수 제거"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "변수"
+msgstr "변수 편집:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "선택 삭제"
+msgstr "시그널 제거"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "시그널 연결:"
+msgstr "시그널 편집:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "자식 노드 추가"
+msgstr "노드 추가"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
+msgid "Add Preload Node"
+msgstr "자식 노드 추가"
+
+#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
-msgstr "씬으로부터 노드 가져오기"
+msgstr "트리에서 노드 추가"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Add Setter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -199,18 +213,16 @@ msgid "Edit"
msgstr "편집"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "데이타 타입:"
+msgstr "기본 타입:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
msgstr "멤버:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Available Nodes:"
-msgstr "시간 크기 조절 노드"
+msgstr "가능한 노드:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
@@ -230,24 +242,20 @@ msgid "Close"
msgstr "닫기"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "별도의 호출 인자:"
+msgstr "시그널 인자 편집:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "변수"
+msgstr "변수 편집:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "타입 변경"
+msgstr "변경"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "선택된 파일들을 삭제하시겠습니까?"
+msgstr "선택 항목 삭제"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -256,8 +264,23 @@ msgstr "중단점 토글"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "다음 찾기"
+msgid "Find Node Type"
+msgstr "노드 타입 찾기"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "포즈 복사"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "노드 생성"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "포즈 붙여넣기"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -272,32 +295,28 @@ msgid "Iterator became invalid: "
msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Invalid index property name."
-msgstr "유요하지 않은 부모 클래스명"
+msgstr "유요하지 않은 인덱스 속성명."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
msgstr ""
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "경로가 로컬이 아님"
+msgstr "노드를 지칭하는 경로가 아닙니다!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid argument of type: "
-msgstr "유요하지 않은 부모 클래스명"
+msgstr ": 유효하지 않은 인자 타입: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "유요하지 않은 부모 클래스명"
+msgstr ": 유효하지 인자: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -308,12 +327,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -555,7 +568,8 @@ msgstr "모든 파일 (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "열기"
@@ -1097,7 +1111,8 @@ msgstr "배열 값 변경"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "검색:"
@@ -1346,10 +1361,16 @@ msgid "Create New"
msgstr "새로 만들기"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "일치:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "설명:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "대체할 대상 찾기:"
@@ -1673,10 +1694,6 @@ msgstr "GUI 테마 항목:"
msgid "Constants:"
msgstr "상수:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "설명:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "함수 설명:"
@@ -3644,9 +3661,8 @@ msgid "Paste Pose"
msgstr "포즈 붙여넣기"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "선택 모드 (Q)"
+msgstr "선택 모드"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3665,14 +3681,12 @@ msgid "Alt+RMB: Depth list selection"
msgstr "알트+우클릭: 겹친 오브젝트 선택"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "이동 모드 (W)"
+msgstr "이동 모드"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate Mode"
-msgstr "회전 모드 (E)"
+msgstr "회전 모드"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -4485,9 +4499,8 @@ msgid "Save Theme As"
msgstr "테마 다른 이름으로 저장"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "아래로 복제"
+msgstr "문서 닫기"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -5753,12 +5766,10 @@ msgid "Unnamed Project"
msgstr "이름없는 프로젝트"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to open more than one project?"
msgstr "두개 이상의 프로젝트를 열려는 것이 확실합니까?"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to run more than one project?"
msgstr "두개 이상의 프로젝트를 실행하려는 것이 확실합니까?"
@@ -5790,9 +5801,8 @@ msgid "Scan"
msgstr "스캔"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Select a Folder to Scan"
-msgstr "노드 선택"
+msgstr "스캔할 폴더를 선택하세요"
#: tools/editor/project_manager.cpp
msgid "New Project"
@@ -6064,7 +6074,7 @@ msgstr "이미지를 로드할 수 없음"
#: tools/editor/property_editor.cpp
msgid "Bit %d, val %d."
-msgstr "Bit %d, val %d."
+msgstr "비트 %d, 값 %d."
#: tools/editor/property_editor.cpp
msgid "On"
@@ -6086,6 +6096,16 @@ msgstr "Global"
msgid "Sections:"
msgstr "부문:"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "포인트 선택"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "선택 모드"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "PVRTC 도구를 실행할 수 없습니다:"
@@ -6159,9 +6179,8 @@ msgid "No parent to instance a child at."
msgstr "선택된 부모 노드가 없어서 자식노드를 인스턴스할 수 없습니다."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "No parent to instance the scenes at."
-msgstr "선택된 부모 노드가 없어서 자식노드를 인스턴스할 수 없습니다."
+msgstr "씬을 인스턴스할 수 있는 부모가 없습니다."
#: tools/editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
@@ -6293,9 +6312,8 @@ msgid "Save Branch as Scene"
msgstr "선택 노드를 다른 씬으로 저장"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "확인해주세요..."
+msgstr "삭제 (확인 없음)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
@@ -6309,9 +6327,8 @@ msgstr ""
"씬 파일을 노드로 추가합니다. 루트 노드가 없을 경우, 상속씬으로 만들어집니다."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Create a new script for the selected node."
-msgstr "선택된 씬을 선택된 노드의 자식으로 인스턴스 합니다."
+msgstr "선택된 노드에 새로운 스크립트를 생성합니다."
#: tools/editor/scene_tree_editor.cpp
msgid ""
diff --git a/tools/translations/nb.po b/tools/translations/nb.po
new file mode 100644
index 0000000000..41903096cf
--- /dev/null
+++ b/tools/translations/nb.po
@@ -0,0 +1,6516 @@
+# Norwegian Bokmål translation of the Godot Engine editor
+# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
+# This file is distributed under the same license as the Godot source code.
+#
+# Jørgen Aarmo Lund <jorgen.aarmo@gmail.com>, 2016.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Godot Engine editor\n"
+"PO-Revision-Date: 2016-08-29 19:46+0000\n"
+"Last-Translator: Jørgen Aarmo Lund <jorgen.aarmo@gmail.com>\n"
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/godot-"
+"engine/godot/nb/>\n"
+"Language: nb\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8-bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 2.8-dev\n"
+
+#: modules/gdscript/gd_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Invalid type argument to convert(), use TYPE_* constants."
+msgstr "Ugyldig argument til convert(), bruk TYPE_*-konstantene."
+
+#: modules/gdscript/gd_functions.cpp
+#: modules/visual_script/visual_script_builtin_funcs.cpp
+msgid "Not enough bytes for decoding bytes, or invalid format."
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "step argument is zero!"
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not a script with an instance"
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not based on a script"
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Not based on a resource file"
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (missing @path)"
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (can't load script at @path)"
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary format (invalid script at @path)"
+msgstr ""
+
+#: modules/gdscript/gd_functions.cpp
+msgid "Invalid instance dictionary (invalid subclasses)"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"A node yielded without working memory, please read the docs on how to yield "
+"properly!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Node yielded, but did not return a function state in the first working "
+"memory."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid ""
+"Return value must be assigned to first element of node working memory! Fix "
+"your node please."
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Node returned an invalid sequence output: "
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Found sequence bit but not the node in the stack, report bug!"
+msgstr ""
+
+#: modules/visual_script/visual_script.cpp
+msgid "Stack overflow with stack depth: "
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Functions:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Variables:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
+msgid "Signals:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name is not a valid identifier:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Name already in use by another func/var/signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Rename Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Function"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Variable"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Remove Signal"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Editing Signal:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Edit"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Base Type:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
+msgid "Members:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Available Nodes:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Select or create a function to edit graph"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
+msgid "Close"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Signal Arguments:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Edit Variable:"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Change"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Delete Selected"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Toggle Breakpoint"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Input type not iterable: "
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid"
+msgstr ""
+
+#: modules/visual_script/visual_script_flow_control.cpp
+msgid "Iterator became invalid: "
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name."
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Base object is not a Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Path does not lead Node!"
+msgstr ""
+
+#: modules/visual_script/visual_script_func_nodes.cpp
+msgid "Invalid index property name '%s' in node %s."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid argument of type: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ": Invalid arguments: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableGet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "VariableSet not found in script: "
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid "Custom node has no _step() method, can't process graph."
+msgstr ""
+
+#: modules/visual_script/visual_script_nodes.cpp
+msgid ""
+"Invalid return value from _step(), must be integer (seq out), or string "
+"(error)."
+msgstr ""
+
+#: scene/2d/animated_sprite.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite to display frames."
+msgstr ""
+
+#: scene/2d/canvas_modulate.cpp
+msgid ""
+"Only one visible CanvasModulate is allowed per scene (or set of instanced "
+"scenes). The first created one will work, while the rest will be ignored."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid ""
+"CollisionPolygon2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_polygon_2d.cpp
+msgid "An empty CollisionPolygon2D has no effect on collision."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"CollisionShape2D only serves to provide a collision shape to a "
+"CollisionObject2D derived node. Please only use it as a child of Area2D, "
+"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
+msgstr ""
+
+#: scene/2d/collision_shape_2d.cpp
+msgid ""
+"A shape must be provided for CollisionShape2D to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/2d/light_2d.cpp
+msgid ""
+"A texture with the shape of the light must be supplied to the 'texture' "
+"property."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid ""
+"An occluder polygon must be set (or drawn) for this occluder to take effect."
+msgstr ""
+
+#: scene/2d/light_occluder_2d.cpp
+msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"A NavigationPolygon resource must be set or created for this node to work. "
+"Please set a property or draw a polygon."
+msgstr ""
+
+#: scene/2d/navigation_polygon.cpp
+msgid ""
+"NavigationPolygonInstance must be a child or grandchild to a Navigation2D "
+"node. It only provides navigation data."
+msgstr ""
+
+#: scene/2d/parallax_layer.cpp
+msgid ""
+"ParallaxLayer node only works when set as child of a ParallaxBackground node."
+msgstr ""
+
+#: scene/2d/particles_2d.cpp
+msgid "Path property must point to a valid Particles2D node to work."
+msgstr ""
+
+#: scene/2d/path_2d.cpp
+msgid "PathFollow2D only works when set as a child of a Path2D node."
+msgstr ""
+
+#: scene/2d/remote_transform_2d.cpp
+msgid "Path property must point to a valid Node2D node to work."
+msgstr ""
+
+#: scene/2d/sample_player_2d.cpp scene/audio/sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SamplePlayer to play sound."
+msgstr ""
+
+#: scene/2d/sprite.cpp
+msgid ""
+"Path property must point to a valid Viewport node to work. Such Viewport "
+"must be set to 'render target' mode."
+msgstr ""
+
+#: scene/2d/sprite.cpp
+msgid ""
+"The Viewport set in the path property must be set as 'render target' in "
+"order for this sprite to work."
+msgstr ""
+
+#: scene/2d/visibility_notifier_2d.cpp
+msgid ""
+"VisibilityEnable2D works best when used with the edited scene root directly "
+"as parent."
+msgstr ""
+
+#: scene/3d/baked_light_instance.cpp
+msgid "BakedLightInstance does not contain a BakedLight resource."
+msgstr ""
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"CollisionShape only serves to provide a collision shape to a CollisionObject "
+"derived node. Please only use it as a child of Area, StaticBody, RigidBody, "
+"KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/body_shape.cpp
+msgid ""
+"A shape must be provided for CollisionShape to function. Please create a "
+"shape resource for it!"
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid ""
+"CollisionPolygon only serves to provide a collision shape to a "
+"CollisionObject derived node. Please only use it as a child of Area, "
+"StaticBody, RigidBody, KinematicBody, etc. to give them a shape."
+msgstr ""
+
+#: scene/3d/collision_polygon.cpp
+msgid "An empty CollisionPolygon has no effect on collision."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid "A NavigationMesh resource must be set or created for this node to work."
+msgstr ""
+
+#: scene/3d/navigation_mesh.cpp
+msgid ""
+"NavigationMeshInstance must be a child or grandchild to a Navigation node. "
+"It only provides navigation data."
+msgstr ""
+
+#: scene/3d/scenario_fx.cpp
+msgid ""
+"Only one WorldEnvironment is allowed per scene (or set of instanced scenes)."
+msgstr ""
+
+#: scene/3d/spatial_sample_player.cpp
+msgid ""
+"A SampleLibrary resource must be created or set in the 'samples' property in "
+"order for SpatialSamplePlayer to play sound."
+msgstr ""
+
+#: scene/3d/sprite_3d.cpp
+msgid ""
+"A SpriteFrames resource must be created or set in the 'Frames' property in "
+"order for AnimatedSprite3D to display frames."
+msgstr ""
+
+#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Cancel"
+msgstr ""
+
+#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp
+msgid "OK"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Alert!"
+msgstr ""
+
+#: scene/gui/dialogs.cpp
+msgid "Please Confirm..."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "File Exists, Overwrite?"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "All Recognized"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "All Files (*)"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/filesystem_dock.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+msgid "Open"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a File"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Open File(s)"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a Directory"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp
+msgid "Open a File or Directory"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Save a File"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp
+msgid "Create Folder"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp
+#: tools/editor/editor_file_dialog.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Path:"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Directories & Files:"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "File:"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Filter:"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Name:"
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
+#: tools/editor/editor_file_dialog.cpp
+msgid "Could not create folder."
+msgstr ""
+
+#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
+msgid "Must use a valid extension."
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Shift+"
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Alt+"
+msgstr ""
+
+#: scene/gui/input_action.cpp
+msgid "Ctrl+"
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Meta+"
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Device"
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Button"
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Left Button."
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Right Button."
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Middle Button."
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Wheel Up."
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Wheel Down."
+msgstr ""
+
+#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+msgid "Axis"
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Cut"
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Copy"
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/resources_dock.cpp
+msgid "Paste"
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "Select All"
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_log.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Clear"
+msgstr ""
+
+#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Undo"
+msgstr ""
+
+#: scene/gui/popup.cpp
+msgid ""
+"Popups will hide by default unless you call popup() or any of the popup*() "
+"functions. Making them visible for editing is fine though, but they will "
+"hide upon running."
+msgstr ""
+
+#: scene/main/viewport.cpp
+msgid ""
+"This viewport is not set as render target. If you intend for it to display "
+"its contents directly to the screen, make it a child of a Control so it can "
+"obtain a size. Otherwise, make it a RenderTarget and assign its internal "
+"texture to some node for display."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error initializing FreeType."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Unknown font format."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Error loading font."
+msgstr ""
+
+#: scene/resources/dynamic_font.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font size."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Disabled"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "All Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Transform"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Value"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Change Call"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Duplicate Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Up"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move Anim Track Down"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Anim Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Set Transitions to:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Rename"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Interpolation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Track Change Value Mode"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Node Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Edit Selection Curve"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Delete Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Duplicate Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Duplicate Transposed"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Continuous"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Discrete"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Trigger"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Move Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Selection"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale From Cursor"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Next Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Goto Prev Step"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
+msgid "Linear"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Constant"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "In-Out"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Out-In"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transitions"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize Animation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Create NEW track for %s and insert key?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Create %d NEW tracks and insert keys?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/particles_editor_plugin.cpp
+#: tools/editor/project_manager.cpp tools/editor/script_create_dialog.cpp
+msgid "Create"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create & Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Track & Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Len"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Change Anim Loop"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Create Typed Value Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Insert"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Scale Keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim Add Call Track"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation zoom."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Length (s):"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Animation length (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Step (s):"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Cursor step snap (in seconds)."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable/Disable looping in animation."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Add new tracks."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track up."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Move current track down."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove selected track."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Track tools"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Enable editing of individual keys by clicking them."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Anim. Optimizer"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Linear Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max. Angular Error:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Max Optimizable Angle:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Optimize"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Key"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Transition"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Scale Ratio:"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Call Functions in Which Node?"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove invalid keys"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Remove unresolved and empty tracks"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-up all animations"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up Animation(s) (NO UNDO!)"
+msgstr ""
+
+#: tools/editor/animation_editor.cpp
+msgid "Clean-Up"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Resize Array"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value Type"
+msgstr ""
+
+#: tools/editor/array_property_edit.cpp
+msgid "Change Array Value"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
+#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+#: tools/editor/settings_config_dialog.cpp
+msgid "Search:"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Sort:"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Reverse"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Category:"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "All"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Site:"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Support.."
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Official"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Community"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Testing"
+msgstr ""
+
+#: tools/editor/asset_library_editor_plugin.cpp
+msgid "Assets ZIP File"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List For '%s':"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Call"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Method List:"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Arguments:"
+msgstr ""
+
+#: tools/editor/call_dialog.cpp
+msgid "Return:"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Go to Line"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Line Number:"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "No Matches"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d Ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replace"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replace All"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Match Case"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Whole Words"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Selection Only"
+msgstr ""
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Search"
+msgstr ""
+
+#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
+msgid "Find"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Next"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replaced %d ocurrence(s)."
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Not found!"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Replace By"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Case Sensitive"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Backwards"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Prompt On Replace"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Skip"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom In"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Out"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Reset Zoom"
+msgstr ""
+
+#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
+msgid "Line:"
+msgstr ""
+
+#: tools/editor/code_editor.cpp
+msgid "Col:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Method in target Node must be specified!"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect To Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp
+msgid "Add"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp tools/editor/dependency_editor.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Remove"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Add Extra Call Argument:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Extra Call Arguments:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Path to Node:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Make Function"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Deferred"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Oneshot"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect '%s' to '%s'"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connecting Signal:"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Create Subscription"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+msgid "Connect.."
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Disconnect"
+msgstr ""
+
+#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp
+msgid "Signals"
+msgstr ""
+
+#: tools/editor/create_dialog.cpp
+msgid "Create New"
+msgstr ""
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
+msgid "Matches:"
+msgstr ""
+
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement For:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies For:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Scene '%s' is currently being edited.\n"
+"Changes will not take effect unless reloaded."
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"Resource '%s' is in use.\n"
+"Changes will take effect when reloaded."
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resource"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp
+#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
+msgid "Path"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependencies:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Broken"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Dependency Editor"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Search Replacement Resource:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owners Of:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid ""
+"The files being removed are required by other resources in order for them to "
+"work.\n"
+"Remove them anyway? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Remove selected files from the project? (no undo)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Error loading:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Scene failed to load due to missing dependencies:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Open Anyway"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Which action should be taken?"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Fix Dependencies"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Errors loading!"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Permanently delete %d item(s)? (No undo!)"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Owns"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Resources Without Explicit Ownership:"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+msgid "Orphan Resource Explorer"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp
+msgid "Delete selected files?"
+msgstr ""
+
+#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
+#: tools/editor/filesystem_dock.cpp
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Valid characters:"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing engine class name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing buit-in type name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid name. Must not collide with an existing global constant name."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Invalid Path."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "File does not exist."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Not in resource path."
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Add AutoLoad"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Autoload '%s' already exists!"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Rename Autoload"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Toggle AutoLoad Globals"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Move Autoload"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Remove Autoload"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Enable"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Rearrange Autoloads"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Node Name:"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Name"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "Singleton"
+msgstr ""
+
+#: tools/editor/editor_autoload_settings.cpp
+msgid "List:"
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Updating Scene"
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Storing local changes.."
+msgstr ""
+
+#: tools/editor/editor_data.cpp
+msgid "Updating scene.."
+msgstr ""
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose a Directory"
+msgstr ""
+
+#: tools/editor/editor_dir_dialog.cpp
+msgid "Choose"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Back"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Forward"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Go Up"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Refresh"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Hidden Files"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Favorite"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Toggle Mode"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Focus Path"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Move Favorite Up"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Move Favorite Down"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
+msgid "Favorites:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Recent:"
+msgstr ""
+
+#: tools/editor/editor_file_dialog.cpp
+msgid "Preview:"
+msgstr ""
+
+#: tools/editor/editor_file_system.cpp
+msgid "ScanSources"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search Help"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Class List:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Classes"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/property_editor.cpp
+msgid "Class:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Inherits:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Inherited by:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Brief Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Public Methods:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "GUI Theme Items:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Constants:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Method Description:"
+msgstr ""
+
+#: tools/editor/editor_help.cpp
+msgid "Search Text"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Added:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Removed:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp tools/editor/project_export.cpp
+msgid "Error saving atlas:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Could not save atlas subtexture:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Storing File:"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Packing"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Exporting for %s"
+msgstr ""
+
+#: tools/editor/editor_import_export.cpp
+msgid "Setting Up.."
+msgstr ""
+
+#: tools/editor/editor_log.cpp
+msgid " Output:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Importing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Importing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Node From Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Error saving resource!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "I see.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open file for writing:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Requested file format unknown:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error while saving."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Saving Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Analyzing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Creating Thumbnail"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Couldn't save scene. Likely dependencies (instances) couldn't be satisfied."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Failed to load resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load MeshLibrary for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving MeshLibrary!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't load TileSet for merging!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error saving TileSet!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't open export templates zip."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Loading Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error trying to save layout!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Default editor layout overridden."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Layout name not found!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Restored default layout to base settings."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Paste Params"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Paste Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Copy Resource"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Built-In"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Make Sub-Resources Unique"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open in Help"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "There is no defined scene to run."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"No main scene has ever been defined, select one?\n"
+"You can change it later in later in \"Project Settings\" under the "
+"'application' category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' does not exist, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Selected scene '%s' is not a scene file, select a valid one?\n"
+"You can change it later in \"Project Settings\" under the 'application' "
+"category."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene was never saved, please save it prior to running."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Could not start subprocess!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Base Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Open Script.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Yes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close scene? (Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This scene has never been saved. Save before running?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Please save the scene first."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Translatable Strings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Mesh Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Tile Set"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Exit the editor?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Current scene not saved. Open anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Can't reload a scene that was never saved."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "This action cannot be undone. Revert anyway?"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Run Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Open Project Manager? \n"
+"(Unsaved changes will be lost)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pick a Main Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
+msgid "Ugh"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Error loading scene, it must be inside the project path. Use 'Import' to "
+"open the scene, then save it inside the project path."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Error loading scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Scene '%s' has broken dependencies:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Delete Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Default"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Switch Scene Tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "%d more file(s) or folder(s)"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to previously opened scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Fullscreen Mode"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Distraction Free Mode"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Next tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Previous tab"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Operations with scene files."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "New Inherited Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Scene.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save all Scenes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Close Goto Prev. Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open Recent"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quick Filter Files.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Convert To.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Translatable Strings.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "MeshLibrary.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "TileSet.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Redo"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Run Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Project Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Revert Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Quit to Project List"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import assets to the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/project_manager.cpp
+msgid "Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Miscellaneous project or scene-wide tools."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Tools"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export the project to many platforms."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the project."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Play"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause the scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Pause Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Stop the scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stop"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play the edited scene."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play custom scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Play Custom Scene"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Debug options"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Deploy with Remote Debug"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When exporting or deploying, the resulting executable will attempt to "
+"connect to the IP of this computer in order to be debugged."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Small Deploy with Network FS"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is enabled, export or deploy will produce a minimal "
+"executable.\n"
+"The filesystem will be provided from the project by the editor over the "
+"network.\n"
+"On Android, deploy will use the USB cable for faster performance. This "
+"option speeds up testing for games with a large footprint."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Collision Shapes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Collision shapes and raycast nodes (for 2D and 3D) will be visible on the "
+"running game if this option is turned on."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Visible Navigation"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"Navigation meshes and polygons will be visible on the running game if this "
+"option is turned on."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Sync Scene Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any changes made to the scene in the editor "
+"will be replicated in the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Sync Script Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid ""
+"When this option is turned on, any script that is saved will be reloaded on "
+"the running game.\n"
+"When used remotely on a device, this is more efficient with network "
+"filesystem."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
+msgid "Editor Settings"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Editor Layout"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Install Export Templates"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "About"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Alerts when an external resource has changed."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Spins when the editor window repaints!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Always"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Update Changes"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Inspector"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Create a new resource in memory and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load an existing resource from disk and edit it."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Save the currently edited resource."
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save As.."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the previous edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Go to the next edited object in history."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "History of recently edited objects."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Object properties."
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "FileSystem"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Output"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/editor_plugin_settings.cpp
+msgid "Update"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks from the Godot community!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Thanks!"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Import Templates From ZIP File"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Export Project"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Export Library"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Merge With Existing"
+msgstr ""
+
+#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
+msgid "Password:"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Open & Run a Script"
+msgstr ""
+
+#: tools/editor/editor_node.cpp
+msgid "Load Errors"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Installed Plugins:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Version:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Author:"
+msgstr ""
+
+#: tools/editor/editor_plugin_settings.cpp
+msgid "Status:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Stop Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Start Profiling"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Measure:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Average Time (sec)"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Fixed Frame %"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp tools/editor/script_editor_debugger.cpp
+msgid "Time:"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Inclusive"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Self"
+msgstr ""
+
+#: tools/editor/editor_profiler.cpp
+msgid "Frame #:"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Please wait for scan to complete."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Current scene must be saved to re-import."
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Save & Re-Import"
+msgstr ""
+
+#: tools/editor/editor_reimport_dialog.cpp
+msgid "Re-Import Changed Resources"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Write your logic in the _run() method."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "There is an edited scene already."
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't instance script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the 'tool' keyword?"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Couldn't run script:"
+msgstr ""
+
+#: tools/editor/editor_run_script.cpp
+msgid "Did you forget the '_run' method?"
+msgstr ""
+
+#: tools/editor/editor_settings.cpp
+msgid "Default (Same as Editor)"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Select Node(s) to Import"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Scene Path:"
+msgstr ""
+
+#: tools/editor/editor_sub_scene.cpp
+msgid "Import From Node:"
+msgstr ""
+
+#: tools/editor/file_type_cache.cpp
+msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Same source and destination files, doing nothing."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Same source and destination paths, doing nothing."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Can't move directories to within themselves."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Can't operate on '..'"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Pick New Name and Location For:"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "No files selected!"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Instance"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Edit Dependencies.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "View Owners.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Copy Path"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Rename or Move.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Move To.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Info"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Show In File Manager"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Re-Import.."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Previous Directory"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Next Directory"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Re-Scan Filesystem"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Toggle folder status as Favorite"
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Instance the selected scene(s) as child of the selected node."
+msgstr ""
+
+#: tools/editor/filesystem_dock.cpp
+msgid "Move"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Add to Group"
+msgstr ""
+
+#: tools/editor/groups_editor.cpp
+msgid "Remove from Group"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "No bit masks to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must be a complete resource path."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Target path must exist."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Save path is empty!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "Import BitMasks"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Target Path:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Accept"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
+msgid "Bit Mask"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No source font file!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "No target font resource!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"Invalid file extension.\n"
+"Please use .fnt."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Can't load/process source font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Couldn't save font."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Source Font Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Dest Resource:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "The quick brown fox jumps over the lazy dog."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Test:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Options:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Font Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid ""
+"This file is already a Godot font file, please supply a BMFont type file "
+"instead."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Failed opening as BMFont file."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+msgid "Invalid font custom source."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_font_import_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Font"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "No meshes to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Single Mesh Import"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Source Mesh(es):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
+msgid "Surface %d"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "No samples to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Import Audio Samples"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Source Sample(s):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
+msgid "Audio Sample"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "New Clip"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Animation Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Flags"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Bake FPS:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Optimizer"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Linear Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angular Error"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Max Angle"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Clips"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Start(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "End(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Loop"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Filters"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source path is empty."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error importing scene."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import 3D Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Source Scene:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Same as Target Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Shared"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Target Texture Folder:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Post-Process Script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Custom Root Node Type:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Auto"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "The Following Files are Missing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Anyway"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import & Open"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Edited scene has not been saved, open imported scene anyway?"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import Scene"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Importing Scene.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Running Custom Script.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't load post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Invalid/broken script for post-import (check console):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Error running post-import script:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Import Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Can't import a file over itself:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Couldn't localize path: %s (already local)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "Saving.."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
+msgid "3D Scene Animation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Uncompressed"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossless (PNG)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress Lossy (WebP)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Compress (VRAM)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Format"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Compression Quality (WebP):"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture Options"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Please specify some files!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "At least one file needed for Atlas."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Error importing:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Only one file is required for large texture."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Max Texture Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for Atlas (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cell Size:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Textures (2D)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Base Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Source Texture(s)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 2D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures for 3D"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Textures"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "2D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "3D Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Atlas Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid ""
+"NOTICE: Importing 2D textures is not mandatory. Just copy png/jpg files to "
+"the project."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Crop empty space."
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Import Large Texture"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Load Source Image"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Slicing"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Inserting"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Saving"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save large texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Build Atlas For:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Loading Image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't load image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Converting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Cropping Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Blitting Images"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save atlas image:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
+msgid "Couldn't save converted texture:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Invalid translation source!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Column"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+#: tools/editor/script_create_dialog.cpp
+msgid "Language"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No items to import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "No target path!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translations"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Couldn't import!"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Translation"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Source CSV:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Ignore First Row"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Compress"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Add to Project (engine.cfg)"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Import Languages:"
+msgstr ""
+
+#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
+msgid "Translation"
+msgstr ""
+
+#: tools/editor/multi_node_edit.cpp
+msgid "MultiNode Set"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Node"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Groups"
+msgstr ""
+
+#: tools/editor/node_dock.cpp
+msgid "Select a Node to edit Signals and Groups."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Toggle Autoplay"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "New Anim"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Remove Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Invalid animation name!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: Animation name already exists!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Rename Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Next Changed"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Change Blend Time"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Duplicate Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to copy!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation resource on clipboard!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Pasted Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Paste Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "ERROR: No animation to edit!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from current pos. (A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation backwards from end. (Shift+A)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Stop animation playback. (S)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from start. (Shift+D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Play selected animation from current pos. (D)"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation position (in seconds)."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Scale animation playback globally for the node."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create new animation in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Load an animation from disk."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save the current animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Save As"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Display list of animations in player."
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Autoplay on Load"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Edit Target Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Tools"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Copy Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Create New Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Animation Name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+#: tools/editor/property_editor.cpp tools/editor/script_create_dialog.cpp
+msgid "Error!"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Blend Times:"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Next (Auto Queue):"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+msgid "Cross-Animation Blend Times"
+msgstr ""
+
+#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Animation"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "New name:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Scale:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade In (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Fade Out (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Auto Restart:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Random Restart (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Start!"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Amount:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 0:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend 1:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "X-Fade Time (s):"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Current:"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Add Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Clear Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Set Auto-Advance"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Delete Input"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Rename"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is valid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation tree is invalid."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Animation Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "OneShot Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Mix Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend2 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend3 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Blend4 Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeScale Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "TimeSeek Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Transition Node"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Import Animations.."
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Edit Node Filters"
+msgstr ""
+
+#: tools/editor/plugins/animation_tree_editor_plugin.cpp
+msgid "Filters.."
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing %d Triangles:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Light Baker Setup:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Parsing Geometry"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Fixing Lights"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Making BVH"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Light Octree"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Creating Octree Texture"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Transfer to Lightmaps:"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Allocating Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Baking Triangle #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_baker.cpp
+msgid "Post-Processing Texture #"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Bake!"
+msgstr ""
+
+#: tools/editor/plugins/baked_light_editor_plugin.cpp
+msgid "Reset the lightmap octree baking process (start over)."
+msgstr ""
+
+#: tools/editor/plugins/camera_editor_plugin.cpp
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Preview"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Configure Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Offset:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotation Step:"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Pivot"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Action"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Edit CanvasItem"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Change Anchors"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom (%):"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Paste Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Select Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Drag: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+Drag: Move"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Press 'v' to Change Pivot, 'Shift+v' to Drag Pivot (while moving)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Alt+RMB: Depth list selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Move Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Rotate Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid ""
+"Show a list of all objects at the position clicked\n"
+"(same as Alt+RMB in select mode)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Click to change object's rotation pivot."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Pan Mode"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Lock the selected object in place (can't be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Unlock the selected object (can be moved)."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Makes sure the object's children are not selectable."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Restores the object's children's ability to be selected."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Show Grid"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Rotation Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap Relative"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Configure Snap.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Use Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Expand to Parent"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Skeleton.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Bones"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Make IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear IK Chain"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Reset"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Zoom Set.."
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Center Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Frame Selection"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Anchor"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Keys"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Insert Key (Existing Tracks)"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Copy Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Clear Pose"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Set a Value"
+msgstr ""
+
+#: tools/editor/plugins/canvas_item_editor_plugin.cpp
+msgid "Snap (Pixels):"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Edit Poly (Remove Point)"
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create a new polygon from scratch."
+msgstr ""
+
+#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
+msgid "Create Poly3D"
+msgstr ""
+
+#: tools/editor/plugins/collision_shape_2d_editor_plugin.cpp
+msgid "Set Handle"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+msgid "Add/Remove Color Ramp Point"
+msgstr ""
+
+#: tools/editor/plugins/color_ramp_editor_plugin.cpp
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Creating Mesh Library"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Thumbnail.."
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove item %d?"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Add Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Remove Selected Item"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Import from Scene"
+msgstr ""
+
+#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
+msgid "Update from Scene"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item %d"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Items"
+msgstr ""
+
+#: tools/editor/plugins/item_list_editor_plugin.cpp
+msgid "Item List Editor"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+msgid "Create Occluder Polygon"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Edit existing polygon:"
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "LMB: Move Point."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Ctrl+LMB: Split Segment."
+msgstr ""
+
+#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "RMB: Erase Point."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh is empty!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Trimesh Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Static Convex Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "This doesn't work on scene root!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Shape"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Navigation Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "MeshInstance lacks a Mesh!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Mesh has not surface to create outlines from!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Could not create outline!"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Static Body"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Trimesh Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Convex Collision Sibling"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh.."
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Create Outline Mesh"
+msgstr ""
+
+#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
+msgid "Outline Size:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and no MultiMesh set in node)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No mesh source specified (and MultiMesh contains no Mesh)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (not a MeshInstance)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh source is invalid (contains no Mesh resource)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "No surface source specified."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (invalid path)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no geometry)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Surface source is invalid (no faces)."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Parent has no solid faces to populate."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Couldn't map area."
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Select a Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate Surface"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate MultiMesh"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Target Surface:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Source Mesh:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "X-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Y-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Z-Axis"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Mesh Up Axis:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Rotation:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Tilt:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Random Scale:"
+msgstr ""
+
+#: tools/editor/plugins/multimesh_editor_plugin.cpp
+msgid "Populate"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Create Navigation Polygon"
+msgstr ""
+
+#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
+msgid "Remove Poly And Point"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Error loading image:"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "No pixels with transparency > 128 in image.."
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Set Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Clear Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Load Emission Mask"
+msgstr ""
+
+#: tools/editor/plugins/particles_2d_editor_plugin.cpp
+msgid "Generated Point Count:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Node does not contain geometry (faces)."
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Faces contain no area!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "No faces!"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Generate AABB"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Mesh"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter From Node"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Clear Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Create Emitter"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Positions:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Emission Fill:"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Surface"
+msgstr ""
+
+#: tools/editor/plugins/particles_editor_plugin.cpp
+msgid "Volume"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Remove Point from Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point to Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Point in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move In-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Move Out-Control in Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Select Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Shift+Drag: Select Control Points"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Click: Add Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Right Click: Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+msgid "Select Control Points (Shift+Drag)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Add Point (in empty space)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Segment (in curve)"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Delete Point"
+msgstr ""
+
+#: tools/editor/plugins/path_2d_editor_plugin.cpp
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Close Curve"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Curve Point #"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Point Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve In Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Set Curve Out Pos"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Split Path"
+msgstr ""
+
+#: tools/editor/plugins/path_editor_plugin.cpp
+msgid "Remove Path Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Create UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Transform UV Map"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon 2D UV Editor"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Point"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Ctrl: Rotate"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift: Move All"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Shift+Ctrl: Scale"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Move Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Rotate Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Scale Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Polygon->UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "UV->Polygon"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Clear UV"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Enable Snap"
+msgstr ""
+
+#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
+msgid "Grid"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "ERROR: Couldn't load resource!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Add Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Rename Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Delete Resource"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+msgid "Resource clipboard is empty!"
+msgstr ""
+
+#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Load Resource"
+msgstr ""
+
+#: tools/editor/plugins/rich_text_editor_plugin.cpp
+msgid "Parse BBCode"
+msgstr ""
+
+#: tools/editor/plugins/sample_editor_plugin.cpp
+msgid "Length:"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Open Sample File(s)"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "ERROR: Couldn't load sample!"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Add Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Rename Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Delete Sample"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "16 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "8 Bits"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Stereo"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Mono"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Format"
+msgstr ""
+
+#: tools/editor/plugins/sample_library_editor_plugin.cpp
+msgid "Pitch"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error while saving theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error saving"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Error importing"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Import Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Next script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Previous script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/project_export.cpp
+msgid "File"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_editor.cpp
+msgid "New"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save All"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Soft Reload Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Prev"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "History Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Save Theme As"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Close Docs"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find.."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Next"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Debug"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Over"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Step Into"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Break"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Continue"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Keep Debugger Open"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Window"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Left"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Move Right"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Tutorials"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Open https://godotengine.org at tutorials section."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Classes"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the class hierarchy."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Search the reference documentation."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to previous edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Go to next edited document."
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Create Script"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"The following files are newer on disk.\n"
+"What action should be taken?:"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Reload"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid "Resave"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Debugger"
+msgstr ""
+
+#: tools/editor/plugins/script_editor_plugin.cpp
+msgid ""
+"Built-in scripts can only be edited when the scene they belong to is loaded"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
+msgid "Move Up"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
+msgid "Move Down"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Indent Left"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Indent Right"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Toggle Comment"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Clone Down"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Complete Symbol"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Trim Trailing Whitespace"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Auto Indent"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Remove All Breakpoints"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Next Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Previous Breakpoint"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Find Previous"
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Replace.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Goto Function.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Goto Line.."
+msgstr ""
+
+#: tools/editor/plugins/script_text_editor.cpp
+msgid "Contextual Help"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Vertex"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Fragment"
+msgstr ""
+
+#: tools/editor/plugins/shader_editor_plugin.cpp
+msgid "Lighting"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Constant"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Scalar Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Operator"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Toggle Rot Only"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Function"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Scalar Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Vec Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change RGB Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Default Value"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change XForm Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Texture Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Cubemap Uniform"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Comment"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Color Ramp"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add/Remove to Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Modify Curve Map"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Change Input Name"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Connect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Disconnect Graph Nodes"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Remove Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Move Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Duplicate Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Delete Shader Graph Node(s)"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Cyclic Connection Link"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Error: Missing Input Connections"
+msgstr ""
+
+#: tools/editor/plugins/shader_graph_editor_plugin.cpp
+msgid "Add Shader Graph Node"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Orthogonal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Aborted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "X-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Y-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Z-Axis Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Plane Transform."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scaling to %s%%."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotating %s degrees."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Keying is disabled (no key inserted)."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Animation Key Inserted."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align with view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Environment"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Audio Listener"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Gizmos"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "XForm Dialog"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "No scene selected to instance!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Instance at Cursor"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Could not instance scene!"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Move Mode (W)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Mode (E)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Mode (R)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Bottom View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Top View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rear View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Front View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Left View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Right View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Switch Perspective/Orthogonal view"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Insert Animation Key"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Focus Selection"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Align Selection With View"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Local Coords"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Dialog.."
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default Light"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Use Default sRGB"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "1 Viewport"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "2 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "3 Viewports (Alt)"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "4 Viewports"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Normal"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Wireframe"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Overdraw"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Display Shadeless"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Origin"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Grid"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Snap Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate Snap:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate Snap (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale Snap (%):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Viewport Settings"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Default Light Normal:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Ambient Light Color:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Perspective FOV (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Near:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "View Z-Far:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Change"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Translate:"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Rotate (deg.):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Scale (ratio):"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Transform Type"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Pre"
+msgstr ""
+
+#: tools/editor/plugins/spatial_editor_plugin.cpp
+msgid "Post"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "ERROR: Couldn't load frame resource!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Resource clipboard is empty or not a texture!"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Paste Frame"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Add Empty"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation Loop"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Change Animation FPS"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "(empty)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animations"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Speed (FPS):"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Animation Frames"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (Before)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Insert Empty (After)"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Up"
+msgstr ""
+
+#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
+msgid "Down"
+msgstr ""
+
+#: tools/editor/plugins/style_box_editor_plugin.cpp
+msgid "StyleBox Preview:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Snap Mode:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "<None>"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Pixel Snap"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Grid Snap"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Auto Slice"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Offset:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Step:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Separation:"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region"
+msgstr ""
+
+#: tools/editor/plugins/texture_region_editor_plugin.cpp
+msgid "Texture Region Editor"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Can't save theme to file:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add All"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Remove Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Add Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Remove Class Items"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Create Empty Editor Template"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "CheckBox Radio2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Check Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Checked Item"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Has"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Many"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
+msgid "Options"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Have,Many,Several,Options!"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 1"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 2"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Tab 3"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Data Type:"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Icon"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Style"
+msgstr ""
+
+#: tools/editor/plugins/theme_editor_plugin.cpp
+msgid "Color"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Paint TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase TileMap"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Erase selection"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Find tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Transpose"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror X"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Mirror Y"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Bucket"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Pick Tile"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Select"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 0 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 90 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 180 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_map_editor_plugin.cpp
+msgid "Rotate 270 degrees"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Could not find tile:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Item name or ID:"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from scene?"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Create from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+msgid "Merge from Scene"
+msgstr ""
+
+#: tools/editor/plugins/tile_set_editor_plugin.cpp
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Edit Script Options"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Please export outside the project folder!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error exporting project!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Error writing the project PCK!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "No exporter for platform '%s' yet."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Include"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Change Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name can't be empty!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Invalid character in group name!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group name already exists!"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Add Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Delete Image Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas Preview"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export Settings"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Target"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export to Platform"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export selected resources (including dependencies)."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all resources in the project."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export all files in the project directory."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Resources to Export:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Action"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid ""
+"Filters to export non-resource files (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Filters to exclude from export (comma-separated, e.g.: *.json, *.txt):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert text scenes to binary on export."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep Original"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy, WebP)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for RAM (BC/PVRTC/ETC)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Convert Images (*.png):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress for Disk (Lossy) Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink All Images:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Formats:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Groups"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Groups:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Disk"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress RAM"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Lossy Quality:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Atlas:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Shrink By:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Preview Atlas"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Image Filter:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Images:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Select None"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Group"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Samples"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sample Conversion Mode: (.wav files):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Keep"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compress (RAM - IMA-ADPCM)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Sampling Rate Limit (Hz):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trim"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Trailing Silence:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Export Mode:"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Text"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Compiled"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Encrypted (Provide Key Below)"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Script Encryption Key (256-bits as hex):"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export PCK/Zip"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Project PCK"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export.."
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Project Export"
+msgstr ""
+
+#: tools/editor/project_export.cpp
+msgid "Export Preset:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, the path must exist!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must not exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path, engine.cfg must exist."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Imported Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Invalid project path (changed anything?)."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Couldn't create engine.cfg in project path."
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "The following files failed extraction from package:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Package Installed Successfully!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Import Existing Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path (Must Exist):"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Name:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Create New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Path:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Install Project:"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Install"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Browse"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Game Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "That's a BINGO!"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Unnamed Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to open more than one project?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Are you sure to run more than one project?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Remove project from the list? (Folder contents will not be modified)"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid ""
+"You are about the scan %s folders for existing Godot projects. Do you "
+"confirm?"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project Manager"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Project List"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Run"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Select a Folder to Scan"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "New Project"
+msgstr ""
+
+#: tools/editor/project_manager.cpp
+msgid "Exit"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Key "
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joy Axis"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Invalid action (anything goes but '/' or ':')."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action '%s' already exists!"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Rename Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "Control+"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "Press a Key.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Mouse Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Left Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Right Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Middle Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Up Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Wheel Down Button"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 6"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 7"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 8"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Button 9"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Axis Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Joystick Button Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Input Action"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Erase Input Action Event"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Toggle Persisting"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Error saving settings."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Settings saved OK."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Translation"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add Remapped Path"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resource Remap Add Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Change Resource Remap Language"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remove Resource Remap Option"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Project Settings (engine.cfg)"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
+msgid "General"
+msgstr ""
+
+#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
+msgid "Property:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Del"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Copy To Platform.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Input Map"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Action:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Device:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Index:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Localization"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Translations"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Translations:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Add.."
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Resources:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Remaps by Locale:"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Locale"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "AutoLoad"
+msgstr ""
+
+#: tools/editor/project_settings.cpp
+msgid "Plugins"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Preset.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Ease Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Zero"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing In-Out"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Easing Out-In"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "File.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Dir.."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Load"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Assign"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Error loading file: Not a resource!"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Couldn't load image"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Bit %d, val %d."
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "On"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Set"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Properties:"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Global"
+msgstr ""
+
+#: tools/editor/property_editor.cpp
+msgid "Sections:"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Could not execute PVRTC tool:"
+msgstr ""
+
+#: tools/editor/pvrtc_compress.cpp
+msgid "Can't load back converted image using PVRTC tool:"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent Node"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Reparent Location (Select new Parent):"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp
+msgid "Keep Global Transform"
+msgstr ""
+
+#: tools/editor/reparent_dialog.cpp tools/editor/scene_tree_dock.cpp
+msgid "Reparent"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Create New Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Open Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Save Resource"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Resource Tools"
+msgstr ""
+
+#: tools/editor/resources_dock.cpp
+msgid "Make Local"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Run Mode:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Current Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Main Scene Arguments:"
+msgstr ""
+
+#: tools/editor/run_settings_dialog.cpp
+msgid "Scene Run Settings"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "OK :("
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance a child at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "No parent to instance the scenes at."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error loading scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error instancing scene from %s"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Ok"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Cannot instance the scene '%s' because the current scene exists within one "
+"of its nodes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Scene(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on the tree root."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Node In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Move Nodes In Parent"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Duplicate Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)?"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done without a scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation requires a single selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "This operation can't be done on instanced scenes."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save New Scene As.."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Makes Sense!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes from a foreign scene!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Can't operate on nodes the current scene inherits from!"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Remove Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Couldn't save new scene. Likely dependencies (instances) couldn't be "
+"satisfied."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error saving scene."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Error duplicating scene to save it."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Groups"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Edit Connections"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete Node(s)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Child Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Instance Child Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Change Type"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add Script"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Merge From Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Save Branch as Scene"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Delete (No Confirm)"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Add/Create a New Node"
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid ""
+"Instance a scene file as a Node. Creates an inherited scene if no root node "
+"exists."
+msgstr ""
+
+#: tools/editor/scene_tree_dock.cpp
+msgid "Create a new script for the selected node."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid ""
+"This item cannot be made visible because the parent is hidden. Unhide the "
+"parent first."
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle Spatial Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Toggle CanvasItem Visible"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Instance:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Invalid node name, the following characters are not allowed:"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Rename Node"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Scene Tree (Nodes):"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Editable Children"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Load As Placeholder"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Discard Instancing"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Open in Editor"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear Inheritance? (No Undo!)"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Clear!"
+msgstr ""
+
+#: tools/editor/scene_tree_editor.cpp
+msgid "Select a Node"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid parent class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid chars:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid class name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid name"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "N/A"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Parent class name is invalid!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid path!"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Could not create script in filesystem."
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is empty"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Path is not local"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid base path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "File exists"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Invalid extension"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Valid path"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Class Name:"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Built-In Script"
+msgstr ""
+
+#: tools/editor/script_create_dialog.cpp
+msgid "Create Node Script"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Bytes:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Warning"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Error:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Source:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Function:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Child Process Connected"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Previous Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Inspect Next Instance"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Frames"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Variable"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Errors:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Stack Trace (if applicable):"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Inspector"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Scene Tree:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Remote Object Properties: "
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Profiler"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitor"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Value"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Monitors"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "List of Video Memory Usage by Resource:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Total:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Video Mem"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Resource Path"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Type"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Usage"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Misc"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Clicked Control Type:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Live Edit Root:"
+msgstr ""
+
+#: tools/editor/script_editor_debugger.cpp
+msgid "Set From Tree"
+msgstr ""
+
+#: tools/editor/settings_config_dialog.cpp
+msgid "Shortcuts"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Light Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera FOV"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Camera Size"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Sphere Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Box Shape Extents"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Radius"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Capsule Shape Height"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Ray Shape Length"
+msgstr ""
+
+#: tools/editor/spatial_editor_gizmos.cpp
+msgid "Change Notifier Extents"
+msgstr ""
diff --git a/tools/translations/pl.po b/tools/translations/pl.po
index 6e1652675a..23966ce78c 100644
--- a/tools/translations/pl.po
+++ b/tools/translations/pl.po
@@ -7,12 +7,13 @@
# Kamil Lewan <lewan.kamil@gmail.com>, 2016.
# Karol Walasek <coreconviction@gmail.com>, 2016.
# Mietek Szcześniak <ravaging@go2.pl>, 2016.
+# Rafal Brozio <rafal.brozio@gmail.com>, 2016.
# siatek papieros <sbigneu@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-10 13:18+0000\n"
+"PO-Revision-Date: 2016-08-16 18:01+0000\n"
"Last-Translator: Mietek Szcześniak <ravaging@go2.pl>\n"
"Language-Team: Polish <https://hosted.weblate.org/projects/godot-engine/"
"godot/pl/>\n"
@@ -35,7 +36,7 @@ msgstr "Brak miejsca dla bajtów dekodujących, lub zły format."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
-msgstr "Argument kroku jest zerowy!"
+msgstr "argument kroku jest zerowy!"
#: modules/gdscript/gd_functions.cpp
msgid "Not a script with an instance"
@@ -51,7 +52,7 @@ msgstr "Nie bazuje na pliku zasobów"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "Niepoprawna instancja formatu słownika (brakujący @path)"
+msgstr "Niepoprawna instancja formatu słownika (brak @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
@@ -83,10 +84,12 @@ msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"Zwrócona wartość musi być przypisana do pierwszego elementu węzła pamięci "
+"roboczej! Proszę naprawić swój węzeł."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Węzeł zwrócił niewłaściwą sekwencję wyjściową: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
@@ -94,17 +97,15 @@ msgstr ""
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Przepełnienie stosu z głębokością stosu: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Funkcja:"
+msgstr "Funkcje:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Zmienna"
+msgstr "Zmienne:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -112,83 +113,99 @@ msgstr "Sygnały:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Nazwa nie jest prawidłowym identyfikatorem:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Nazwa jest już użyta przez inną funkcję/zmienną/sygnał:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Stwórz Funkcję"
+msgstr "Zmień nazwę funkcji"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Zmienna"
+msgstr "Zmień nawę zmiennej"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Zmień nazwę"
+msgstr "Zmień nazwę sygnału"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Funkcja:"
+msgstr "Dodaj funkcję"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Zmienna"
+msgstr "Dodaj zmienną"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Sygnały"
+msgstr "Dodaj sygnał"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Usuń zaznaczone"
+msgstr "Usuń funkcję"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Zmienna"
+msgstr "Usuń zmienną"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Zmienna"
+msgstr "Edytuj zmienną:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Usuń zaznaczone"
+msgstr "Usuń sygnał"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Połączony sygnał:"
+msgstr "Edytuj sygnał:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "Dodaj węzeł dziecko"
+msgstr "Dodaj węzeł"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
+msgid "Add Preload Node"
+msgstr "Dodaj dziecko węzła"
+
+#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node(s) From Tree"
-msgstr "Węzeł ze Sceny"
+msgstr "Dodaj węzeł(y) z drzewa"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Add Setter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -201,9 +218,8 @@ msgid "Edit"
msgstr "Edycja"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "Zmień typ"
+msgstr "Typ bazowy:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
@@ -211,11 +227,11 @@ msgstr "Członkowie:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "Dostępne węzły:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Wybierz lub utwórz funkcję, aby edytować wykres"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -231,34 +247,45 @@ msgid "Close"
msgstr "Zamknij"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "Dodatkowe argumenty wywołania:"
+msgstr "Edytuj argumenty sygnału:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Zmienna"
+msgstr "Edytuj zmienną:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Zmień typ"
+msgstr "Zmień"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Usunąć zaznaczone pliki?"
+msgstr "Usuń zaznaczone"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
-msgstr ""
+msgstr "Przełącz pułapkę"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Znajdź Następny"
+msgid "Find Node Type"
+msgstr "Znajdź typ węzła"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Skopiuj Pozę"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Utwórz węzeł"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Wklej Pozę"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -279,40 +306,31 @@ msgstr "Nieprawidłowa nazwa klasy bazowej"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "Obiekt bazowy nie jest węzłem!"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "Ścieżka nie jest lokalna"
+msgstr "Ścieżka nie prowadzi do węzła!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Nieprawidłowy indeks we właściwości '%s' węzła %s."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid argument of type: "
-msgstr "Nieprawidłowa nazwa klasy bazowej"
+msgstr ":nieprawidłowy argument typu: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Nieprawidłowa nazwa klasy bazowej"
+msgstr ":nieprawidłowe argumenty: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "Nie znaleziono VariableGet w skrypcie: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "Nie znaleziono VariableSet w skrypcie: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -370,7 +388,7 @@ msgid ""
"A shape must be provided for CollisionShape2D to function. Please create a "
"shape resource for it!"
msgstr ""
-"Zasób shape jest niezbędny do działania CollisionPolygon2D. Proszę stworzyć "
+"Zasób shape jest niezbędny do działania CollisionPolygon2D. Proszę utworzyć "
"zasób shape!"
#: scene/2d/light_2d.cpp
@@ -393,12 +411,11 @@ msgid "The occluder polygon for this occluder is empty. Please draw a polygon!"
msgstr "Poligon zasłaniający jest pusty. Proszę narysować poligon!"
#: scene/2d/navigation_polygon.cpp
-#, fuzzy
msgid ""
"A NavigationPolygon resource must be set or created for this node to work. "
"Please set a property or draw a polygon."
msgstr ""
-"Zasób typu NavigationPolygon musi być ustawiony lub stworzony, aby ten węzeł "
+"Zasób typu NavigationPolygon musi być ustawiony lub utworzony, aby ten węzeł "
"zadziałał."
#: scene/2d/navigation_polygon.cpp
@@ -482,7 +499,7 @@ msgid ""
"shape resource for it!"
msgstr ""
"Kształt musi być określony dla CollisionShape, aby spełniał swoje zadanie. "
-"Stwórz zasób typu CollisionShape w odpowiednim polu obiektu!"
+"Utwórz zasób typu CollisionShape w odpowiednim polu obiektu!"
#: scene/3d/collision_polygon.cpp
msgid ""
@@ -557,7 +574,7 @@ msgstr "Plik istnieje, nadpisać?"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Recognized"
-msgstr "Wszystko rozpoznane"
+msgstr "Wszystkie rozpoznane"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Files (*)"
@@ -566,7 +583,8 @@ msgstr "Wszystkie pliki (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Otwórz"
@@ -600,7 +618,7 @@ msgstr "Zapisz plik"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp
msgid "Create Folder"
-msgstr "Stwórz katalog"
+msgstr "Utwórz katalog"
#: scene/gui/file_dialog.cpp tools/editor/editor_autoload_settings.cpp
#: tools/editor/editor_file_dialog.cpp
@@ -631,7 +649,7 @@ msgstr "Nazwa:"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp
msgid "Could not create folder."
-msgstr "Nie można stworzyć katalogu."
+msgstr "Nie można utworzyć katalogu."
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Must use a valid extension."
@@ -654,7 +672,7 @@ msgstr "Ctrl+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Meta+"
-msgstr ""
+msgstr "Meta+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Device"
@@ -760,7 +778,7 @@ msgstr "Błąd przy inicjalizacji FreeType."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Unknown font format."
-msgstr "Nieznany format fonta."
+msgstr "Nieznany format fontu."
#: scene/resources/dynamic_font.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -823,7 +841,7 @@ msgstr "Usuń animację"
#: tools/editor/animation_editor.cpp
msgid "Set Transitions to:"
-msgstr ""
+msgstr "Ustaw przejścia na:"
#: tools/editor/animation_editor.cpp
msgid "Anim Track Rename"
@@ -893,11 +911,11 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Goto Next Step"
-msgstr "Idź do następnego kroku"
+msgstr "Przejdź do następnego kroku"
#: tools/editor/animation_editor.cpp
msgid "Goto Prev Step"
-msgstr "Idź do poprzedniego kroku"
+msgstr "Przejdź do poprzedniego kroku"
#: tools/editor/animation_editor.cpp tools/editor/property_editor.cpp
msgid "Linear"
@@ -942,7 +960,7 @@ msgstr "Stworzyć NOWĄ ścieżkę dla %s i wstawić klatkę kluczową?"
#: tools/editor/animation_editor.cpp
msgid "Create %d NEW tracks and insert keys?"
-msgstr "Stworzyć NOWĄ ścieżkę i dodać klatkę kluczową?"
+msgstr "Utworzyć NOWĄ ścieżkę i dodać klatkę kluczową?"
#: tools/editor/animation_editor.cpp tools/editor/create_dialog.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -967,11 +985,11 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Change Anim Len"
-msgstr ""
+msgstr "Zmień długość animacji"
#: tools/editor/animation_editor.cpp
msgid "Change Anim Loop"
-msgstr ""
+msgstr "Zmień pętlę animacji"
#: tools/editor/animation_editor.cpp
msgid "Anim Create Typed Value Key"
@@ -979,7 +997,7 @@ msgstr ""
#: tools/editor/animation_editor.cpp
msgid "Anim Insert"
-msgstr ""
+msgstr "Wstaw animację"
#: tools/editor/animation_editor.cpp
msgid "Anim Scale Keys"
@@ -1091,7 +1109,7 @@ msgstr "Wyczyść wszystkie animacje"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up Animation(s) (NO UNDO!)"
-msgstr "Oczyść Animacje (NIE MOŻNA COFNĄĆ!)"
+msgstr "Oczyść animacje (NIE MOŻNA COFNĄĆ!)"
#: tools/editor/animation_editor.cpp
msgid "Clean-Up"
@@ -1111,7 +1129,8 @@ msgstr "Zmień Wartość Tablicy"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Szukaj:"
@@ -1135,7 +1154,7 @@ msgstr "Wszystko"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Site:"
-msgstr ""
+msgstr "Źródło:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Support.."
@@ -1269,7 +1288,7 @@ msgstr "Oddal"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Wyzeruj przybliżenie"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1316,7 +1335,7 @@ msgstr "Ścieżka do węzła:"
#: tools/editor/connections_dialog.cpp
msgid "Make Function"
-msgstr "Stwórz Funkcję"
+msgstr "Utwórz funkcję"
#: tools/editor/connections_dialog.cpp
#, fuzzy
@@ -1341,7 +1360,7 @@ msgstr "Połączony sygnał:"
#: tools/editor/connections_dialog.cpp
msgid "Create Subscription"
-msgstr "Utwórz Subskrypcje"
+msgstr "Utwórz subskrypcje"
#: tools/editor/connections_dialog.cpp
msgid "Connect.."
@@ -1358,13 +1377,19 @@ msgstr "Sygnały"
#: tools/editor/create_dialog.cpp
msgid "Create New"
-msgstr "Stwórz nowy"
+msgstr "Utwórz nowy"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Pasujące:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Opis:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Znajdź i zamień:"
@@ -1396,7 +1421,7 @@ msgstr "Zasoby"
#: tools/editor/dependency_editor.cpp tools/editor/editor_autoload_settings.cpp
#: tools/editor/project_manager.cpp tools/editor/project_settings.cpp
msgid "Path"
-msgstr "Scieżka"
+msgstr "Ścieżka"
#: tools/editor/dependency_editor.cpp
msgid "Dependencies:"
@@ -1469,7 +1494,7 @@ msgstr "Zasoby bez jawnych właścicieli:"
#: tools/editor/dependency_editor.cpp tools/editor/editor_node.cpp
msgid "Orphan Resource Explorer"
-msgstr ""
+msgstr "Eksplorator osieroconych zasobów"
#: tools/editor/dependency_editor.cpp
msgid "Delete selected files?"
@@ -1520,12 +1545,10 @@ msgid "Add AutoLoad"
msgstr "Dodaj AutoLoad"
#: tools/editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Autoload '%s' already exists!"
msgstr "Autoload '%s' już istnieje!"
#: tools/editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Rename Autoload"
msgstr "Zmień nazwę Autoload"
@@ -1606,7 +1629,7 @@ msgstr "Odśwież"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Hidden Files"
-msgstr "Pokaż ukryte pliki"
+msgstr "Przełącz ukryte pliki"
#: tools/editor/editor_file_dialog.cpp
msgid "Toggle Favorite"
@@ -1622,11 +1645,11 @@ msgstr ""
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Up"
-msgstr "Przesuń Ulubiony w Górę"
+msgstr "Przesuń Ulubiony w górę"
#: tools/editor/editor_file_dialog.cpp
msgid "Move Favorite Down"
-msgstr "Przesuń Ulubiony w Dół"
+msgstr "Przesuń Ulubiony w dół"
#: tools/editor/editor_file_dialog.cpp tools/editor/filesystem_dock.cpp
msgid "Favorites:"
@@ -1642,7 +1665,7 @@ msgstr "Podgląd:"
#: tools/editor/editor_file_system.cpp
msgid "ScanSources"
-msgstr "Przeszukaj Źródła"
+msgstr "Przeszukaj źródła"
#: tools/editor/editor_help.cpp tools/editor/plugins/script_editor_plugin.cpp
msgid "Search Help"
@@ -1679,23 +1702,19 @@ msgstr "Metody Publiczne:"
#: tools/editor/editor_help.cpp
msgid "GUI Theme Items:"
-msgstr "Elementy Tematu GUI:"
+msgstr "Elementy motywu GUI:"
#: tools/editor/editor_help.cpp
msgid "Constants:"
msgstr "Stałe:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Opis:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Opis Metody:"
#: tools/editor/editor_help.cpp
msgid "Search Text"
-msgstr "Wyszukaj w tekscie"
+msgstr "Wyszukaj w tekście"
#: tools/editor/editor_import_export.cpp
msgid "Added:"
@@ -1731,7 +1750,7 @@ msgstr "Konfigurowanie .."
#: tools/editor/editor_log.cpp
msgid " Output:"
-msgstr " Wyjście:"
+msgstr " Konsola:"
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Importing"
@@ -1754,7 +1773,6 @@ msgstr "Błąd podczas zapisu zasobu!"
#: tools/editor/editor_node.cpp
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/resources_dock.cpp
-#, fuzzy
msgid "Save Resource As.."
msgstr "Zapisz zasób jako..."
@@ -1822,21 +1840,20 @@ msgid "Loading Export Templates"
msgstr "Ładowanie szablonów eksportu"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Error trying to save layout!"
-msgstr "Błąd podczas zapisu layoutu"
+msgstr "Błąd podczas zapisu layoutu!"
#: tools/editor/editor_node.cpp
msgid "Default editor layout overridden."
-msgstr "Domyślny układ edytora został nadpisany."
+msgstr "Domyślny layout edytora został nadpisany."
#: tools/editor/editor_node.cpp
msgid "Layout name not found!"
-msgstr "Nie znaleziono nazwy układu!"
+msgstr "Nie znaleziono nazwy layoutu!"
#: tools/editor/editor_node.cpp
msgid "Restored default layout to base settings."
-msgstr "Przywrócono domyślny układ do ustawień bazowych."
+msgstr "Przywrócono domyślny layout do ustawień bazowych."
#: tools/editor/editor_node.cpp
msgid "Copy Params"
@@ -1990,7 +2007,7 @@ msgid ""
"Open Project Manager? \n"
"(Unsaved changes will be lost)"
msgstr ""
-"Otworzyć menedżer projektów?\n"
+"Otworzyć Menedżer Projektów?\n"
"(Niezapisane zmiany zostaną utracone)"
#: tools/editor/editor_node.cpp
@@ -2021,11 +2038,11 @@ msgstr "Scena '%s' ma niespełnione zależności:"
#: tools/editor/editor_node.cpp
msgid "Save Layout"
-msgstr "Zapisz Układ"
+msgstr "Zapisz layout"
#: tools/editor/editor_node.cpp
msgid "Delete Layout"
-msgstr "Usuń Układ"
+msgstr "Usuń layout"
#: tools/editor/editor_node.cpp tools/editor/project_export.cpp
msgid "Default"
@@ -2074,35 +2091,35 @@ msgstr "Operacja na plikach sceny."
#: tools/editor/editor_node.cpp
msgid "New Scene"
-msgstr "Nowa Scena"
+msgstr "Nowa scena"
#: tools/editor/editor_node.cpp
msgid "New Inherited Scene.."
-msgstr "Nowa Odziedziczona Scena.."
+msgstr "Nowa odziedziczona scena.."
#: tools/editor/editor_node.cpp
msgid "Open Scene.."
-msgstr "Otwórz Scene.."
+msgstr "Otwórz scenę.."
#: tools/editor/editor_node.cpp
msgid "Save Scene"
-msgstr "Zapisz Scene"
+msgstr "Zapisz scenę"
#: tools/editor/editor_node.cpp
msgid "Save all Scenes"
-msgstr "Zapisz wszystkie Sceny"
+msgstr "Zapisz wszystkie sceny"
#: tools/editor/editor_node.cpp
msgid "Close Scene"
-msgstr "Zamknij Scene"
+msgstr "Zamknij scenę"
#: tools/editor/editor_node.cpp
msgid "Close Goto Prev. Scene"
-msgstr "Zamknij i wróć do poprzedniej sceny"
+msgstr "Zamknij i przejdź do poprzedniej sceny"
#: tools/editor/editor_node.cpp
msgid "Open Recent"
-msgstr "Ostatnio Otwierane"
+msgstr "Ostatnio otwierane"
#: tools/editor/editor_node.cpp
msgid "Quick Filter Files.."
@@ -2110,7 +2127,7 @@ msgstr "Szybkie filtry plików.."
#: tools/editor/editor_node.cpp
msgid "Convert To.."
-msgstr "Konwertuje Na.."
+msgstr "Konwertuje na.."
#: tools/editor/editor_node.cpp
msgid "Translatable Strings.."
@@ -2127,15 +2144,15 @@ msgstr "TileSet..."
#: tools/editor/editor_node.cpp tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Redo"
-msgstr ""
+msgstr "Ponów"
#: tools/editor/editor_node.cpp
msgid "Run Script"
-msgstr "Uruchom Skrypt"
+msgstr "Uruchom skrypt"
#: tools/editor/editor_node.cpp
msgid "Project Settings"
-msgstr "Ustawienia Projektu"
+msgstr "Ustawienia projektu"
#: tools/editor/editor_node.cpp
msgid "Revert Scene"
@@ -2188,11 +2205,11 @@ msgstr "Uruchom"
#: tools/editor/editor_node.cpp
msgid "Pause the scene"
-msgstr "Pauzuj scenę"
+msgstr "Zapauzuj scenę"
#: tools/editor/editor_node.cpp
msgid "Pause Scene"
-msgstr "Pauzuj scenę"
+msgstr "Zapauzuj scenę"
#: tools/editor/editor_node.cpp
msgid "Stop the scene."
@@ -2225,7 +2242,7 @@ msgstr "Opcje debugowania"
#: tools/editor/editor_node.cpp
msgid "Deploy with Remote Debug"
-msgstr "Uruchom z użyciem Zdalnego Debugowania"
+msgstr "Uruchom z użyciem zdalnego debugowania"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2233,7 +2250,7 @@ msgid ""
"connect to the IP of this computer in order to be debugged."
msgstr ""
"Podczas eksportu lub uruchomienia aplikacja wynikowa spróbuje połączyć się z "
-"adresem IP tego komputera w celu zdebugowania."
+"adresem IP tego komputera w celu debugowania."
#: tools/editor/editor_node.cpp
msgid "Small Deploy with Network FS"
@@ -2248,7 +2265,7 @@ msgid ""
"On Android, deploy will use the USB cable for faster performance. This "
"option speeds up testing for games with a large footprint."
msgstr ""
-"Gdy ta opcja jest zaznaczona, eksportowanie stworzy jak najmniejszy plik "
+"Gdy ta opcja jest zaznaczona, eksportowanie utworzy jak najmniejszy plik "
"wykonywalny.\n"
"System plików będzie udostępniony przez ten edytor poprzez sieć.\n"
"Na Androidzie eksport użyje kabla USB dla lepszej wydajności. Opcja ta "
@@ -2268,7 +2285,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Visible Navigation"
-msgstr "Nawigacja Widoczna"
+msgstr "Widoczna nawigacja"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2313,11 +2330,11 @@ msgstr "Ustawienia"
#: tools/editor/editor_node.cpp tools/editor/settings_config_dialog.cpp
msgid "Editor Settings"
-msgstr "Ustawienia Edytora"
+msgstr "Ustawienia edytora"
#: tools/editor/editor_node.cpp
msgid "Editor Layout"
-msgstr "Układ Edytora"
+msgstr "Layout edytora"
#: tools/editor/editor_node.cpp
msgid "Install Export Templates"
@@ -2349,7 +2366,7 @@ msgstr "Inspektor"
#: tools/editor/editor_node.cpp
msgid "Create a new resource in memory and edit it."
-msgstr "Stwórz nowy zasób wewnątrz pamięci i edytuj go."
+msgstr "Utwórz nowy zasób wewnątrz pamięci i edytuj go."
#: tools/editor/editor_node.cpp
msgid "Load an existing resource from disk and edit it."
@@ -2385,7 +2402,7 @@ msgstr "System plików"
#: tools/editor/editor_node.cpp
msgid "Output"
-msgstr "Wyjście"
+msgstr "Konsola"
#: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp
msgid "Re-Import"
@@ -2433,7 +2450,7 @@ msgstr "Wczytaj błędy"
#: tools/editor/editor_plugin_settings.cpp
msgid "Installed Plugins:"
-msgstr "Zainstalowane Wtyczki:"
+msgstr "Zainstalowane wtyczki:"
#: tools/editor/editor_plugin_settings.cpp
msgid "Version:"
@@ -2456,7 +2473,6 @@ msgid "Start Profiling"
msgstr "Rozpocznij profilowanie"
#: tools/editor/editor_profiler.cpp
-#, fuzzy
msgid "Measure:"
msgstr "Zmierzono:"
@@ -2519,7 +2535,7 @@ msgstr "Edytowana scena już istnieje."
#: tools/editor/editor_run_script.cpp
msgid "Couldn't instance script:"
-msgstr "Nie udało się stworzyć instancji skryptu:"
+msgstr "Nie udało się utworzyć instancji skryptu:"
#: tools/editor/editor_run_script.cpp
msgid "Did you forget the 'tool' keyword?"
@@ -2543,11 +2559,11 @@ msgstr "Wybierz węzły do importu"
#: tools/editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr "Scieżka Sceny:"
+msgstr "Ścieżka sceny:"
#: tools/editor/editor_sub_scene.cpp
msgid "Import From Node:"
-msgstr "Zaimportuj z Węzła:"
+msgstr "Zaimportuj z węzła:"
#: tools/editor/file_type_cache.cpp
msgid "Can't open file_type_cache.cch for writing, not saving file type cache!"
@@ -2560,7 +2576,6 @@ msgid "Same source and destination files, doing nothing."
msgstr ""
#: tools/editor/filesystem_dock.cpp
-#, fuzzy
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."
@@ -2627,17 +2642,16 @@ msgid "Next Directory"
msgstr "Następny folder"
#: tools/editor/filesystem_dock.cpp
-#, fuzzy
msgid "Re-Scan Filesystem"
msgstr "Przeskanuj system plików ponownie"
#: tools/editor/filesystem_dock.cpp
msgid "Toggle folder status as Favorite"
-msgstr "Ustaw folder jako Ulubiony"
+msgstr "Ustaw folder jako ulubiony"
#: tools/editor/filesystem_dock.cpp
msgid "Instance the selected scene(s) as child of the selected node."
-msgstr "Stwórz instancje wybranej sceny/scen jako dziecko wybranego węzła."
+msgstr "Utwórz instancje wybranej sceny/scen jako dziecko wybranego węzła."
#: tools/editor/filesystem_dock.cpp
msgid "Move"
@@ -2684,12 +2698,12 @@ msgstr "Ścieżka zapisu jest pusta!"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
msgid "Import BitMasks"
-msgstr ""
+msgstr "Importuj BitMasks"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture(s):"
-msgstr "Źródłowe Tekstury:"
+msgstr "Źródło tekstury:"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
@@ -2698,7 +2712,7 @@ msgstr "Źródłowe Tekstury:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Target Path:"
-msgstr "Docelowa Ścieżka:"
+msgstr "Ścieżka docelowa:"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
@@ -2711,7 +2725,7 @@ msgstr "Akceptuj"
#: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp
msgid "Bit Mask"
-msgstr ""
+msgstr "BitMask"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "No source font file!"
@@ -2739,7 +2753,7 @@ msgstr "Nie udało się zapisać czcionki."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Source Font:"
-msgstr "Źródłowa czcionka:"
+msgstr "Źródło czcionki:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Source Font Size:"
@@ -2750,9 +2764,8 @@ msgid "Dest Resource:"
msgstr "Wielkość docelowa czcionki:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
-#, fuzzy
msgid "The quick brown fox jumps over the lazy dog."
-msgstr "Zżółć gęślą jaźń."
+msgstr "ŻżŹźĆćŃńĄąŁłĘęÓó."
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Test:"
@@ -2767,7 +2780,7 @@ msgstr "Opcje:"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid "Font Import"
-msgstr "Import Czcionki"
+msgstr "Import czcionki"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
msgid ""
@@ -2798,7 +2811,7 @@ msgstr "Importuj Mesh"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
msgid "Source Mesh(es):"
-msgstr "Meshe źródłowe:"
+msgstr "Źródło Mesh:"
#: tools/editor/io_plugins/editor_mesh_import_plugin.cpp
#: tools/editor/plugins/mesh_instance_editor_plugin.cpp
@@ -2811,7 +2824,7 @@ msgstr "Powierzchnia %d"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "No samples to import!"
-msgstr ""
+msgstr "Brak sampli do importu!"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Import Audio Samples"
@@ -2819,7 +2832,7 @@ msgstr "Importuj pliki dźwiękowe"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Source Sample(s):"
-msgstr "Dźwięki źródłowe:"
+msgstr "Źródło dźwięku:"
#: tools/editor/io_plugins/editor_sample_import_plugin.cpp
msgid "Audio Sample"
@@ -2827,11 +2840,11 @@ msgstr "Dźwięk"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "New Clip"
-msgstr ""
+msgstr "Nowy klip"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Animation Options"
-msgstr "Opcje Animacji"
+msgstr "Opcje animacji"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Flags"
@@ -2843,15 +2856,15 @@ msgstr ""
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Optimizer"
-msgstr ""
+msgstr "Optymalizator"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Linear Error"
-msgstr ""
+msgstr "Maksymalny błąd liniowy"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Angular Error"
-msgstr ""
+msgstr "Maksymalny błąd kątowy"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Max Angle"
@@ -2888,7 +2901,7 @@ msgstr "Nie udało się wczytać skryptu po imporcie."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Invalid/broken script for post-import."
-msgstr ""
+msgstr "Niepoprawny/uszkodzony skrypt post-importu."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Error importing scene."
@@ -2900,7 +2913,7 @@ msgstr "Zaimportuj Scene 3D"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Source Scene:"
-msgstr "Źródłowa Scena:"
+msgstr "Scena źródłowa:"
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Same as Target Scene"
@@ -2988,7 +3001,7 @@ msgstr "Zapisywanie.."
#: tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "3D Scene Animation"
-msgstr "Scena Animacji 3D"
+msgstr "Scena animacji 3D"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Uncompressed"
@@ -3064,15 +3077,15 @@ msgstr "Bazowa tekstura \"Atlas'u\""
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture(s)"
-msgstr "Źródłowe Tekstury"
+msgstr "Tekstura(y) źródłowe"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for 2D"
-msgstr ""
+msgstr "Importuj tekstury dla 2D"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures for 3D"
-msgstr ""
+msgstr "Importuj tekstury dla 3D"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Import Textures"
@@ -3144,11 +3157,11 @@ msgstr "Nie można załadować obrazu:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Converting Images"
-msgstr "Konwersja Obrazów"
+msgstr "Konwersja obrazków"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Cropping Images"
-msgstr "Przycinanie Obrazów"
+msgstr "Przycinanie obrazków"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Blitting Images"
@@ -3168,7 +3181,7 @@ msgstr "Wadliwe źródło!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Invalid translation source!"
-msgstr ""
+msgstr "Nieprawidłowe źródło tłumaczenia!"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Column"
@@ -3205,7 +3218,7 @@ msgstr "Źródłowy CSV:"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Ignore First Row"
-msgstr "Ignoruj Pierwszy Wiersz"
+msgstr "Ignoruj pierwszy wiersz"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Compress"
@@ -3213,7 +3226,7 @@ msgstr "Skompresuj"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Add to Project (engine.cfg)"
-msgstr "Dodaj do Projektu (engine.cfg)"
+msgstr "Dodaj do projektu (engine.cfg)"
#: tools/editor/io_plugins/editor_translation_import_plugin.cpp
msgid "Import Languages:"
@@ -3241,24 +3254,24 @@ msgstr "Wybierz węzeł do edycji sygnałów i grup."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Toggle Autoplay"
-msgstr "Uruchom automatycznie"
+msgstr "Ustaw automatycznie"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "New Animation Name:"
-msgstr "Nowa Nazwa Animacji:"
+msgstr "Nowa nazwa animacji:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr "Nowa Animacja"
+msgstr "Nowa animacja"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr "Zmień Nazwę Animacji:"
+msgstr "Zmień nazwę animacji:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr "Usuń Animację"
+msgstr "Usuń animację"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
@@ -3271,12 +3284,12 @@ msgstr "BŁĄD: animacja o takiej nazwie już istnieje!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr "Zmień nazwę Animacji"
+msgstr "Zmień nazwę animacji"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr "Dodaj Animację"
+msgstr "Dodaj animację"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
@@ -3288,11 +3301,11 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr "Wczytaj Animację"
+msgstr "Wczytaj animację"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr "Zduplikuj Animacje"
+msgstr "Duplikuj animacje"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
@@ -3304,11 +3317,11 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Pasted Animation"
-msgstr "Wklejona Animacja"
+msgstr "Wklejona animacja"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Paste Animation"
-msgstr "Wklej Animację"
+msgstr "Wklej animację"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
@@ -3316,7 +3329,7 @@ msgstr "BŁĄD: Brak animacji do edycji!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
-msgstr ""
+msgstr "Odtwórz zaznaczoną animację od tyłu z aktualnej poz. (A)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from end. (Shift+A)"
@@ -3344,11 +3357,11 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
-msgstr ""
+msgstr "Stwórz nową animację."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Load animation from disk."
-msgstr ""
+msgstr "Załaduj animację z dysku."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Load an animation from disk."
@@ -3364,7 +3377,7 @@ msgstr "Zapisz jako"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
-msgstr ""
+msgstr "Wyświetl listę animacji w odtwarzaczu."
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Autoplay on Load"
@@ -3376,19 +3389,19 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Tools"
-msgstr "Narzędzia do Animacji"
+msgstr "Narzędzia do animacji"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Copy Animation"
-msgstr "Skopiuj Animacje"
+msgstr "Skopiuj animacje"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Create New Animation"
-msgstr "Nowa Animacja"
+msgstr "Utwórz nową animację"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Animation Name:"
-msgstr "Nazwa Animacji:"
+msgstr "Nazwa animacji:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
@@ -3438,7 +3451,7 @@ msgstr ""
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Mix"
-msgstr ""
+msgstr "Mix"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Auto Restart:"
@@ -3475,7 +3488,7 @@ msgstr ""
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "X-Fade Time (s):"
-msgstr ""
+msgstr "Czas X-Fade (s):"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Current:"
@@ -3547,7 +3560,7 @@ msgstr ""
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
-msgstr "Zaimportuj Animacje.."
+msgstr "Zaimportuj animacje.."
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Edit Node Filters"
@@ -3669,9 +3682,8 @@ msgid "Paste Pose"
msgstr "Wklej Pozę"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "Zaznaczenie (Q)"
+msgstr "Tryb zaznaczenia"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3693,14 +3705,12 @@ msgid "Alt+RMB: Depth list selection"
msgstr ""
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "Tryb Przesuwania (W)"
+msgstr "Tryb przesuwania"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate Mode"
-msgstr "Tryb Rotacji (E)"
+msgstr "Tryb Rotacji"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -3719,11 +3729,11 @@ msgstr "Tryb przesuwania"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Lock the selected object in place (can't be moved)."
-msgstr "Zablokuj wybrany obiekt w miejscu (nie można nim poruszyć)."
+msgstr "Zablokuj wybrany obiekt w miejscu (nie można go przesuwać)."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Unlock the selected object (can be moved)."
-msgstr "Odblokuj wybrany obiekt (można nim poruszyć)."
+msgstr "Odblokuj wybrany obiekt (można go przesuwać)."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Makes sure the object's children are not selectable."
@@ -3736,7 +3746,7 @@ msgstr "Odblokuj selekcję węzłów podrzędnych."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Use Snap"
-msgstr "Użyj Przyciągania"
+msgstr "Użyj przyciągania"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -3770,7 +3780,7 @@ msgstr "Szkielet.."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make Bones"
-msgstr "Stwórz Kości"
+msgstr "Utwórz Kości"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear Bones"
@@ -3778,7 +3788,7 @@ msgstr "Wyczyść Kości"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Make IK Chain"
-msgstr "Stwórz Łańcuch IK"
+msgstr "Utwórz Łańcuch IK"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Clear IK Chain"
@@ -3795,11 +3805,11 @@ msgstr "Wyzeruj przybliżenie"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Set.."
-msgstr ""
+msgstr "Ustaw przybliżenie..."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Center Selection"
-msgstr "Środek zaznaczenia"
+msgstr "Wyśrodkowywanie na zaznaczeniu"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Frame Selection"
@@ -3842,7 +3852,7 @@ msgstr ""
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create Poly"
-msgstr "Stwórz Polygon"
+msgstr "Utwórz Polygon"
#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/collision_polygon_editor_plugin.cpp
@@ -3891,50 +3901,50 @@ msgstr ""
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Thumbnail.."
-msgstr ""
+msgstr "Miniatura.."
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove item %d?"
-msgstr ""
+msgstr "Usuń element %d?"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Add Item"
-msgstr ""
+msgstr "Dodaj element"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Remove Selected Item"
-msgstr ""
+msgstr "Usuń zaznaczony element"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Import from Scene"
-msgstr ""
+msgstr "Import ze sceny"
#: tools/editor/plugins/cube_grid_theme_editor_plugin.cpp
msgid "Update from Scene"
-msgstr ""
+msgstr "Aktualizuj ze sceny"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Item %d"
-msgstr ""
+msgstr "Element %d"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Items"
-msgstr ""
+msgstr "Elementy"
#: tools/editor/plugins/item_list_editor_plugin.cpp
msgid "Item List Editor"
-msgstr ""
+msgstr "Edytor listy elementów"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
msgid "Create Occluder Polygon"
-msgstr ""
+msgstr "Stwórz Occluder Polygon"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
msgid "Edit existing polygon:"
-msgstr ""
+msgstr "Edytuj istniejący polygon:"
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
#: tools/editor/plugins/navigation_polygon_editor_plugin.cpp
@@ -4173,7 +4183,7 @@ msgstr ""
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Generate AABB"
-msgstr ""
+msgstr "Generuj AABB"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Create Emitter From Mesh"
@@ -4205,7 +4215,7 @@ msgstr "Powierzchnia"
#: tools/editor/plugins/particles_editor_plugin.cpp
msgid "Volume"
-msgstr ""
+msgstr "Głośność"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
msgid "Remove Point from Curve"
@@ -4270,7 +4280,7 @@ msgstr "Usuń Punkt"
#: tools/editor/plugins/path_2d_editor_plugin.cpp
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Close Curve"
-msgstr "Zamknij Krzywą"
+msgstr "Zamknij krzywą"
#: tools/editor/plugins/path_editor_plugin.cpp
msgid "Curve Point #"
@@ -4298,7 +4308,7 @@ msgstr "Usuń punkt ścieżki"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Create UV Map"
-msgstr "Stwórz Mapę UV"
+msgstr "Utwórz Mapę UV"
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
msgid "Transform UV Map"
@@ -4376,7 +4386,7 @@ msgstr "Zmień nazwę Zasobu"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Delete Resource"
-msgstr "Usuń Zasób"
+msgstr "Usuń zasób"
#: tools/editor/plugins/resource_preloader_editor_plugin.cpp
msgid "Resource clipboard is empty!"
@@ -4417,24 +4427,24 @@ msgstr ""
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "16 Bits"
-msgstr ""
+msgstr "16 Bits"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "8 Bits"
-msgstr ""
+msgstr "8 Bits"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Stereo"
-msgstr ""
+msgstr "Stereo"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Mono"
-msgstr ""
+msgstr "Mono"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
msgid "Format"
-msgstr ""
+msgstr "Format"
#: tools/editor/plugins/sample_library_editor_plugin.cpp
msgid "Pitch"
@@ -4442,7 +4452,7 @@ msgstr "Wysokość"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Error while saving theme"
-msgstr "Błąd podczas zapisywania tematu"
+msgstr "Błąd podczas zapisywania motywu"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Error saving"
@@ -4450,7 +4460,7 @@ msgstr "Błąd zapisywania"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Error importing theme"
-msgstr "Błąd importowania tematu"
+msgstr "Błąd importowania motywu"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Error importing"
@@ -4458,11 +4468,11 @@ msgstr "Błąd importowania"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Import Theme"
-msgstr "Zaimportuj temat"
+msgstr "Zaimportuj motyw"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As.."
-msgstr "Zapisz Temat Jako.."
+msgstr "Zapisz motyw jako.."
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Next script"
@@ -4484,7 +4494,7 @@ msgstr "Nowy"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save All"
-msgstr "Zapisz Wszystko"
+msgstr "Zapisz wszystko"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Soft Reload Script"
@@ -4500,20 +4510,19 @@ msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Reload Theme"
-msgstr "Przeładuj Temat"
+msgstr "Przeładuj motyw"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save Theme"
-msgstr "Zapisz Temat"
+msgstr "Zapisz motyw"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Save Theme As"
-msgstr "Zapisz Temat Jako"
+msgstr "Zapisz motyw jako"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "Zamknij Scene"
+msgstr "Zamknij pliki pomocy"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -4525,7 +4534,7 @@ msgstr "Znajdź.."
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Find Next"
-msgstr "Znajdź Następny"
+msgstr "Znajdź następny"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Debug"
@@ -4553,7 +4562,7 @@ msgstr "Kontynuuj"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Keep Debugger Open"
-msgstr ""
+msgstr "Pozostaw Debugger otwarty"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Window"
@@ -4561,11 +4570,11 @@ msgstr "Okno"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Move Left"
-msgstr "Przesuń w Lewo"
+msgstr "Przesuń w lewo"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Move Right"
-msgstr "Przesuń w Prawo"
+msgstr "Przesuń w prawo"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Tutorials"
@@ -4589,11 +4598,11 @@ msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Go to previous edited document."
-msgstr "Idź do poprzednio edytowanego dokumentu."
+msgstr "Przejdź do poprzednio edytowanego dokumentu."
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Go to next edited document."
-msgstr ""
+msgstr "Przejdź do następnego edytowanego dokumentu."
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Create Script"
@@ -4625,23 +4634,23 @@ msgstr ""
#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
msgid "Move Up"
-msgstr "Przesuń w Górę"
+msgstr "Przesuń w górę"
#: tools/editor/plugins/script_text_editor.cpp tools/editor/scene_tree_dock.cpp
msgid "Move Down"
-msgstr "Przesuń w Dół"
+msgstr "Przesuń w dół"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Indent Left"
-msgstr ""
+msgstr "Wcięcie w lewo"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Indent Right"
-msgstr ""
+msgstr "Wcięcie w prawo"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Comment"
-msgstr ""
+msgstr "Ustaw komentarz"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Clone Down"
@@ -4661,20 +4670,20 @@ msgstr ""
#: tools/editor/plugins/script_text_editor.cpp
msgid "Remove All Breakpoints"
-msgstr ""
+msgstr "Usuń wszystkie pułapki"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Goto Next Breakpoint"
-msgstr ""
+msgstr "Przejdź do następnej pułapki"
#: tools/editor/plugins/script_text_editor.cpp
msgid "Goto Previous Breakpoint"
-msgstr ""
+msgstr "Przejdź do poprzedniej pułapki"
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Find Previous"
-msgstr "Znajdź Poprzedni"
+msgstr "Znajdź poprzedni"
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
@@ -4683,16 +4692,16 @@ msgstr "Zamień.."
#: tools/editor/plugins/script_text_editor.cpp
msgid "Goto Function.."
-msgstr "Idź do Funkcji.."
+msgstr "Przejdź do funkcji.."
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Goto Line.."
-msgstr "Idź do Lini.."
+msgstr "Przejdź do linii.."
#: tools/editor/plugins/script_text_editor.cpp
msgid "Contextual Help"
-msgstr "Pomoc Kontekstowa"
+msgstr "Pomoc kontekstowa"
#: tools/editor/plugins/shader_editor_plugin.cpp
msgid "Vertex"
@@ -4776,7 +4785,7 @@ msgstr ""
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Change Comment"
-msgstr ""
+msgstr "Zmień komentarz"
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Add/Remove to Color Ramp"
@@ -4804,7 +4813,7 @@ msgstr ""
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Remove Shader Graph Node"
-msgstr ""
+msgstr "Usuń węzeł Shader Graph"
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Move Shader Graph Node"
@@ -4816,7 +4825,7 @@ msgstr ""
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Delete Shader Graph Node(s)"
-msgstr ""
+msgstr "Usuń węzeł(y) Shader Graph"
#: tools/editor/plugins/shader_graph_editor_plugin.cpp
msgid "Error: Cyclic Connection Link"
@@ -4996,7 +5005,7 @@ msgstr ""
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Insert Animation Key"
-msgstr ""
+msgstr "Wstaw klucz animacji"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Focus Selection"
@@ -5024,7 +5033,7 @@ msgstr ""
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Use Default sRGB"
-msgstr ""
+msgstr "Użyj domyślnie sRGB"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "1 Viewport"
@@ -5124,7 +5133,7 @@ msgstr ""
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Rotate (deg.):"
-msgstr ""
+msgstr "Obrót (stopnie):"
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Scale (ratio):"
@@ -5160,7 +5169,7 @@ msgstr ""
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Empty"
-msgstr ""
+msgstr "Dodaj pusty"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation Loop"
@@ -5168,19 +5177,19 @@ msgstr ""
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Change Animation FPS"
-msgstr ""
+msgstr "Zmień FPS animacji"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "(empty)"
-msgstr ""
+msgstr "(pusty)"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animations"
-msgstr ""
+msgstr "Animacje"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Speed (FPS):"
-msgstr ""
+msgstr "Prędkość (FPS):"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Animation Frames"
@@ -5188,11 +5197,11 @@ msgstr ""
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (Before)"
-msgstr ""
+msgstr "Dodaj pusty (wcześniej)"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Insert Empty (After)"
-msgstr ""
+msgstr "Dodaj pusty (później)"
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Up"
@@ -5212,7 +5221,7 @@ msgstr ""
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "<None>"
-msgstr ""
+msgstr "<żaden>"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Pixel Snap"
@@ -5232,7 +5241,7 @@ msgstr ""
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Step:"
-msgstr ""
+msgstr "Krok:"
#: tools/editor/plugins/texture_region_editor_plugin.cpp
msgid "Separation:"
@@ -5248,20 +5257,20 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Can't save theme to file:"
-msgstr ""
+msgstr "Nie mogę zapisać motywu do pliku:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add All Items"
-msgstr ""
+msgstr "Dodaj wszystkie elementy"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add All"
-msgstr ""
+msgstr "Dodaj wszystko"
#: tools/editor/plugins/theme_editor_plugin.cpp
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Remove Item"
-msgstr ""
+msgstr "Usuń element"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Add Class Items"
@@ -5273,7 +5282,7 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Template"
-msgstr ""
+msgstr "Utwórz pusty szablon"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Create Empty Editor Template"
@@ -5281,15 +5290,15 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio1"
-msgstr ""
+msgstr "CheckBox Radio1"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "CheckBox Radio2"
-msgstr ""
+msgstr "CheckBox Radio2"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Item"
-msgstr ""
+msgstr "Element"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Check Item"
@@ -5301,15 +5310,15 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Has"
-msgstr ""
+msgstr "Ma"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Many"
-msgstr ""
+msgstr "Wiele"
#: tools/editor/plugins/theme_editor_plugin.cpp tools/editor/project_export.cpp
msgid "Options"
-msgstr ""
+msgstr "Opcje"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Have,Many,Several,Options!"
@@ -5331,7 +5340,7 @@ msgstr ""
#: tools/editor/project_settings.cpp tools/editor/scene_tree_editor.cpp
#: tools/editor/script_editor_debugger.cpp
msgid "Type:"
-msgstr ""
+msgstr "Typ:"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Data Type:"
@@ -5339,15 +5348,15 @@ msgstr ""
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Icon"
-msgstr ""
+msgstr "Ikona"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Style"
-msgstr ""
+msgstr "Styl"
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Color"
-msgstr ""
+msgstr "Kolor"
#: tools/editor/plugins/tile_map_editor_plugin.cpp
msgid "Paint TileMap"
@@ -5416,28 +5425,28 @@ msgstr ""
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Item name or ID:"
-msgstr ""
+msgstr "Nazwa elementu lub ID:"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from scene?"
-msgstr ""
+msgstr "Utwórz ze sceny?"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from scene?"
-msgstr ""
+msgstr "Połącz ze sceny?"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Create from Scene"
-msgstr ""
+msgstr "Utwórz ze sceny"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
msgid "Merge from Scene"
-msgstr ""
+msgstr "Połącz ze sceny"
#: tools/editor/plugins/tile_set_editor_plugin.cpp
#: tools/editor/script_editor_debugger.cpp
msgid "Error"
-msgstr ""
+msgstr "Błąd"
#: tools/editor/project_export.cpp
msgid "Edit Script Options"
@@ -5445,11 +5454,11 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Please export outside the project folder!"
-msgstr ""
+msgstr "Eksportuj poza folderem projektu!"
#: tools/editor/project_export.cpp
msgid "Error exporting project!"
-msgstr ""
+msgstr "Błąd przy eksporcie projektu!"
#: tools/editor/project_export.cpp
msgid "Error writing the project PCK!"
@@ -5457,35 +5466,35 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "No exporter for platform '%s' yet."
-msgstr ""
+msgstr "Brak jeszcze eksportu dla platformy '%s'."
#: tools/editor/project_export.cpp
msgid "Include"
-msgstr ""
+msgstr "Zawiera"
#: tools/editor/project_export.cpp
msgid "Change Image Group"
-msgstr ""
+msgstr "Zmień grupę obrazków"
#: tools/editor/project_export.cpp
msgid "Group name can't be empty!"
-msgstr ""
+msgstr "Nazwa grupy nie może być pusta!"
#: tools/editor/project_export.cpp
msgid "Invalid character in group name!"
-msgstr ""
+msgstr "Nieprawidłowy znak w nazwie grupy!"
#: tools/editor/project_export.cpp
msgid "Group name already exists!"
-msgstr ""
+msgstr "Nazwa grupy już istnieje!"
#: tools/editor/project_export.cpp
msgid "Add Image Group"
-msgstr ""
+msgstr "Dodaj grupę obrazków"
#: tools/editor/project_export.cpp
msgid "Delete Image Group"
-msgstr ""
+msgstr "Usuń grupę obrazków"
#: tools/editor/project_export.cpp
msgid "Atlas Preview"
@@ -5493,19 +5502,19 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Project Export Settings"
-msgstr ""
+msgstr "Opcje eksportu projektu"
#: tools/editor/project_export.cpp
msgid "Target"
-msgstr ""
+msgstr "Cel"
#: tools/editor/project_export.cpp
msgid "Export to Platform"
-msgstr ""
+msgstr "Eksportuj na platformę"
#: tools/editor/project_export.cpp
msgid "Resources"
-msgstr ""
+msgstr "Zasoby"
#: tools/editor/project_export.cpp
msgid "Export selected resources (including dependencies)."
@@ -5513,23 +5522,23 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Export all resources in the project."
-msgstr ""
+msgstr "Eksportuj wszystkie zasoby w projekcie."
#: tools/editor/project_export.cpp
msgid "Export all files in the project directory."
-msgstr ""
+msgstr "Eksportuj wszystkie pliki w katalogu projektu."
#: tools/editor/project_export.cpp
msgid "Export Mode:"
-msgstr ""
+msgstr "Tryb eksportu:"
#: tools/editor/project_export.cpp
msgid "Resources to Export:"
-msgstr ""
+msgstr "Zasoby do eksportu:"
#: tools/editor/project_export.cpp
msgid "Action"
-msgstr ""
+msgstr "Akcja"
#: tools/editor/project_export.cpp
msgid ""
@@ -5546,7 +5555,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Images"
-msgstr ""
+msgstr "Obrazki"
#: tools/editor/project_export.cpp
msgid "Keep Original"
@@ -5562,7 +5571,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Convert Images (*.png):"
-msgstr ""
+msgstr "Konwertuj obrazki (*.png):"
#: tools/editor/project_export.cpp
msgid "Compress for Disk (Lossy) Quality:"
@@ -5570,19 +5579,19 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Shrink All Images:"
-msgstr ""
+msgstr "Zmniejsz wszystkie obrazki:"
#: tools/editor/project_export.cpp
msgid "Compress Formats:"
-msgstr ""
+msgstr "Format kompresji:"
#: tools/editor/project_export.cpp
msgid "Image Groups"
-msgstr ""
+msgstr "Grupy obrazków"
#: tools/editor/project_export.cpp
msgid "Groups:"
-msgstr ""
+msgstr "Grupy:"
#: tools/editor/project_export.cpp
msgid "Compress Disk"
@@ -5590,11 +5599,11 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Compress RAM"
-msgstr ""
+msgstr "Kompresja RAM"
#: tools/editor/project_export.cpp
msgid "Compress Mode:"
-msgstr ""
+msgstr "Tryb kompresji:"
#: tools/editor/project_export.cpp
msgid "Lossy Quality:"
@@ -5606,7 +5615,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Shrink By:"
-msgstr ""
+msgstr "Zmniejsz o:"
#: tools/editor/project_export.cpp
msgid "Preview Atlas"
@@ -5618,7 +5627,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Images:"
-msgstr ""
+msgstr "Obrazki:"
#: tools/editor/project_export.cpp
msgid "Select None"
@@ -5626,7 +5635,7 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Group"
-msgstr ""
+msgstr "Grupa"
#: tools/editor/project_export.cpp
msgid "Samples"
@@ -5638,11 +5647,11 @@ msgstr ""
#: tools/editor/project_export.cpp
msgid "Keep"
-msgstr ""
+msgstr "Bez zmian"
#: tools/editor/project_export.cpp
msgid "Compress (RAM - IMA-ADPCM)"
-msgstr ""
+msgstr "Kompresja (RAM - IMA-ADPCM)"
#: tools/editor/project_export.cpp
msgid "Sampling Rate Limit (Hz):"
@@ -5678,7 +5687,7 @@ msgstr "Zaszyfrowany (podaj klucz poniżej)"
#: tools/editor/project_export.cpp
msgid "Script Encryption Key (256-bits as hex):"
-msgstr "Klucz szyfrujący skrypty (256-bit jako hex):"
+msgstr "Klucz szyfrujący skryptu (256-bit jako hex):"
#: tools/editor/project_export.cpp
msgid "Export PCK/Zip"
@@ -5698,7 +5707,7 @@ msgstr "Eksport projektu"
#: tools/editor/project_export.cpp
msgid "Export Preset:"
-msgstr ""
+msgstr "Szablon eksportu:"
#: tools/editor/project_manager.cpp
msgid "Invalid project path, the path must exist!"
@@ -5722,7 +5731,7 @@ msgstr "Niepoprawna ścieżka projektu (zmienić cokolwiek?)."
#: tools/editor/project_manager.cpp
msgid "Couldn't create engine.cfg in project path."
-msgstr "Nie można było stworzyć engine.cfg w ścieżce projektu."
+msgstr "Nie można było utworzyć engine.cfg w ścieżce projektu."
#: tools/editor/project_manager.cpp
msgid "The following files failed extraction from package:"
@@ -5730,31 +5739,31 @@ msgstr ""
#: tools/editor/project_manager.cpp
msgid "Package Installed Successfully!"
-msgstr ""
+msgstr "Pakiet zastał zainstalowany poprawnie!"
#: tools/editor/project_manager.cpp
msgid "Import Existing Project"
-msgstr ""
+msgstr "Importuj istniejący projekt"
#: tools/editor/project_manager.cpp
msgid "Project Path (Must Exist):"
-msgstr "Ścieżka Projektu (musi istnieć):"
+msgstr "Ścieżka projektu (musi istnieć):"
#: tools/editor/project_manager.cpp
msgid "Project Name:"
-msgstr "Nazwa Projektu:"
+msgstr "Nazwa projektu:"
#: tools/editor/project_manager.cpp
msgid "Create New Project"
-msgstr "Stwórz nowy Projekt"
+msgstr "Utwórz nowy projekt"
#: tools/editor/project_manager.cpp
msgid "Project Path:"
-msgstr "Ścieżka do Projektu:"
+msgstr "Ścieżka do projektu:"
#: tools/editor/project_manager.cpp
msgid "Install Project:"
-msgstr "Zainstaluj Projekt:"
+msgstr "Zainstaluj projekt:"
#: tools/editor/project_manager.cpp
msgid "Install"
@@ -5766,7 +5775,7 @@ msgstr "Szukaj"
#: tools/editor/project_manager.cpp
msgid "New Game Project"
-msgstr "Nowy Projekt Gry"
+msgstr "Nowy projekt gry"
#: tools/editor/project_manager.cpp
msgid "That's a BINGO!"
@@ -5778,11 +5787,11 @@ msgstr "Projekt bez nazwy"
#: tools/editor/project_manager.cpp
msgid "Are you sure to open more than one project?"
-msgstr ""
+msgstr "Czy jesteś pewny że chcesz otworzyć więcej niż jeden projekt?"
#: tools/editor/project_manager.cpp
msgid "Are you sure to run more than one project?"
-msgstr ""
+msgstr "Czy jesteś pewny że chcesz uruchomić więcej niż jeden projekt?"
#: tools/editor/project_manager.cpp
msgid "Remove project from the list? (Folder contents will not be modified)"
@@ -5796,7 +5805,7 @@ msgstr ""
#: tools/editor/project_manager.cpp
msgid "Project Manager"
-msgstr "Menedżer projektu"
+msgstr "Menedżer projektów"
#: tools/editor/project_manager.cpp
msgid "Project List"
@@ -5811,13 +5820,12 @@ msgid "Scan"
msgstr "Skanuj"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Select a Folder to Scan"
-msgstr "Wybierz węzeł"
+msgstr "Wybierz folder do skanowania"
#: tools/editor/project_manager.cpp
msgid "New Project"
-msgstr "Nowy Projekt"
+msgstr "Nowy projekt"
#: tools/editor/project_manager.cpp
msgid "Exit"
@@ -5860,7 +5868,6 @@ msgid "Control+"
msgstr ""
#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
-#, fuzzy
msgid "Press a Key.."
msgstr "Naciśnij klawisz.."
@@ -5870,15 +5877,15 @@ msgstr ""
#: tools/editor/project_settings.cpp
msgid "Left Button"
-msgstr ""
+msgstr "Lewy guzik"
#: tools/editor/project_settings.cpp
msgid "Right Button"
-msgstr ""
+msgstr "Prawy guzik"
#: tools/editor/project_settings.cpp
msgid "Middle Button"
-msgstr ""
+msgstr "Środkowy guzik"
#: tools/editor/project_settings.cpp
msgid "Wheel Up Button"
@@ -5962,11 +5969,11 @@ msgstr ""
#: tools/editor/project_settings.cpp
msgid "Project Settings (engine.cfg)"
-msgstr "Ustawienia Projektu (engine.cfg)"
+msgstr "Ustawienia projektu (engine.cfg)"
#: tools/editor/project_settings.cpp tools/editor/settings_config_dialog.cpp
msgid "General"
-msgstr ""
+msgstr "Ogólny"
#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
msgid "Property:"
@@ -5974,11 +5981,11 @@ msgstr "Właściwość:"
#: tools/editor/project_settings.cpp
msgid "Del"
-msgstr ""
+msgstr "Usuń"
#: tools/editor/project_settings.cpp
msgid "Copy To Platform.."
-msgstr ""
+msgstr "Kopiuj na platformę..."
#: tools/editor/project_settings.cpp
msgid "Input Map"
@@ -5994,19 +6001,19 @@ msgstr "Urządzenie:"
#: tools/editor/project_settings.cpp
msgid "Index:"
-msgstr ""
+msgstr "Indeks:"
#: tools/editor/project_settings.cpp
msgid "Localization"
-msgstr ""
+msgstr "Lokalizacja"
#: tools/editor/project_settings.cpp
msgid "Translations"
-msgstr ""
+msgstr "Tłumaczenia"
#: tools/editor/project_settings.cpp
msgid "Translations:"
-msgstr ""
+msgstr "Tłumaczenia:"
#: tools/editor/project_settings.cpp
msgid "Add.."
@@ -6065,7 +6072,6 @@ msgid "File.."
msgstr "Plik.."
#: tools/editor/property_editor.cpp
-#, fuzzy
msgid "Dir.."
msgstr "Katalog.."
@@ -6109,6 +6115,16 @@ msgstr "Globalne"
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Zaznacz Punkty"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Tryb zaznaczenia"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6135,7 +6151,7 @@ msgstr ""
#: tools/editor/resources_dock.cpp
msgid "Create New Resource"
-msgstr "Stwórz nowy zasób"
+msgstr "Utwórz nowy zasób"
#: tools/editor/resources_dock.cpp
msgid "Open Resource"
@@ -6187,7 +6203,7 @@ msgstr ""
#: tools/editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
-msgstr ""
+msgstr "Błąd przy ładowaniu sceny z %s"
#: tools/editor/scene_tree_dock.cpp
msgid "Error instancing scene from %s"
@@ -6224,14 +6240,12 @@ msgid "Duplicate Node(s)"
msgstr "Duplikuj węzeł(y)"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete Node(s)?"
-msgstr "Usuń węzeł?"
+msgstr "Usuń węzeł(y)?"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "This operation can't be done without a scene."
-msgstr "Ta operacja nie może zostać zrobiona bez sceny."
+msgstr "Ta operacja nie może zostać wykonana bez sceny."
#: tools/editor/scene_tree_dock.cpp
msgid "This operation requires a single selected node."
@@ -6243,7 +6257,7 @@ msgstr ""
#: tools/editor/scene_tree_dock.cpp
msgid "Save New Scene As.."
-msgstr "Zapisz scene jako ..."
+msgstr "Zapisz nową scenę jako ..."
#: tools/editor/scene_tree_dock.cpp
msgid "Makes Sense!"
@@ -6258,9 +6272,8 @@ msgid "Can't operate on nodes the current scene inherits from!"
msgstr ""
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Remove Node(s)"
-msgstr "Usuń węzeł(ły)"
+msgstr "Usuń węzeł(y)"
#: tools/editor/scene_tree_dock.cpp
msgid "Create Node"
@@ -6294,11 +6307,11 @@ msgstr "Usuń węzeł (węzły)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add Child Node"
-msgstr "Dodaj węzeł dziecko"
+msgstr "Dodaj dziecko węzła"
#: tools/editor/scene_tree_dock.cpp
msgid "Instance Child Scene"
-msgstr ""
+msgstr "Instancjonuj dziecko sceny"
#: tools/editor/scene_tree_dock.cpp
msgid "Change Type"
@@ -6314,16 +6327,15 @@ msgstr "Dołącz ze sceny"
#: tools/editor/scene_tree_dock.cpp
msgid "Save Branch as Scene"
-msgstr "Zapisz gałąź jako scene"
+msgstr "Zapisz gałąź jako scenę"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "Proszę potwierdzić..."
+msgstr "Usuń (bez potwierdzenie)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
-msgstr "Dodaj/Stwórz nowy węzeł"
+msgstr "Dodaj/Utwórz nowy węzeł"
#: tools/editor/scene_tree_dock.cpp
msgid ""
@@ -6332,9 +6344,8 @@ msgid ""
msgstr ""
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Create a new script for the selected node."
-msgstr "Stwórz instancje wybranej sceny/scen jako dziecko wybranego węzła."
+msgstr "Utwórz nowy skrypt dla zaznaczonego węzła."
#: tools/editor/scene_tree_editor.cpp
msgid ""
@@ -6389,13 +6400,12 @@ msgid "Clear Inheritance"
msgstr "Wyczyść dziedziczenie"
#: tools/editor/scene_tree_editor.cpp
-#, fuzzy
msgid "Clear Inheritance? (No Undo!)"
msgstr "Wyczyścić dziedziczenie? (Nie można cofnąć!)"
#: tools/editor/scene_tree_editor.cpp
msgid "Clear!"
-msgstr ""
+msgstr "Czysto!"
#: tools/editor/scene_tree_editor.cpp
msgid "Select a Node"
@@ -6435,7 +6445,7 @@ msgstr "Niepoprawna ścieżka!"
#: tools/editor/script_create_dialog.cpp
msgid "Could not create script in filesystem."
-msgstr "Nie można było stworzyć skryptu w systemie plików."
+msgstr "Nie można było utworzyć skryptu w systemie plików."
#: tools/editor/script_create_dialog.cpp
msgid "Path is empty"
@@ -6463,7 +6473,7 @@ msgstr "Poprawna ścieżka"
#: tools/editor/script_create_dialog.cpp
msgid "Class Name:"
-msgstr "Nazwa Klasy:"
+msgstr "Nazwa klasy:"
#: tools/editor/script_create_dialog.cpp
msgid "Built-In Script"
@@ -6527,14 +6537,13 @@ msgstr "Śledzenie stosu (jeśli dotyczy):"
#: tools/editor/script_editor_debugger.cpp
msgid "Remote Inspector"
-msgstr ""
+msgstr "Zdalny inspektor"
#: tools/editor/script_editor_debugger.cpp
msgid "Live Scene Tree:"
msgstr ""
#: tools/editor/script_editor_debugger.cpp
-#, fuzzy
msgid "Remote Object Properties: "
msgstr "Właściwości zdalnego obiektu: "
@@ -6555,7 +6564,6 @@ msgid "Monitors"
msgstr "Monitory"
#: tools/editor/script_editor_debugger.cpp
-#, fuzzy
msgid "List of Video Memory Usage by Resource:"
msgstr "Zużycie pamięci wideo według zasobów:"
@@ -6624,17 +6632,14 @@ msgid "Change Box Shape Extents"
msgstr "Zmień rozmiar Box Shape"
#: tools/editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Change Capsule Shape Radius"
msgstr "Zmień średnicę Capsule Shape"
#: tools/editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Change Capsule Shape Height"
msgstr "Zmień wysokośc Capsule Shape"
#: tools/editor/spatial_editor_gizmos.cpp
-#, fuzzy
msgid "Change Ray Shape Length"
msgstr "Zmień długość Ray Shape"
diff --git a/tools/translations/pt_BR.po b/tools/translations/pt_BR.po
index 14b2d01b27..0b80ed2b0e 100644
--- a/tools/translations/pt_BR.po
+++ b/tools/translations/pt_BR.po
@@ -2,6 +2,7 @@
# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
# This file is distributed under the same license as the Godot source code.
#
+# António Sarmento <antonio.luis.sarmento@gmail.com>, 2016.
# George Marques <george@gmarqu.es>, 2016.
# Joaquim Ferreira <joaquimferreira1996@bol.com.br>, 2016.
#
@@ -9,8 +10,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: 2016-05-30\n"
-"PO-Revision-Date: 2016-07-15 15:36+0000\n"
-"Last-Translator: George Marques <georgemjesus@gmail.com>\n"
+"PO-Revision-Date: 2016-08-11 15:38+0000\n"
+"Last-Translator: António Sarmento <antonio.luis.sarmento@gmail.com>\n"
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_BR/>\n"
"Language: pt_BR\n"
@@ -95,14 +96,12 @@ msgid "Stack overflow with stack depth: "
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Função:"
+msgstr "Funções:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Variável"
+msgstr "Variáveis:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -117,9 +116,8 @@ msgid "Name already in use by another func/var/signal:"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Criar Função"
+msgstr "Renomear Função"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -127,53 +125,72 @@ msgid "Rename Variable"
msgstr "Renomear Amostra"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Renomear Amostra"
+msgstr "Renomear Sinal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Função:"
+msgstr "Adicionar Função"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Variável"
+msgstr "Adicionar Variável"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Sinais"
+msgstr "Adicionar Sinal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Remover Seleção"
+msgstr "Remover Função"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Variável"
+msgstr "Remover Variável"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Variável"
+msgstr "Editando Variável:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Remover Seleção"
+msgstr "Remover Sinal"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Conectando Sinal:"
+msgstr "Editando Sinal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
+msgstr "Adicionar Nó"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
msgstr "Adicionar Nó Filho"
#: modules/visual_script/visual_script_editor.cpp
@@ -182,11 +199,11 @@ msgid "Add Node(s) From Tree"
msgstr "Nó a Partir de Cena"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Add Setter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -208,9 +225,8 @@ msgid "Members:"
msgstr "Membros:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Available Nodes:"
-msgstr "Nó Tempo de Escala"
+msgstr "Nós Disponíveis:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
@@ -230,24 +246,20 @@ msgid "Close"
msgstr "Fechar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "Argumentos de Chamada Extras:"
+msgstr "Editar Argumentos do Sinal:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Variável"
+msgstr "Editar Variável:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Alterar Tipo"
+msgstr "Alterar"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Excluir os arquivos selecionados?"
+msgstr "Excluir Selecionados"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -256,8 +268,23 @@ msgstr "Alternar Ponto de interrupção"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Localizar próximo"
+msgid "Find Node Type"
+msgstr "Localizar Tipo de Nó"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Copiar Pose"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Criar Nó"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Colar Pose"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
@@ -295,9 +322,8 @@ msgid ": Invalid argument of type: "
msgstr "Nome de classe pai inválido"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Nome de classe pai inválido"
+msgstr ": Argumentos inválidos: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -308,12 +334,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -565,7 +585,8 @@ msgstr "Todos os Arquivos (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Abrir"
@@ -1108,7 +1129,8 @@ msgstr "Alterar Valor do Vetor"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Pesquisar:"
@@ -1357,10 +1379,16 @@ msgid "Create New"
msgstr "Criar Novo"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Combinações:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Descrição:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Buscar Substituição Para:"
@@ -1686,10 +1714,6 @@ msgstr "Itens do Tema de GUI:"
msgid "Constants:"
msgstr "Constantes:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Descrição:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Descrição do Método:"
@@ -4510,9 +4534,8 @@ msgid "Save Theme As"
msgstr "Salvar Tema Como"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "Clonar Abaixo"
+msgstr "Fechar Docs"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -5822,7 +5845,7 @@ msgstr "Escanear"
#: tools/editor/project_manager.cpp
#, fuzzy
msgid "Select a Folder to Scan"
-msgstr "Selecione um Nó"
+msgstr "Selecione uma Pasta para Scanear"
#: tools/editor/project_manager.cpp
msgid "New Project"
@@ -6116,6 +6139,16 @@ msgstr "Global"
msgid "Sections:"
msgstr "Seções:"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Selecionar Pontos"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Modo de Seleção (Q)"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "Não se pôde executar a ferramenta PVRTC:"
@@ -6326,9 +6359,8 @@ msgid "Save Branch as Scene"
msgstr "Salvar Ramo como Cena"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "Confirme Por Favor..."
+msgstr "Excluir (Sem Confirmação)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
@@ -6343,9 +6375,8 @@ msgstr ""
"existe um nó raiz."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Create a new script for the selected node."
-msgstr "Instancia a(s) cena(s) selecionada como filho do nó selecionado."
+msgstr "Criar um script novo para o nó selecionado."
#: tools/editor/scene_tree_editor.cpp
msgid ""
diff --git a/tools/translations/pt_PT.po b/tools/translations/pt_PT.po
index 4c31b87233..21792d3857 100644
--- a/tools/translations/pt_PT.po
+++ b/tools/translations/pt_PT.po
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-10 15:14+0000\n"
+"PO-Revision-Date: 2016-08-11 15:42+0000\n"
"Last-Translator: António Sarmento <antonio.luis.sarmento@gmail.com>\n"
"Language-Team: Portuguese (Portugal) <https://hosted.weblate.org/projects/"
"godot-engine/godot/pt_PT/>\n"
@@ -26,173 +26,212 @@ msgstr "Tipo de argumento inválido para convert(), use constantes TYPE_*."
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
msgstr ""
+"Número de bytes insuficientes para descodificar, ou o formato é inválido."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
-msgstr ""
+msgstr "o argumento \"step\" é zero!"
#: modules/gdscript/gd_functions.cpp
msgid "Not a script with an instance"
-msgstr ""
+msgstr "Não é um script com uma instância"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a script"
-msgstr ""
+msgstr "Não é baseado num script"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a resource file"
-msgstr ""
+msgstr "Não é baseado num ficheiro de recurso"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr ""
+msgstr "Formato de dicionário de instância inválido (falta @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
+"Formato de dicionário de instância inválido (não foi possível carregar o "
+"script em @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr ""
+msgstr "Formato de dicionário de instância inválido (script inválido em @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
-msgstr ""
+msgstr "Dicionário de instância inválido (subclasses inválidas)"
#: modules/visual_script/visual_script.cpp
msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Um nó fez yield sem memória para usar, por favor leia os documentos para "
+"saber como fazer yield correctamente!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"O nó fez yield, mas não retornou um estado de função na primeira memória de "
+"trabalho."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"O valor de retorno deve ser atribuído ao primeiro elemento da memória de "
+"trabalho de nós! Corrija o seu nó por favor."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "O nó retornou uma sequência de saída (output) incorrecta: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
+"A sequência foi encontrada mas não o nó na pilha (stack), faça report de bug!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Stack overflow com a profundidade da pilha (stack): "
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr ""
+msgstr "Funções:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
-msgstr ""
+msgstr "Variáveis:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
-msgstr ""
+msgstr "Sinais:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "O nome não é um identificador válido:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Este nome já está a ser usado por outro func/var/signal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Function"
-msgstr ""
+msgstr "Alterar nome da Função"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Variable"
-msgstr ""
+msgstr "Alterar nome da Variável"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Signal"
-msgstr ""
+msgstr "Alterar nome do Sinal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function"
-msgstr ""
+msgstr "Adicionar Função"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
-msgstr ""
+msgstr "Adicionar Variável"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr ""
+msgstr "Adicionar Sinal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
-msgstr ""
+msgstr "Remover Função"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr ""
+msgstr "Remover Variável"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
-msgstr ""
+msgstr "A editar Variável:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr ""
+msgstr "Remover Sinal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
-msgstr ""
+msgstr "A editar Sinal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
+msgstr "Adicionar Nó"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Meta to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Adicionar Nó"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Adicionar Nó da Árvore"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Adicionar propriedade Getter"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Adicionar propriedade Setter"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Edit"
-msgstr ""
+msgstr "Editar"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
-msgstr ""
+msgstr "Tipo de Base:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
-msgstr ""
+msgstr "Membros:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "Nós Disponíveis:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Seleccione ou crie uma função para editar o grafo"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -205,68 +244,81 @@ msgstr ""
#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
msgid "Close"
-msgstr ""
+msgstr "Fechar"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr ""
+msgstr "Editar Argumentos do Sinal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
-msgstr ""
+msgstr "Editar Variável:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change"
-msgstr ""
+msgstr "Alterar"
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete Selected"
-msgstr ""
+msgstr "Apagar Seleccionados"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
+msgstr "Accionar Breakpoint"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "Encontrar Tipo de Nó"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "Tipo de Input não iterável: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "O iterador tornou-se inválido"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "O iterador tornou-se inválido: "
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name."
-msgstr ""
+msgstr "Nome de índice propriedade inválido."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "Objecto de base não é un Nó!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
-msgstr ""
+msgstr "Caminho não aponta para nenhum Nó!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Nome de propriedade índice '%s' inválido em nó %s."
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ""
+msgstr ": Argumento inválido de tipo: "
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid arguments: "
-msgstr ""
+msgstr ": Argumentos inválidos: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
@@ -277,12 +329,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -482,7 +528,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1018,7 +1065,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1267,10 +1315,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1586,10 +1640,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5949,6 +5999,15 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Adicionar propriedade Setter"
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/ro.po b/tools/translations/ro.po
index 76e301404d..8e0dc574be 100644
--- a/tools/translations/ro.po
+++ b/tools/translations/ro.po
@@ -152,11 +152,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -164,6 +188,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -223,7 +251,19 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
@@ -271,12 +311,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -476,7 +510,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1012,7 +1047,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1261,10 +1297,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1580,10 +1622,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5943,6 +5981,14 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/ru.po b/tools/translations/ru.po
index 0ae2d02fe0..7b047d9a1e 100644
--- a/tools/translations/ru.po
+++ b/tools/translations/ru.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-07-24 17:18+0000\n"
+"PO-Revision-Date: 2016-08-17 20:35+0000\n"
"Last-Translator: DimOkGamer <dimokgamer@gmail.com>\n"
"Language-Team: Russian <https://hosted.weblate.org/projects/godot-engine/"
"godot/ru/>\n"
@@ -70,40 +70,44 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Узел покинут без рабочей памяти, пожалуйста, прочитайте документацию о том, "
+"как правильно выходить!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"Узел покинут, но не возвращает состояние функции в первой рабочей памяти."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"Возвращаемое значение должно быть присвоено первому элементу узла рабочей "
+"памяти! Исправьте узел пожалуйста."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Узел вернул ошибочную последовательность: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
msgstr ""
+"Найдена последовательность бит, но не узел в стеке, сообщение об ошибке!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Переполнение стека с глубиной стека: "
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Функция:"
+msgstr "Функции:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Переменная"
+msgstr "Переменные:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -111,86 +115,102 @@ msgstr "Сигналы:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Имя не является допустимым идентификатором:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Имя уже используется другой функцией/переменной/сигналом:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Сделать функцию"
+msgstr "Переименовать функцию"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Переименовать сэмпл"
+msgstr "Переименовать переменную"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Signal"
-msgstr "Переименовать сэмпл"
+msgstr "Переименовать сигнал"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Функция:"
+msgstr "Добавить функцию"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Переменная"
+msgstr "Добавить переменную"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Сигналы"
+msgstr "Добавить сигнал"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Убрать выделение"
+msgstr "Удалить функцию"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Переменная"
+msgstr "Удалить переменную"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Переменная"
+msgstr "Редактирование переменной:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Убрать выделение"
+msgstr "Удалить сигнал"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Подключение сигнала:"
+msgstr "Редактирование сигнала:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "Добавить дочерний узел"
+msgstr "Добавить узел"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
-msgid "Add Node(s) From Tree"
-msgstr "Узел со сцены"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Добавить дочерний узел"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Добавить узел(узлы) из дерева"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Добавить получающее свойство"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Добавить устанавливающее свойство"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -200,22 +220,20 @@ msgid "Edit"
msgstr "Редактировать"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "Тип информации:"
+msgstr "Базовый тип:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
msgstr "Участники:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Available Nodes:"
-msgstr "TimeScale узел"
+msgstr "Доступные узлы:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Выберите или создайте функцию для редактирования графа"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -231,24 +249,20 @@ msgid "Close"
msgstr "Закрыть"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Signal Arguments:"
-msgstr "Дополнительные параметры вызова:"
+msgstr "Редактирование аргументов сигнала:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Переменная"
+msgstr "Редактировать переменную:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Change"
-msgstr "Изменить тип"
+msgstr "Изменить"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Удалить выбранные файлы?"
+msgstr "Удалить выделенное"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -257,72 +271,80 @@ msgstr "Точка остановки"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
-msgstr "Найти следующее"
+msgid "Find Node Type"
+msgstr "Найти тип узла"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Копировать позу"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "Создать узел"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Вставить позу"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "Входной тип не итерируемый: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "Итератор стал недействительным"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "Итератор стал недействительным: "
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Invalid index property name."
-msgstr "Недопустимое имя вышестоящего класса"
+msgstr "Неверный индекс свойства имени."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "Базовый объект не является узлом!"
#: modules/visual_script/visual_script_func_nodes.cpp
-#, fuzzy
msgid "Path does not lead Node!"
-msgstr "Путь не локальный"
+msgstr "Путь не приводит к узлу!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Неправильный индекс свойства имени '%s' в узле %s."
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid argument of type: "
-msgstr "Недопустимое имя вышестоящего класса"
+msgstr ": Недопустимый аргумент типа: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "Недопустимое имя вышестоящего класса"
+msgstr ": Недопустимые аргументы: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet не найден в скрипте: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet не найден в скрипте: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
+"Пользовательский узел не имеет метода _step(), не возможно обрабатывать граф."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"Недопустимое значение, возвращаемое _step(), должно быть целое число(seq "
+"out) или строка (error)."
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -569,7 +591,8 @@ msgstr "Все файлы (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Открыть"
@@ -1061,7 +1084,7 @@ msgstr "Оптимизировать"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr ""
+msgstr "Выберите AnimationPlayer из дерева сцены для редактирования анимаций."
#: tools/editor/animation_editor.cpp
msgid "Key"
@@ -1113,7 +1136,8 @@ msgstr "Изменить значение массива"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Поиск:"
@@ -1271,7 +1295,7 @@ msgstr "Отдалить"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "Сбросить приближение"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1362,10 +1386,16 @@ msgid "Create New"
msgstr "Создать новый"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Совпадения:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Описание:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "Поиск замены для:"
@@ -1693,10 +1723,6 @@ msgstr "Тема элементов GUI:"
msgid "Constants:"
msgstr "Константы:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Описание:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Описание методов:"
@@ -3676,9 +3702,8 @@ msgid "Paste Pose"
msgstr "Вставить позу"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "Режим выделения (Q)"
+msgstr "Режим выделения"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3699,14 +3724,12 @@ msgid "Alt+RMB: Depth list selection"
msgstr "Alt+ПКМ: Список выбора глубины"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "Режим перемещения (W)"
+msgstr "Режим перемещения"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Rotate Mode"
-msgstr "Режим поворота (E)"
+msgstr "Режим поворота"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
@@ -4519,9 +4542,8 @@ msgid "Save Theme As"
msgstr "Сохранить тему как"
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Close Docs"
-msgstr "Копировать вниз"
+msgstr "Закрыть документацию"
#: tools/editor/plugins/script_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -5791,12 +5813,10 @@ msgid "Unnamed Project"
msgstr "Безымянный проект"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to open more than one project?"
-msgstr "Вы уверены, что открыть несколько проектов?"
+msgstr "Вы уверены, что хотите открыть более одного проекта?"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Are you sure to run more than one project?"
msgstr "Вы уверены, что хотите запустить более одного проекта?"
@@ -5809,6 +5829,8 @@ msgid ""
"You are about the scan %s folders for existing Godot projects. Do you "
"confirm?"
msgstr ""
+"Вы собираетесь сканировать %s папки для существующих проектов Godot. "
+"Подтверждаете?"
#: tools/editor/project_manager.cpp
msgid "Project Manager"
@@ -5827,9 +5849,8 @@ msgid "Scan"
msgstr "Сканировать"
#: tools/editor/project_manager.cpp
-#, fuzzy
msgid "Select a Folder to Scan"
-msgstr "Выбрать узел"
+msgstr "Выбрать папку для сканирования"
#: tools/editor/project_manager.cpp
msgid "New Project"
@@ -6123,6 +6144,16 @@ msgstr "Глобальные"
msgid "Sections:"
msgstr "Разделы:"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Выбрать точки"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Режим выделения"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "Невозможно запустить PVRTC инструмент:"
@@ -6198,9 +6229,8 @@ msgid "No parent to instance a child at."
msgstr "Нет родителя для добавления потомка."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "No parent to instance the scenes at."
-msgstr "Нет родителя для добавления потомка."
+msgstr "Нет родителя для добавления сюда сцены."
#: tools/editor/scene_tree_dock.cpp
msgid "Error loading scene from %s"
@@ -6335,9 +6365,8 @@ msgid "Save Branch as Scene"
msgstr "Сохранить ветку, как сцену"
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Delete (No Confirm)"
-msgstr "Подтверждение..."
+msgstr "Удалить (без подтверждения)"
#: tools/editor/scene_tree_dock.cpp
msgid "Add/Create a New Node"
@@ -6352,9 +6381,8 @@ msgstr ""
"не существует."
#: tools/editor/scene_tree_dock.cpp
-#, fuzzy
msgid "Create a new script for the selected node."
-msgstr "Добавить выбранную сцену(сцены), как потомка выбранного узла."
+msgstr "Создать новый скрипт для выбранного узла."
#: tools/editor/scene_tree_editor.cpp
msgid ""
@@ -6656,6 +6684,13 @@ msgstr "Изменена длинна луча"
msgid "Change Notifier Extents"
msgstr "Изменены границы уведомителя"
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "Пользовательский узел не имеет _get_output_port_unsequenced(idx,wmem), но "
+#~ "неупорядоченные порты были указаны."
+
#~ msgid "Cannot go into subdir:"
#~ msgstr "Невозможно перейти в подпапку:"
diff --git a/tools/translations/sk.po b/tools/translations/sk.po
index 295c1000fd..4f3175ddd8 100644
--- a/tools/translations/sk.po
+++ b/tools/translations/sk.po
@@ -163,11 +163,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -175,6 +199,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -234,9 +262,22 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Vložiť"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -282,12 +323,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -494,7 +529,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "Otvoriť"
@@ -1031,7 +1067,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1280,10 +1317,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Popis:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1599,10 +1642,6 @@ msgstr ""
msgid "Constants:"
msgstr "Konštanty:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Popis:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5967,6 +6006,14 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/sl.po b/tools/translations/sl.po
index 385779749e..33a9bc3e23 100644
--- a/tools/translations/sl.po
+++ b/tools/translations/sl.po
@@ -7,7 +7,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-08-10 10:28+0000\n"
+"PO-Revision-Date: 2016-08-12 09:47+0000\n"
"Last-Translator: matevž lapajne <sivar.lapajne@gmail.com>\n"
"Language-Team: Slovenian <https://hosted.weblate.org/projects/godot-engine/"
"godot/sl/>\n"
@@ -21,12 +21,12 @@ msgstr ""
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Invalid type argument to convert(), use TYPE_* constants."
-msgstr "Neveljaven tip argumenta za convert(), use TYPE_* constants."
+msgstr "Neveljavena vrsta argumenta za convert(), uporabite TYPE_* konstanto."
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
msgid "Not enough bytes for decoding bytes, or invalid format."
-msgstr "Ni dovolj bajtov za dekodiranje bajtov, ali neveljaven format."
+msgstr "Ni dovolj pomnilnika za dekodiranje bajtov, ali neveljaven format."
#: modules/gdscript/gd_functions.cpp
msgid "step argument is zero!"
@@ -34,7 +34,7 @@ msgstr "stopnja argumenta je nič!"
#: modules/gdscript/gd_functions.cpp
msgid "Not a script with an instance"
-msgstr "Ni skripta z primerom"
+msgstr "To ni skripta z instanco"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a script"
@@ -42,20 +42,20 @@ msgstr "Ne temelji na skripti"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a resource file"
-msgstr "Ne temelji na viru datoteke"
+msgstr "Ne temelji na datoteki virov"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
-msgstr "Neveljaven primer slovarskega formata (manjka @path)"
+msgstr "Neveljaven primer formata slovarja (manjka @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (can't load script at @path)"
msgstr ""
-"Neveljaven primer slovarskega formata (ne morem naložiti skripte ob @path)"
+"Neveljaven primer formata slovarja (ni mogoče naložiti skripte iz @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (invalid script at @path)"
-msgstr "Neveljaven primer slovarskega formata (neveljavna skripta na @path)"
+msgstr "Neveljaven primer formata slovarja (neveljavna skripta v @path)"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary (invalid subclasses)"
@@ -66,135 +66,170 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"Node je bil sprejet brez potrebnega pomnilnika, pravilen postopek je opisan "
+"v dokumentaciji!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
msgstr ""
+"Node pridobljen, vendar se ne vrne v funkcijalno stanje v prvem delavnem "
+"spominu."
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
msgstr ""
+"Vrnjena vrednost mora biti dodeljena prvemu elementu v node-delavnemu "
+"spominu! Prosim, da popraviš node."
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "Node je vrnil napačno zaporedje na izhodu: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
-msgstr ""
+msgstr "Zaporedni bit najden, vendar ne node v skladu, prijavi napako!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "Sklad prepoln z stack depth: "
#: modules/visual_script/visual_script_editor.cpp
msgid "Functions:"
-msgstr ""
+msgstr "Funkcije:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Variables:"
-msgstr ""
+msgstr "Spremenljivke:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
-msgstr ""
+msgstr "Signali:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "Ime ni pravilen identifikator:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Ime že uporablja druga funkcija/sprem/signal:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Function"
-msgstr ""
+msgstr "Preimenuj Funkcijo"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Variable"
-msgstr ""
+msgstr "Preimenuj Spremenljivko"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Signal"
-msgstr ""
+msgstr "Preimenuj Signal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Function"
-msgstr ""
+msgstr "Dodaj Funkcijo"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Variable"
-msgstr ""
+msgstr "Dodaj Spremenljivko"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr ""
+msgstr "Dodaj Signal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Function"
-msgstr ""
+msgstr "Odstrani Funkcijo"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Variable"
-msgstr ""
+msgstr "Odstrani Spremenljivko"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Variable:"
-msgstr ""
+msgstr "Urejanje Spremenljivke:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Remove Signal"
-msgstr ""
+msgstr "Odstrani Signal"
#: modules/visual_script/visual_script_editor.cpp
msgid "Editing Signal:"
-msgstr ""
+msgstr "Urejanje Signala:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
+msgstr "Dodaj Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Meta to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Dodaj Node"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Dodaj Node(e) iz Drevesa"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Dodaj Getter Lastnost"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Dodaj Setter Lastnost"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Edit"
-msgstr ""
+msgstr "Uredi"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
-msgstr ""
+msgstr "Osnovni Tip:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
-msgstr ""
+msgstr "Člani:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "Na voljo Nodes:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "Izberi ali ustvari funkcijo za urejanje grafa"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -207,92 +242,101 @@ msgstr ""
#: tools/editor/project_settings.cpp tools/editor/property_editor.cpp
#: tools/editor/run_settings_dialog.cpp tools/editor/settings_config_dialog.cpp
msgid "Close"
-msgstr ""
+msgstr "Zapri"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Signal Arguments:"
-msgstr ""
+msgstr "Uredi Argumente Signala:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Edit Variable:"
-msgstr ""
+msgstr "Uredi Spremenljivko:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change"
-msgstr ""
+msgstr "Spremeni"
#: modules/visual_script/visual_script_editor.cpp
msgid "Delete Selected"
-msgstr ""
+msgstr "Izbriši Izbrano"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
msgid "Toggle Breakpoint"
+msgstr "Preklopi na Zaustavitev"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Find Node Type"
+msgstr "Najdi Node Type"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Paste Nodes"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "Vhodni tip ni spremenljiv: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "Iterator je bil neveljaven"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "Iterator je neveljaven: "
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name."
-msgstr ""
+msgstr "Neveljaven indeks lastnosti imena."
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "Osnovni objekt ni Node!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Path does not lead Node!"
-msgstr ""
+msgstr "Pot ne vodi do Node!"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "Neveljaven indeks lastnosti imena '%s' v node %s."
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid argument of type: "
-msgstr ""
+msgstr ": Neveljaven argument od tipa: "
#: modules/visual_script/visual_script_nodes.cpp
msgid ": Invalid arguments: "
-msgstr ""
+msgstr ": Neveljavni argumenti: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "VariableGet ni najden v skripti: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "VariableSet ni najden v skripti: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
-msgstr ""
+msgstr "Custom node nima _step() metode, grafa ni mogoče obdelati."
#: modules/visual_script/visual_script_nodes.cpp
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
msgstr ""
+"Neveljavna vrnitev vrednosti od _step(), mora biti število (seq out), ali "
+"string (error)."
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -307,6 +351,8 @@ msgid ""
"Only one visible CanvasModulate is allowed per scene (or set of instanced "
"scenes). The first created one will work, while the rest will be ignored."
msgstr ""
+"Le en viden CanvasModulate je dovoljen na sceno (ali niz instanciranih "
+"scen). Prvi ustvarjen se bo uporabil, medtem ko bodo drugi prezrti."
#: scene/2d/collision_polygon_2d.cpp
msgid ""
@@ -314,10 +360,14 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
+"CollisionPolygon2D služi le, da zagotavlja collision obliko nodu "
+"CollisionObject2D, ki izhaja iz njega. Naprošamo vas, da ga uporabite le kot "
+"otroka od Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. da jim "
+"date obliko."
#: scene/2d/collision_polygon_2d.cpp
msgid "An empty CollisionPolygon2D has no effect on collision."
-msgstr ""
+msgstr "Prazen CollisionPolygon2D nima vpliva na collision."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -325,6 +375,10 @@ msgid ""
"CollisionObject2D derived node. Please only use it as a child of Area2D, "
"StaticBody2D, RigidBody2D, KinematicBody2D, etc. to give them a shape."
msgstr ""
+"CollisionShape2D služi le, da zagotavlja collision obliko nodu "
+"CollisionObject2D, ki izhaja iz njega. Naprošamo vas, da ga uporabite le kot "
+"otroka od Area2D, StaticBody2D, RigidBody2D, KinematicBody2D, etc. da jim "
+"date obliko."
#: scene/2d/collision_shape_2d.cpp
msgid ""
@@ -486,7 +540,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1022,7 +1077,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1271,10 +1327,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1590,10 +1652,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5953,6 +6011,15 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Dodaj Setter Lastnost"
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6472,3 +6539,10 @@ msgstr ""
#: tools/editor/spatial_editor_gizmos.cpp
msgid "Change Notifier Extents"
msgstr ""
+
+#~ msgid ""
+#~ "Custom node has no _get_output_port_unsequenced(idx,wmem), but "
+#~ "unsequenced ports were specified."
+#~ msgstr ""
+#~ "Custom node nima _get_output_port_unsequenced(idx,wmem), vendar "
+#~ "nezaporedni porti so bili določeni."
diff --git a/tools/translations/tools.pot b/tools/translations/tools.pot
index e72b46b96b..c86586a055 100644
--- a/tools/translations/tools.pot
+++ b/tools/translations/tools.pot
@@ -152,11 +152,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -164,6 +188,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -223,7 +251,19 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
@@ -271,12 +311,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -476,7 +510,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1012,7 +1047,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1261,10 +1297,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1580,10 +1622,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5943,6 +5981,14 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/tr.po b/tools/translations/tr.po
index 766f13b70e..0c27abe7c5 100644
--- a/tools/translations/tr.po
+++ b/tools/translations/tr.po
@@ -3,12 +3,13 @@
# This file is distributed under the same license as the Godot source code.
#
# Enes Kaya Öcal <ekayaocal@hotmail.com>, 2016.
+# M. Yavuz Uzun <myavuzuzun@yandex.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-07-25 11:14+0000\n"
-"Last-Translator: Enes Kaya Öcal <ekayaocal@hotmail.com>\n"
+"PO-Revision-Date: 2016-08-18 00:13+0000\n"
+"Last-Translator: M. Yavuz Uzun <myavuzuzun@yandex.com>\n"
"Language-Team: Turkish <https://hosted.weblate.org/projects/godot-engine/"
"godot/tr/>\n"
"Language: tr\n"
@@ -37,11 +38,11 @@ msgstr ""
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a script"
-msgstr ""
+msgstr "Bir koda bağlı değil"
#: modules/gdscript/gd_functions.cpp
msgid "Not based on a resource file"
-msgstr ""
+msgstr "Bir kaynak dosyasına bağlı değil"
#: modules/gdscript/gd_functions.cpp
msgid "Invalid instance dictionary format (missing @path)"
@@ -63,7 +64,7 @@ msgstr ""
msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
-msgstr ""
+msgstr "Çalışan hafıza olmadan düğüm yerleştirilmiş, lütfen belgeleri okuyun!"
#: modules/visual_script/visual_script.cpp
msgid ""
@@ -90,14 +91,12 @@ msgid "Stack overflow with stack depth: "
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Functions:"
-msgstr "Fonksiyon:"
+msgstr "Fonksiyonlar:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "Değişken"
+msgstr "Değişkenler:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
@@ -105,95 +104,113 @@ msgstr "Sinyaller:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "İsim doğru bir belirleyici değil:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "Ad zaten başka bir fonksiyon/değişken/sinyal tarafından kullanılıyor:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "Fonksiyon:"
+msgstr "Fonksiyonu Yeniden İsimlendir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "Değişken"
+msgstr "Değişkeni Yeniden İsimlendir"
#: modules/visual_script/visual_script_editor.cpp
msgid "Rename Signal"
-msgstr ""
+msgstr "Sinyali Yeniden İsimlendir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Function"
-msgstr "Fonksiyon:"
+msgstr "Fonksiyon Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Variable"
-msgstr "Değişken"
+msgstr "Değişken Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Signal"
-msgstr "Sinyaller:"
+msgstr "Sinyal Ekle"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Function"
-msgstr "Seçimi Kaldır"
+msgstr "Fonksiyonu Kaldır"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Variable"
-msgstr "Değişken"
+msgstr "Değişkeni Kaldır"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Variable:"
-msgstr "Değişken"
+msgstr "Değişken Düzenleniyor:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Remove Signal"
-msgstr "Seçimi Kaldır"
+msgstr "Sinyali Kaldır"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Editing Signal:"
-msgstr "Sinyaller:"
+msgstr "Sinyal Düzenleniyor:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Add Node"
-msgstr "AutoLoad ekle"
+msgstr "Düğüm Ekle"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "Düğüm Ekle"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "Ağaçtan Düğüm(ler) Ekle"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Getter Property"
+msgstr "Alıcı Özellik Ekle"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr "Düzenleyici Özellik Ekle"
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
#: tools/editor/plugins/shader_editor_plugin.cpp
#: tools/editor/project_manager.cpp
msgid "Edit"
-msgstr ""
+msgstr "Düzenle"
#: modules/visual_script/visual_script_editor.cpp
msgid "Base Type:"
-msgstr ""
+msgstr "Taban Tipi:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
@@ -225,18 +242,16 @@ msgid "Edit Signal Arguments:"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Edit Variable:"
-msgstr "Değişken"
+msgstr "Değişkeni Düzenle:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Change"
-msgstr ""
+msgstr "Değiştir"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "Seçili dosyaları sil?"
+msgstr "Seçilenleri Sil"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -244,9 +259,23 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "Kaynağı Kopyala"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "Kaynağı Yapıştır"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -295,12 +324,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -475,7 +498,7 @@ msgstr "İptal"
#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp
msgid "OK"
-msgstr "NoTamam"
+msgstr "Tamam"
#: scene/gui/dialogs.cpp
msgid "Alert!"
@@ -500,17 +523,18 @@ msgstr "Tüm dosyalar (*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
-msgstr "Açık"
+msgstr "Aç"
#: scene/gui/file_dialog.cpp
msgid "Open a File"
-msgstr ""
+msgstr "Bir Dosya Aç"
#: scene/gui/file_dialog.cpp
msgid "Open File(s)"
-msgstr ""
+msgstr "Dosya(ları) aç"
#: scene/gui/file_dialog.cpp
msgid "Open a Directory"
@@ -588,7 +612,7 @@ msgstr "Ctrl+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Meta+"
-msgstr ""
+msgstr "Meta+"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Device"
@@ -1028,7 +1052,7 @@ msgstr "Diziyi Yeniden Boyutlandır"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value Type"
-msgstr ""
+msgstr "Dizinin türünü degistir"
#: tools/editor/array_property_edit.cpp
msgid "Change Array Value"
@@ -1036,7 +1060,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "Ara:"
@@ -1047,7 +1072,7 @@ msgstr "Sırala:"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Reverse"
-msgstr ""
+msgstr "Tersi"
#: tools/editor/asset_library_editor_plugin.cpp
#: tools/editor/project_settings.cpp
@@ -1210,7 +1235,7 @@ msgstr ""
#: tools/editor/connections_dialog.cpp
msgid "Connect To Node:"
-msgstr ""
+msgstr "Düğüme bağlan:"
#: tools/editor/connections_dialog.cpp
#: tools/editor/editor_autoload_settings.cpp tools/editor/groups_editor.cpp
@@ -1285,10 +1310,16 @@ msgid "Create New"
msgstr "Yeni oluştur"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "Eşleşmeler:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "Açıklama:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1358,9 +1389,8 @@ msgid "Remove selected files from the project? (no undo)"
msgstr "Seçili dosyaları projeden kaldır? (Geri alınamaz)"
#: tools/editor/dependency_editor.cpp
-#, fuzzy
msgid "Error loading:"
-msgstr "Yüklemede hata:"
+msgstr "Yüklerken hata:"
#: tools/editor/dependency_editor.cpp
msgid "Scene failed to load due to missing dependencies:"
@@ -1611,10 +1641,6 @@ msgstr "Arayüz Tema Öğeleri:"
msgid "Constants:"
msgstr "Sabitler:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "Açıklama:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "Metot Açıklaması:"
@@ -3127,34 +3153,34 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "New Anim"
-msgstr ""
+msgstr "Yeni Animasyon"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Change Animation Name:"
-msgstr ""
+msgstr "Animasyonun adını değiştir:"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Remove Animation"
-msgstr ""
+msgstr "Animasyonu Kaldır"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Invalid animation name!"
-msgstr ""
+msgstr "HATA: Geçersiz animasyon adı!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: Animation name already exists!"
-msgstr ""
+msgstr "HATA: Bu animasyonun adı zaten var!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Rename Animation"
-msgstr ""
+msgstr "Animasyonu Yeniden İsimlendir"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
#: tools/editor/plugins/sprite_frames_editor_plugin.cpp
msgid "Add Animation"
-msgstr ""
+msgstr "Animasyon Ekle"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Blend Next Changed"
@@ -3166,15 +3192,15 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Load Animation"
-msgstr ""
+msgstr "Animasyon Yükle"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Duplicate Animation"
-msgstr ""
+msgstr "Animasyonu Yeniden Çıkar"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to copy!"
-msgstr ""
+msgstr "HATA: Kopyalamak için bir animasyon yok!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation resource on clipboard!"
@@ -3190,7 +3216,7 @@ msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "ERROR: No animation to edit!"
-msgstr ""
+msgstr "HATA: Düzenlemek için bir animasyon yok!"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation backwards from current pos. (A)"
@@ -5981,6 +6007,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "Düzenleyici Özellik Ekle"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "Bir Düğüm Seç"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6336,7 +6372,7 @@ msgstr "Sınıf Adı:"
#: tools/editor/script_create_dialog.cpp
msgid "Built-In Script"
-msgstr ""
+msgstr "Gömme Betik"
#: tools/editor/script_create_dialog.cpp
msgid "Create Node Script"
@@ -6344,7 +6380,7 @@ msgstr "Düğüm Betiği Oluştur"
#: tools/editor/script_editor_debugger.cpp
msgid "Bytes:"
-msgstr ""
+msgstr "Baytlar:"
#: tools/editor/script_editor_debugger.cpp
msgid "Warning"
diff --git a/tools/translations/ur_PK.po b/tools/translations/ur_PK.po
index 99233af8c9..0ac56d847b 100644
--- a/tools/translations/ur_PK.po
+++ b/tools/translations/ur_PK.po
@@ -162,11 +162,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -174,6 +198,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -233,7 +261,19 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
@@ -281,12 +321,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -486,7 +520,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1023,7 +1058,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1272,10 +1308,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1594,10 +1636,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5962,6 +6000,14 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
diff --git a/tools/translations/zh_CN.po b/tools/translations/zh_CN.po
index ce045b495a..a53d4ba4ed 100644
--- a/tools/translations/zh_CN.po
+++ b/tools/translations/zh_CN.po
@@ -3,15 +3,17 @@
# This file is distributed under the same license as the Godot source code.
#
# 纯洁的坏蛋 <tqj.zyy@gmail.com>, 2016.
+# 孤月蓝风 <trlanfeng@foxmail.com>, 2016.
# Geequlim <geequlim@gmail.com>, 2016.
# Luo Jun <vipsbpig@gmail.com>, 2016.
+# wanfang liu <wanfang.liu@gmail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
"POT-Creation-Date: \n"
-"PO-Revision-Date: 2016-08-10 17:36+0000\n"
-"Last-Translator: Luo Jun <vipsbpig@gmail.com>\n"
+"PO-Revision-Date: 2016-08-23 09:17+0000\n"
+"Last-Translator: 孤月蓝风 <trlanfeng@foxmail.com>\n"
"Language-Team: Chinese (China) <https://hosted.weblate.org/projects/godot-"
"engine/godot/zh_CN/>\n"
"Language: zh_CN\n"
@@ -68,30 +70,31 @@ msgid ""
"A node yielded without working memory, please read the docs on how to yield "
"properly!"
msgstr ""
+"一个节点在无工作内存的情况下被yielded,请阅读文档来查看如何适当的yield!"
#: modules/visual_script/visual_script.cpp
msgid ""
"Node yielded, but did not return a function state in the first working "
"memory."
-msgstr ""
+msgstr "节点已yielded,但并没有在第一个工作内存中返回一个函数状态。"
#: modules/visual_script/visual_script.cpp
msgid ""
"Return value must be assigned to first element of node working memory! Fix "
"your node please."
-msgstr ""
+msgstr "节点工作内存的第一个节点的返回值必须已赋值!请修正你的节点。"
#: modules/visual_script/visual_script.cpp
msgid "Node returned an invalid sequence output: "
-msgstr ""
+msgstr "节点返回了一个无效的连续输出: "
#: modules/visual_script/visual_script.cpp
msgid "Found sequence bit but not the node in the stack, report bug!"
-msgstr ""
+msgstr "在非堆栈中的节点中找到连续bit,报告bug!"
#: modules/visual_script/visual_script.cpp
msgid "Stack overflow with stack depth: "
-msgstr ""
+msgstr "堆栈深度溢出: "
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -99,71 +102,70 @@ msgid "Functions:"
msgstr "函数:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Variables:"
-msgstr "变量"
+msgstr "变量:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
msgstr "事件:"
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
msgid "Name is not a valid identifier:"
-msgstr ""
+msgstr "名称不是有效的标识符:"
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
msgid "Name already in use by another func/var/signal:"
-msgstr ""
+msgstr "名称已经被其他的函数/变量/信号占用:"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Function"
-msgstr "创建方法"
+msgstr "重命名函数"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Rename Variable"
-msgstr "重命名音效"
+msgstr "重命名变量"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Rename Signal"
-msgstr "重命名音效"
+msgstr "重命名信号"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Add Function"
-msgstr "函数:"
+msgstr "添加函数"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Add Variable"
-msgstr "变量"
+msgstr "添加变量"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Add Signal"
-msgstr "信号"
+msgstr "添加信号"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Remove Function"
-msgstr "移除选中项"
+msgstr "移除函数"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Remove Variable"
-msgstr "变量"
+msgstr "移除变量"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Editing Variable:"
-msgstr "变量"
+msgstr "编辑变量:"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Remove Signal"
-msgstr "移除选中项"
+msgstr "移除信号"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -176,17 +178,46 @@ msgid "Add Node"
msgstr "添加子节点"
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "添加子节点"
+
+#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
msgid "Add Node(s) From Tree"
msgstr "从场景导入节点"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
-msgstr ""
+msgid "Add Getter Property"
+msgstr "添加访问器属性"
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Getter Property"
-msgstr ""
+msgid "Add Setter Property"
+msgstr "添加设置器"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
@@ -198,21 +229,21 @@ msgid "Edit"
msgstr "编辑"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Base Type:"
-msgstr "数据类型:"
+msgstr "基础类型:"
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Members:"
-msgstr "成员:"
+msgstr "成员:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Available Nodes:"
-msgstr ""
+msgstr "有效节点:"
#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
msgid "Select or create a function to edit graph"
-msgstr ""
+msgstr "在 edit graph 中选择或者建立一个函数"
#: modules/visual_script/visual_script_editor.cpp tools/editor/call_dialog.cpp
#: tools/editor/connections_dialog.cpp
@@ -254,20 +285,35 @@ msgstr "切换断点"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
msgstr "查找下一项"
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Copy Nodes"
+msgstr "拷贝姿势"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Cut Nodes"
+msgstr "新节点"
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "粘贴姿势"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
-msgstr ""
+msgstr "输入类型不可迭代: "
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid"
-msgstr ""
+msgstr "迭代器失效"
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Iterator became invalid: "
-msgstr ""
+msgstr "迭代器失效: "
#: modules/visual_script/visual_script_func_nodes.cpp
#, fuzzy
@@ -276,7 +322,7 @@ msgstr "基类名称非法"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Base object is not a Node!"
-msgstr ""
+msgstr "基础对象不是一个节点!"
#: modules/visual_script/visual_script_func_nodes.cpp
#, fuzzy
@@ -285,31 +331,23 @@ msgstr "必须是项目路径"
#: modules/visual_script/visual_script_func_nodes.cpp
msgid "Invalid index property name '%s' in node %s."
-msgstr ""
+msgstr "节点%s的'%s'为无效索引属性名。"
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid argument of type: "
-msgstr "基类名称非法"
+msgstr ":无效参数类型: "
#: modules/visual_script/visual_script_nodes.cpp
-#, fuzzy
msgid ": Invalid arguments: "
-msgstr "基类名称非法"
+msgstr ":无效参数: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableGet not found in script: "
-msgstr ""
+msgstr "脚本中未找到VariableGet: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "VariableSet not found in script: "
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
+msgstr "脚本中未找到VariableSet: "
#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
@@ -319,7 +357,7 @@ msgstr ""
msgid ""
"Invalid return value from _step(), must be integer (seq out), or string "
"(error)."
-msgstr ""
+msgstr "_step()的返回值无效,必须是整形(seq out),或字符串(error)。"
#: scene/2d/animated_sprite.cpp
msgid ""
@@ -539,7 +577,8 @@ msgstr "所有文件(*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "打开"
@@ -1032,7 +1071,7 @@ msgstr "优化"
#: tools/editor/animation_editor.cpp
msgid "Select an AnimationPlayer from the Scene Tree to edit animations."
-msgstr ""
+msgstr "在场景树中选择一个AnimationPlayer来编辑动画。"
#: tools/editor/animation_editor.cpp
msgid "Key"
@@ -1084,7 +1123,8 @@ msgstr "修改数组值"
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr "搜索:"
@@ -1242,7 +1282,7 @@ msgstr "缩小"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "重置缩放"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1335,10 +1375,16 @@ msgid "Create New"
msgstr "新建"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr "匹配项:"
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr "描述:"
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr "搜索替换:"
@@ -1654,10 +1700,6 @@ msgstr "GUI主题:"
msgid "Constants:"
msgstr "常量:"
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr "描述:"
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr "方法描述:"
@@ -2011,7 +2053,7 @@ msgstr "前往上一个打开的场景。"
#: tools/editor/editor_node.cpp
msgid "Fullscreen Mode"
-msgstr ""
+msgstr "全屏模式"
#: tools/editor/editor_node.cpp
msgid "Distraction Free Mode"
@@ -2998,7 +3040,7 @@ msgstr "源贴图:"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Base Atlas Texture"
-msgstr ""
+msgstr "基础图集纹理"
#: tools/editor/io_plugins/editor_texture_import_plugin.cpp
msgid "Source Texture(s)"
@@ -3261,7 +3303,7 @@ msgstr "从结束时间倒放选中动画(Shift+A)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Stop animation playback. (S)"
-msgstr ""
+msgstr "停止动画回放。(S)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Play selected animation from start. (Shift+D)"
@@ -3276,8 +3318,9 @@ msgid "Animation position (in seconds)."
msgstr "动画位置(单位:秒)"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
+#, fuzzy
msgid "Scale animation playback globally for the node."
-msgstr ""
+msgstr "节点全局缩放动画回放"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Create new animation in player."
@@ -3472,7 +3515,7 @@ msgstr ""
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeScale Node"
-msgstr ""
+msgstr "时间缩放节点"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "TimeSeek Node"
@@ -3480,7 +3523,7 @@ msgstr ""
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Transition Node"
-msgstr ""
+msgstr "过渡节点"
#: tools/editor/plugins/animation_tree_editor_plugin.cpp
msgid "Import Animations.."
@@ -3557,7 +3600,7 @@ msgstr "预览"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Configure Snap"
-msgstr ""
+msgstr "设置吸附"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -3670,7 +3713,7 @@ msgstr "恢复节点的子孙能够被选中。"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Use Snap"
-msgstr ""
+msgstr "使用吸附"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
@@ -3679,24 +3722,24 @@ msgstr "显示网格"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Rotation Snap"
-msgstr ""
+msgstr "使用旋转吸附"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap Relative"
-msgstr ""
+msgstr "相对吸附"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/spatial_editor_plugin.cpp
msgid "Configure Snap.."
-msgstr ""
+msgstr "设置吸附.."
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Use Pixel Snap"
-msgstr ""
+msgstr "使用像素吸附"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Expand to Parent"
-msgstr ""
+msgstr "展开父节点"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Skeleton.."
@@ -3769,7 +3812,7 @@ msgstr "设置值"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Snap (Pixels):"
-msgstr ""
+msgstr "吸附(像素):"
#: tools/editor/plugins/collision_polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/light_occluder_2d_editor_plugin.cpp
@@ -3999,7 +4042,7 @@ msgstr ""
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Couldn't map area."
-msgstr ""
+msgstr "无法绘制区域。"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Source Mesh:"
@@ -4007,7 +4050,7 @@ msgstr "选择源Mesh:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Select a Target Surface:"
-msgstr ""
+msgstr "选择一个目标曲面:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Populate Surface"
@@ -4019,7 +4062,7 @@ msgstr ""
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Target Surface:"
-msgstr ""
+msgstr "目标曲面:"
#: tools/editor/plugins/multimesh_editor_plugin.cpp
msgid "Source Mesh:"
@@ -6052,6 +6095,16 @@ msgstr "全局"
msgid "Sections:"
msgstr "选项:"
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "选择顶点"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "选择模式(Q)"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr "无法执行PVPTC工具:"
@@ -6572,8 +6625,9 @@ msgid "Change Ray Shape Length"
msgstr ""
#: tools/editor/spatial_editor_gizmos.cpp
+#, fuzzy
msgid "Change Notifier Extents"
-msgstr ""
+msgstr "更改通知器级别"
#~ msgid "Cannot go into subdir:"
#~ msgstr "无法打开目录:"
diff --git a/tools/translations/zh_HK.po b/tools/translations/zh_HK.po
index 71e2a699b1..1d2ab3f8fb 100644
--- a/tools/translations/zh_HK.po
+++ b/tools/translations/zh_HK.po
@@ -2,18 +2,21 @@
# Copyright (C) 2016 Juan Linietsky, Ariel Manzur and the Godot community
# This file is distributed under the same license as the Godot source code.
#
-# Wesley <ZX_WT@ymail.com>, 2016.
+# Wesley (zx-wt) <ZX_WT@ymail.com>, 2016.
#
msgid ""
msgstr ""
"Project-Id-Version: Godot Engine editor\n"
-"PO-Revision-Date: 2016-05-30 16:42+0800\n"
-"Last-Translator: Wesley <ZX_WT@ymail.com>\n"
-"Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
+"PO-Revision-Date: 2016-08-13 09:55+0000\n"
+"Last-Translator: zx-wt <ZX_WT@ymail.com>\n"
+"Language-Team: Chinese (Hong Kong) <https://hosted.weblate.org/projects/"
+"godot-engine/godot/zh_HK/>\n"
"Language: zh_HK\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 2.8-dev\n"
#: modules/gdscript/gd_functions.cpp
#: modules/visual_script/visual_script_builtin_funcs.cpp
@@ -98,7 +101,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp tools/editor/editor_help.cpp
msgid "Signals:"
-msgstr ""
+msgstr "訊號:"
#: modules/visual_script/visual_script_editor.cpp
msgid "Name is not a valid identifier:"
@@ -132,7 +135,7 @@ msgstr ""
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Signal"
-msgstr ""
+msgstr "新增訊號"
#: modules/visual_script/visual_script_editor.cpp
#, fuzzy
@@ -159,21 +162,50 @@ msgstr "連接"
#: modules/visual_script/visual_script_editor.cpp
msgid "Add Node"
+msgstr "新增節點"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Add Preload Node"
+msgstr "新增節點"
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
+msgstr "由主幹新增節點"
+
+#: modules/visual_script/visual_script_editor.cpp
msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -225,9 +257,8 @@ msgid "Change"
msgstr "當改變時更新"
#: modules/visual_script/visual_script_editor.cpp
-#, fuzzy
msgid "Delete Selected"
-msgstr "要刪除選中檔案?"
+msgstr "刪除選中檔案"
#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -235,9 +266,22 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
msgstr ""
+#: modules/visual_script/visual_script_editor.cpp
+#, fuzzy
+msgid "Paste Nodes"
+msgstr "貼上"
+
#: modules/visual_script/visual_script_flow_control.cpp
msgid "Input type not iterable: "
msgstr ""
@@ -283,12 +327,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -459,23 +497,23 @@ msgstr ""
#: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp
msgid "Cancel"
-msgstr ""
+msgstr "取消"
#: scene/gui/dialogs.cpp tools/editor/scene_tree_dock.cpp
msgid "OK"
-msgstr ""
+msgstr "OK"
#: scene/gui/dialogs.cpp
msgid "Alert!"
-msgstr ""
+msgstr "警告!"
#: scene/gui/dialogs.cpp
msgid "Please Confirm..."
-msgstr ""
+msgstr "請確認..."
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "File Exists, Overwrite?"
-msgstr ""
+msgstr "檔案已存在, 要覆蓋嗎?"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Recognized"
@@ -483,33 +521,31 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "All Files (*)"
-msgstr ""
+msgstr "所有檔案(*)"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr "開啟"
#: scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Open a File"
-msgstr "儲存檔案"
+msgstr "開啟檔案"
#: scene/gui/file_dialog.cpp
msgid "Open File(s)"
-msgstr ""
+msgstr "開啟檔案"
#: scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Open a Directory"
-msgstr "選擇資料夾"
+msgstr "開啟資料夾"
#: scene/gui/file_dialog.cpp
-#, fuzzy
msgid "Open a File or Directory"
-msgstr "選擇資料夾"
+msgstr "選擇資料夾/檔案"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_node.cpp
@@ -532,26 +568,26 @@ msgstr "新增資料夾"
#: tools/editor/io_plugins/editor_font_import_plugin.cpp
#: tools/editor/script_create_dialog.cpp
msgid "Path:"
-msgstr "路徑"
+msgstr "路徑:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Directories & Files:"
-msgstr ""
+msgstr "資料夾和檔案:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/script_editor_debugger.cpp
msgid "File:"
-msgstr "檔案"
+msgstr "檔案:"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Filter:"
-msgstr ""
+msgstr "篩選:"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp tools/editor/editor_plugin_settings.cpp
#: tools/editor/plugins/theme_editor_plugin.cpp
msgid "Name:"
-msgstr "名稱"
+msgstr "名稱:"
#: scene/gui/file_dialog.cpp tools/editor/editor_dir_dialog.cpp
#: tools/editor/editor_file_dialog.cpp
@@ -560,7 +596,7 @@ msgstr "無法新增資料夾"
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
msgid "Must use a valid extension."
-msgstr ""
+msgstr "請用有效的副檔名"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
#: tools/editor/settings_config_dialog.cpp
@@ -583,7 +619,7 @@ msgstr ""
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Device"
-msgstr ""
+msgstr "設備"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Button"
@@ -591,27 +627,28 @@ msgstr ""
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Left Button."
-msgstr ""
+msgstr "左𨫡"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Right Button."
-msgstr ""
+msgstr "右𨫡"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Middle Button."
-msgstr ""
+msgstr "中𨫡"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Wheel Up."
-msgstr ""
+msgstr "上滾"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
msgid "Wheel Down."
-msgstr ""
+msgstr "下滾"
#: scene/gui/input_action.cpp tools/editor/project_settings.cpp
+#, fuzzy
msgid "Axis"
-msgstr ""
+msgstr "中軸"
#: scene/gui/line_edit.cpp scene/gui/text_edit.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -692,7 +729,7 @@ msgstr "無效字型"
#: tools/editor/animation_editor.cpp
msgid "Disabled"
-msgstr ""
+msgstr "已停用"
#: tools/editor/animation_editor.cpp
msgid "All Selection"
@@ -776,9 +813,8 @@ msgid "Duplicate Transposed"
msgstr ""
#: tools/editor/animation_editor.cpp
-#, fuzzy
msgid "Remove Selection"
-msgstr "只限選中"
+msgstr "移除選項"
#: tools/editor/animation_editor.cpp
msgid "Continuous"
@@ -1029,7 +1065,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1068,9 +1105,8 @@ msgid "Community"
msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp
-#, fuzzy
msgid "Testing"
-msgstr "設定"
+msgstr "測試"
#: tools/editor/asset_library_editor_plugin.cpp
msgid "Assets ZIP File"
@@ -1142,7 +1178,7 @@ msgstr ""
#: tools/editor/code_editor.cpp tools/editor/editor_help.cpp
msgid "Find"
-msgstr ""
+msgstr "查找"
#: tools/editor/code_editor.cpp
msgid "Next"
@@ -1162,7 +1198,7 @@ msgstr "替換為"
#: tools/editor/code_editor.cpp
msgid "Case Sensitive"
-msgstr ""
+msgstr "符合大小寫"
#: tools/editor/code_editor.cpp
msgid "Backwards"
@@ -1179,16 +1215,16 @@ msgstr "跳過"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom In"
-msgstr ""
+msgstr "放大"
#: tools/editor/code_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Zoom Out"
-msgstr ""
+msgstr "縮小"
#: tools/editor/code_editor.cpp
msgid "Reset Zoom"
-msgstr ""
+msgstr "重設縮放比例"
#: tools/editor/code_editor.cpp tools/editor/script_editor_debugger.cpp
msgid "Line:"
@@ -1255,9 +1291,8 @@ msgid "Connect '%s' to '%s'"
msgstr "由 '%s' 連到 '%s'"
#: tools/editor/connections_dialog.cpp
-#, fuzzy
msgid "Connecting Signal:"
-msgstr "連接"
+msgstr "連接訊號:"
#: tools/editor/connections_dialog.cpp
msgid "Create Subscription"
@@ -1274,17 +1309,23 @@ msgstr "中斷"
#: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp
msgid "Signals"
-msgstr ""
+msgstr "訊號"
#: tools/editor/create_dialog.cpp
msgid "Create New"
-msgstr ""
+msgstr "新增"
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1421,14 +1462,12 @@ msgid "Invalid name. Must not collide with an existing global constant name."
msgstr ""
#: tools/editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "Invalid Path."
-msgstr "有效路徑"
+msgstr "有效的路徑"
#: tools/editor/editor_autoload_settings.cpp
-#, fuzzy
msgid "File does not exist."
-msgstr "檔案已存在"
+msgstr "檔案不存在."
#: tools/editor/editor_autoload_settings.cpp
msgid "Not in resource path."
@@ -1534,9 +1573,8 @@ msgid "Toggle Mode"
msgstr ""
#: tools/editor/editor_file_dialog.cpp
-#, fuzzy
msgid "Focus Path"
-msgstr "複製"
+msgstr ""
#: tools/editor/editor_file_dialog.cpp
#, fuzzy
@@ -1558,7 +1596,7 @@ msgstr "最近:"
#: tools/editor/editor_file_dialog.cpp
msgid "Preview:"
-msgstr "預覽"
+msgstr "預覽:"
#: tools/editor/editor_file_system.cpp
msgid "ScanSources"
@@ -1605,10 +1643,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -1659,7 +1693,7 @@ msgstr ""
#: tools/editor/editor_node.cpp
msgid "Importing:"
-msgstr "導入中"
+msgstr "導入中:"
#: tools/editor/editor_node.cpp
msgid "Node From Scene"
@@ -1900,9 +1934,8 @@ msgid ""
msgstr ""
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Pick a Main Scene"
-msgstr "儲存場景"
+msgstr "選擇主場景"
#: tools/editor/editor_node.cpp tools/editor/scene_tree_dock.cpp
msgid "Ugh"
@@ -1993,9 +2026,8 @@ msgid "Save Scene"
msgstr "儲存場景"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Save all Scenes"
-msgstr "儲存場景"
+msgstr "儲存所有場景"
#: tools/editor/editor_node.cpp
msgid "Close Scene"
@@ -2096,9 +2128,8 @@ msgid "Pause the scene"
msgstr ""
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Pause Scene"
-msgstr "儲存場景"
+msgstr "暫停場景"
#: tools/editor/editor_node.cpp
msgid "Stop the scene."
@@ -2110,23 +2141,20 @@ msgid "Stop"
msgstr ""
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Play the edited scene."
-msgstr "請先儲存場景"
+msgstr "運行修改的場景"
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Play Scene"
-msgstr "儲存場景"
+msgstr "運行場景"
#: tools/editor/editor_node.cpp
msgid "Play custom scene"
msgstr ""
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Play Custom Scene"
-msgstr "儲存場景"
+msgstr "運行場景"
#: tools/editor/editor_node.cpp
msgid "Debug options"
@@ -2189,9 +2217,8 @@ msgid ""
msgstr ""
#: tools/editor/editor_node.cpp
-#, fuzzy
msgid "Sync Script Changes"
-msgstr "當改變時更新"
+msgstr "同步更新腳本"
#: tools/editor/editor_node.cpp
msgid ""
@@ -2435,7 +2462,7 @@ msgstr ""
#: tools/editor/editor_sub_scene.cpp
msgid "Scene Path:"
-msgstr "場景路徑"
+msgstr "場景路徑:"
#: tools/editor/editor_sub_scene.cpp
msgid "Import From Node:"
@@ -2482,9 +2509,8 @@ msgid "View Owners.."
msgstr ""
#: tools/editor/filesystem_dock.cpp
-#, fuzzy
msgid "Copy Path"
-msgstr "複製"
+msgstr "複製路徑"
#: tools/editor/filesystem_dock.cpp
msgid "Rename or Move.."
@@ -3238,9 +3264,8 @@ msgid "Save the current animation"
msgstr ""
#: tools/editor/plugins/animation_player_editor_plugin.cpp
-#, fuzzy
msgid "Save As"
-msgstr "另存為.."
+msgstr "另存為"
#: tools/editor/plugins/animation_player_editor_plugin.cpp
msgid "Display list of animations in player."
@@ -3549,9 +3574,8 @@ msgid "Paste Pose"
msgstr ""
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Select Mode"
-msgstr "不選"
+msgstr "選擇模式"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Drag: Rotate"
@@ -3570,9 +3594,8 @@ msgid "Alt+RMB: Depth list selection"
msgstr ""
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
-#, fuzzy
msgid "Move Mode"
-msgstr "下移"
+msgstr "移動模式"
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
msgid "Rotate Mode"
@@ -4341,9 +4364,8 @@ msgid "Save Theme As.."
msgstr ""
#: tools/editor/plugins/script_editor_plugin.cpp
-#, fuzzy
msgid "Next script"
-msgstr "下一個"
+msgstr "下一個腳本"
#: tools/editor/plugins/script_editor_plugin.cpp
msgid "Previous script"
@@ -5984,6 +6006,16 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Property"
+msgstr "選擇模式"
+
+#: tools/editor/property_selector.cpp
+#, fuzzy
+msgid "Select Method"
+msgstr "選擇模式"
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""
@@ -6386,7 +6418,7 @@ msgstr ""
#: tools/editor/script_editor_debugger.cpp
msgid "Errors:"
-msgstr "錯誤"
+msgstr "錯誤:"
#: tools/editor/script_editor_debugger.cpp
msgid "Stack Trace (if applicable):"
diff --git a/tools/translations/zh_TW.po b/tools/translations/zh_TW.po
index 17e7673fc3..9be46b18e8 100644
--- a/tools/translations/zh_TW.po
+++ b/tools/translations/zh_TW.po
@@ -158,11 +158,35 @@ msgid "Add Node"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Node(s) From Tree"
+msgid "Hold Meta to drop a Getter. Hold Shift to drop a generic signature."
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Add Setter Property"
+msgid "Hold Ctrl to drop a Getter. Hold Shift to drop a generic signature."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a simple reference to the node."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Meta to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Hold Ctrl to drop a Variable Setter."
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Preload Node"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Node(s) From Tree"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
@@ -170,6 +194,10 @@ msgid "Add Getter Property"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
+msgid "Add Setter Property"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
#: tools/editor/plugins/canvas_item_editor_plugin.cpp
#: tools/editor/plugins/polygon_2d_editor_plugin.cpp
#: tools/editor/plugins/script_text_editor.cpp
@@ -229,7 +257,19 @@ msgid "Toggle Breakpoint"
msgstr ""
#: modules/visual_script/visual_script_editor.cpp
-msgid "Find Node Tyoe"
+msgid "Find Node Type"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Copy Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Cut Nodes"
+msgstr ""
+
+#: modules/visual_script/visual_script_editor.cpp
+msgid "Paste Nodes"
msgstr ""
#: modules/visual_script/visual_script_flow_control.cpp
@@ -277,12 +317,6 @@ msgid "VariableSet not found in script: "
msgstr ""
#: modules/visual_script/visual_script_nodes.cpp
-msgid ""
-"Custom node has no _get_output_port_unsequenced(idx,wmem), but unsequenced "
-"ports were specified."
-msgstr ""
-
-#: modules/visual_script/visual_script_nodes.cpp
msgid "Custom node has no _step() method, can't process graph."
msgstr ""
@@ -488,7 +522,8 @@ msgstr ""
#: scene/gui/file_dialog.cpp tools/editor/editor_file_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
#: tools/editor/filesystem_dock.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Open"
msgstr ""
@@ -1024,7 +1059,8 @@ msgstr ""
#: tools/editor/asset_library_editor_plugin.cpp tools/editor/create_dialog.cpp
#: tools/editor/editor_help.cpp tools/editor/editor_node.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
#: tools/editor/settings_config_dialog.cpp
msgid "Search:"
msgstr ""
@@ -1273,10 +1309,16 @@ msgid "Create New"
msgstr ""
#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
-#: tools/editor/plugins/script_editor_plugin.cpp tools/editor/quick_open.cpp
+#: tools/editor/plugins/script_editor_plugin.cpp
+#: tools/editor/property_selector.cpp tools/editor/quick_open.cpp
msgid "Matches:"
msgstr ""
+#: tools/editor/create_dialog.cpp tools/editor/editor_help.cpp
+#: tools/editor/property_selector.cpp tools/editor/script_editor_debugger.cpp
+msgid "Description:"
+msgstr ""
+
#: tools/editor/dependency_editor.cpp
msgid "Search Replacement For:"
msgstr ""
@@ -1592,10 +1634,6 @@ msgstr ""
msgid "Constants:"
msgstr ""
-#: tools/editor/editor_help.cpp tools/editor/script_editor_debugger.cpp
-msgid "Description:"
-msgstr ""
-
#: tools/editor/editor_help.cpp
msgid "Method Description:"
msgstr ""
@@ -5955,6 +5993,14 @@ msgstr ""
msgid "Sections:"
msgstr ""
+#: tools/editor/property_selector.cpp
+msgid "Select Property"
+msgstr ""
+
+#: tools/editor/property_selector.cpp
+msgid "Select Method"
+msgstr ""
+
#: tools/editor/pvrtc_compress.cpp
msgid "Could not execute PVRTC tool:"
msgstr ""