diff options
-rw-r--r-- | core/os/input.cpp | 4 | ||||
-rw-r--r-- | core/os/input.h | 5 | ||||
-rw-r--r-- | doc/base/classes.xml | 37 | ||||
-rw-r--r-- | main/input_default.cpp | 47 | ||||
-rw-r--r-- | main/input_default.h | 17 | ||||
-rw-r--r-- | platform/x11/joystick_linux.cpp | 74 | ||||
-rw-r--r-- | platform/x11/joystick_linux.h | 7 | ||||
-rw-r--r-- | scene/animation/animation_tree_player.cpp | 2 | ||||
-rwxr-xr-x | tools/Godot.app/Contents/Info.plist | 2 | ||||
-rw-r--r-- | tools/editor/plugins/script_editor_plugin.cpp | 94 | ||||
-rw-r--r-- | tools/editor/plugins/shader_editor_plugin.cpp | 22 | ||||
-rw-r--r-- | tools/translations/ru.po | 177 |
12 files changed, 333 insertions, 155 deletions
diff --git a/core/os/input.cpp b/core/os/input.cpp index a766ef87fc..005a248aac 100644 --- a/core/os/input.cpp +++ b/core/os/input.cpp @@ -59,6 +59,10 @@ void Input::_bind_methods() { ObjectTypeDB::bind_method(_MD("get_joy_axis","device","axis"),&Input::get_joy_axis); ObjectTypeDB::bind_method(_MD("get_joy_name","device"),&Input::get_joy_name); ObjectTypeDB::bind_method(_MD("get_joy_guid","device"),&Input::get_joy_guid); + ObjectTypeDB::bind_method(_MD("get_joy_vibration_strength", "device"), &Input::get_joy_vibration_strength); + ObjectTypeDB::bind_method(_MD("get_joy_vibration_duration", "device"), &Input::get_joy_vibration_duration); + ObjectTypeDB::bind_method(_MD("start_joy_vibration", "device", "weak_magnitude", "strong_magnitude", "duration"), &Input::start_joy_vibration); + ObjectTypeDB::bind_method(_MD("stop_joy_vibration", "device"), &Input::stop_joy_vibration); ObjectTypeDB::bind_method(_MD("get_accelerometer"),&Input::get_accelerometer); ObjectTypeDB::bind_method(_MD("get_magnetometer"),&Input::get_magnetometer); //ObjectTypeDB::bind_method(_MD("get_mouse_pos"),&Input::get_mouse_pos); - this is not the function you want diff --git a/core/os/input.h b/core/os/input.h index 46edb30aa1..6364d597b0 100644 --- a/core/os/input.h +++ b/core/os/input.h @@ -67,6 +67,11 @@ public: virtual void remove_joy_mapping(String p_guid)=0; virtual bool is_joy_known(int p_device)=0; virtual String get_joy_guid(int p_device) const=0; + virtual Vector2 get_joy_vibration_strength(int p_device)=0; + virtual float get_joy_vibration_duration(int p_device)=0; + virtual uint64_t get_joy_vibration_timestamp(int p_device)=0; + virtual void start_joy_vibration(int p_device, float p_weak_magnitude, float p_strong_magnitude, float p_duration)=0; + virtual void stop_joy_vibration(int p_device)=0; virtual Point2 get_mouse_pos() const=0; virtual Point2 get_mouse_speed() const=0; diff --git a/doc/base/classes.xml b/doc/base/classes.xml index 4f01a3e7a1..5a8e695a64 100644 --- a/doc/base/classes.xml +++ b/doc/base/classes.xml @@ -15788,6 +15788,23 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8) Returns a SDL2 compatible device guid on platforms that use gamepad remapping. Returns "Default Gamepad" otherwise. </description> </method> + <method name="get_joy_vibration_strength"> + <return type="Vector2"> + </return> + <argument index="0" name="device" type="int"> + </argument> + <description> + 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_joy_vibration_duration"> + <return type="float"> + </return> + <argument index="0" name="device" type="int"> + </argument> + <description> + Returns the duration of the current vibration effect in seconds. + </description> <method name="get_accelerometer"> <return type="Vector3"> </return> @@ -15830,6 +15847,26 @@ Example: (content-length:12), (Content-Type:application/json; charset=UTF-8) Return the mouse mode. See the constants for more information. </description> </method> + <method name="start_joy_vibration"> + <argument index="0" name="device" type="int"> + </argument> + <argument index="1" name="weak_magnitude" type="float"> + </argument> + <argument index="2" name="strong_magnitude" type="float"> + </argument> + <argument index="3" name="duration" type="float"> + </argument> + <description> + Starts to vibrate the joystick. Joysticks usually come with two rumble motors, a strong and a weak one. weak_magnitude is the strength of the weak motor (between 0 and 1) and strong_magnitude is the strength of the strong motor (between 0 and 1). duration is the duration of the effect in seconds (a duration of 0 will play the vibration indefinitely). + </description> + </method> + <method name="stop_joy_vibration"> + <argument index="0" name="device" type="int"> + </argument> + <description> + Stops the vibration of the joystick. + </description> + </method> <method name="warp_mouse_pos"> <argument index="0" name="to" type="Vector2"> </argument> diff --git a/main/input_default.cpp b/main/input_default.cpp index e36306727d..a6f14ae1f5 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -137,6 +137,30 @@ String InputDefault::get_joy_name(int p_idx) { return joy_names[p_idx].name; }; +Vector2 InputDefault::get_joy_vibration_strength(int p_device) { + if (joy_vibration.has(p_device)) { + return Vector2(joy_vibration[p_device].weak_magnitude, joy_vibration[p_device].strong_magnitude); + } else { + return Vector2(0, 0); + } +} + +uint64_t InputDefault::get_joy_vibration_timestamp(int p_device) { + if (joy_vibration.has(p_device)) { + return joy_vibration[p_device].timestamp; + } else { + return 0; + } +} + +float InputDefault::get_joy_vibration_duration(int p_device) { + if (joy_vibration.has(p_device)) { + return joy_vibration[p_device].duration; + } else { + return 0.f; + } +} + static String _hex_str(uint8_t p_byte) { static const char* dict = "0123456789abcdef"; @@ -294,6 +318,29 @@ void InputDefault::set_joy_axis(int p_device,int p_axis,float p_value) { _joy_axis[c]=p_value; } +void InputDefault::start_joy_vibration(int p_device, float p_weak_magnitude, float p_strong_magnitude, float p_duration) { + _THREAD_SAFE_METHOD_ + if (p_weak_magnitude < 0.f || p_weak_magnitude > 1.f || p_strong_magnitude < 0.f || p_strong_magnitude > 1.f) { + return; + } + VibrationInfo vibration; + vibration.weak_magnitude = p_weak_magnitude; + vibration.strong_magnitude = p_strong_magnitude; + vibration.duration = p_duration; + vibration.timestamp = OS::get_singleton()->get_unix_time(); + joy_vibration[p_device] = vibration; +} + +void InputDefault::stop_joy_vibration(int p_device) { + _THREAD_SAFE_METHOD_ + VibrationInfo vibration; + vibration.weak_magnitude = 0; + vibration.strong_magnitude = 0; + vibration.duration = 0; + vibration.timestamp = OS::get_singleton()->get_unix_time(); + joy_vibration[p_device] = vibration; +} + void InputDefault::set_accelerometer(const Vector3& p_accel) { _THREAD_SAFE_METHOD_ diff --git a/main/input_default.h b/main/input_default.h index 8f6a430436..01b813f3ca 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -3,6 +3,7 @@ #include "os/input.h" + class InputDefault : public Input { OBJ_TYPE( InputDefault, Input ); @@ -19,6 +20,16 @@ class InputDefault : public Input { MainLoop *main_loop; bool emulate_touch; + + struct VibrationInfo { + float weak_magnitude; + float strong_magnitude; + float duration; // Duration in seconds + uint64_t timestamp; + }; + + Map<int, VibrationInfo> joy_vibration; + struct SpeedTrack { uint64_t last_tick; @@ -129,6 +140,9 @@ public: virtual float get_joy_axis(int p_device,int p_axis); String get_joy_name(int p_idx); + virtual Vector2 get_joy_vibration_strength(int p_device); + virtual float get_joy_vibration_duration(int p_device); + virtual uint64_t get_joy_vibration_timestamp(int p_device); 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); @@ -147,6 +161,9 @@ public: void set_magnetometer(const Vector3& p_magnetometer); void set_joy_axis(int p_device,int p_axis,float p_value); + virtual void start_joy_vibration(int p_device, float p_weak_magnitude, float p_strong_magnitude, float p_duration); + virtual void stop_joy_vibration(int p_device); + void set_main_loop(MainLoop *main_loop); void set_mouse_pos(const Point2& p_posf); diff --git a/platform/x11/joystick_linux.cpp b/platform/x11/joystick_linux.cpp index 2793cc5734..5ce0219df7 100644 --- a/platform/x11/joystick_linux.cpp +++ b/platform/x11/joystick_linux.cpp @@ -316,13 +316,21 @@ void joystick_linux::setup_joystick_properties(int p_id) { } } } -} + joy->force_feedback = false; + joy->ff_effect_timestamp = 0; + unsigned long ffbit[NBITS(FF_CNT)]; + if (ioctl(joy->fd, EVIOCGBIT(EV_FF, sizeof(ffbit)), ffbit) != -1) { + if (test_bit(FF_RUMBLE, ffbit)) { + joy->force_feedback = true; + } + } +} void joystick_linux::open_joystick(const char *p_path) { int joy_num = get_free_joy_slot(); - int fd = open(p_path, O_RDONLY | O_NONBLOCK); + int fd = open(p_path, O_RDWR | O_NONBLOCK); if (fd != -1 && joy_num != -1) { unsigned long evbit[NBITS(EV_MAX)] = { 0 }; @@ -392,6 +400,55 @@ void joystick_linux::open_joystick(const char *p_path) { } } +void joystick_linux::joystick_vibration_start(int p_id, float p_weak_magnitude, float p_strong_magnitude, float p_duration, uint64_t p_timestamp) +{ + Joystick& joy = joysticks[p_id]; + if (!joy.force_feedback || joy.fd == -1 || p_weak_magnitude < 0.f || p_weak_magnitude > 1.f || p_strong_magnitude < 0.f || p_strong_magnitude > 1.f) { + return; + } + if (joy.ff_effect_id != -1) { + joystick_vibration_stop(p_id, p_timestamp); + } + + struct ff_effect effect; + effect.type = FF_RUMBLE; + effect.id = -1; + effect.u.rumble.weak_magnitude = floor(p_weak_magnitude * (float)0xffff); + effect.u.rumble.strong_magnitude = floor(p_strong_magnitude * (float)0xffff); + effect.replay.length = floor(p_duration * 1000); + effect.replay.delay = 0; + + if (ioctl(joy.fd, EVIOCSFF, &effect) < 0) { + return; + } + + struct input_event play; + play.type = EV_FF; + play.code = effect.id; + play.value = 1; + write(joy.fd, (const void*)&play, sizeof(play)); + + joy.ff_effect_id = effect.id; + joy.ff_effect_timestamp = p_timestamp; +} + +void joystick_linux::joystick_vibration_stop(int p_id, uint64_t p_timestamp) +{ + Joystick& joy = joysticks[p_id]; + if (!joy.force_feedback || joy.fd == -1 || joy.ff_effect_id == -1) { + return; + } + + struct input_event stop; + stop.type = EV_FF; + stop.code = joy.ff_effect_id; + stop.value = 0; + write(joy.fd, (const void*)&stop, sizeof(stop)); + + joy.ff_effect_id = -1; + joy.ff_effect_timestamp = p_timestamp; +} + InputDefault::JoyAxis joystick_linux::axis_correct(const input_absinfo *p_abs, int p_value) const { int min = p_abs->minimum; @@ -485,6 +542,19 @@ uint32_t joystick_linux::process_joysticks(uint32_t p_event_id) { if (len == 0 || (len < 0 && errno != EAGAIN)) { close_joystick(i); }; + + if (joy->force_feedback) { + uint64_t timestamp = input->get_joy_vibration_timestamp(i); + if (timestamp > joy->ff_effect_timestamp) { + Vector2 strength = input->get_joy_vibration_strength(i); + float duration = input->get_joy_vibration_duration(i); + if (strength.x == 0 && strength.y == 0) { + joystick_vibration_stop(i, timestamp); + } else { + joystick_vibration_start(i, strength.x, strength.y, duration, timestamp); + } + } + } } joy_mutex->unlock(); return p_event_id; diff --git a/platform/x11/joystick_linux.h b/platform/x11/joystick_linux.h index 4f0533721b..7ea2664ebb 100644 --- a/platform/x11/joystick_linux.h +++ b/platform/x11/joystick_linux.h @@ -61,6 +61,10 @@ private: String devpath; input_absinfo *abs_info[MAX_ABS]; + bool force_feedback; + int ff_effect_id; + uint64_t ff_effect_timestamp; + Joystick(); ~Joystick(); void reset(); @@ -88,6 +92,9 @@ private: void run_joystick_thread(); void open_joystick(const char* path); + void joystick_vibration_start(int p_id, float p_weak_magnitude, float p_strong_magnitude, float p_duration, uint64_t p_timestamp); + void joystick_vibration_stop(int p_id, uint64_t p_timestamp); + InputDefault::JoyAxis axis_correct(const input_absinfo *abs, int value) const; }; diff --git a/scene/animation/animation_tree_player.cpp b/scene/animation/animation_tree_player.cpp index 211c5961b0..0f7ed1cb29 100644 --- a/scene/animation/animation_tree_player.cpp +++ b/scene/animation/animation_tree_player.cpp @@ -669,7 +669,7 @@ float AnimationTreePlayer::_process_node(const StringName& p_node,AnimationNode } tsn->seek_pos=-1; - return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time,p_seek); + return _process_node(tsn->inputs[0].node,r_prev_anim,p_weight,p_time,p_seek, p_filter, p_reverse_weight); } break; case NODE_TRANSITION: { diff --git a/tools/Godot.app/Contents/Info.plist b/tools/Godot.app/Contents/Info.plist index 2b58162ae8..37c80fc8a3 100755 --- a/tools/Godot.app/Contents/Info.plist +++ b/tools/Godot.app/Contents/Info.plist @@ -34,7 +34,7 @@ <string>10.6.0</string> </dict> <key>NSHighResolutionCapable</key> - <false/> + <true/> <key>CFBundleDocumentTypes</key> <array> <dict> diff --git a/tools/editor/plugins/script_editor_plugin.cpp b/tools/editor/plugins/script_editor_plugin.cpp index 4ab5dddef6..a313b0053a 100644 --- a/tools/editor/plugins/script_editor_plugin.cpp +++ b/tools/editor/plugins/script_editor_plugin.cpp @@ -2620,72 +2620,72 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { file_menu = memnew( MenuButton ); menu_hb->add_child(file_menu); file_menu->set_text(TTR("File")); - file_menu->get_popup()->add_item(TTR("New"),FILE_NEW); - file_menu->get_popup()->add_item(TTR("Open"),FILE_OPEN); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/new", TTR("New")), FILE_NEW); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/open", TTR("Open")), FILE_OPEN); file_menu->get_popup()->add_separator(); - file_menu->get_popup()->add_item(TTR("Save"),FILE_SAVE,KEY_MASK_ALT|KEY_MASK_CMD|KEY_S); - file_menu->get_popup()->add_item(TTR("Save As.."),FILE_SAVE_AS); - file_menu->get_popup()->add_item(TTR("Save All"),FILE_SAVE_ALL,KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_S); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save", TTR("Save"), KEY_MASK_ALT|KEY_MASK_CMD|KEY_S), FILE_SAVE); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_as", TTR("Save As..")), FILE_SAVE_AS); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_all", TTR("Save All"), KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_S), FILE_SAVE_ALL); file_menu->get_popup()->add_separator(); - file_menu->get_popup()->add_item(TTR("History Prev"),WINDOW_PREV,KEY_MASK_CTRL|KEY_MASK_ALT|KEY_LEFT); - file_menu->get_popup()->add_item(TTR("History Next"),WINDOW_NEXT,KEY_MASK_CTRL|KEY_MASK_ALT|KEY_RIGHT); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_previous", TTR("History Prev"), KEY_MASK_CTRL|KEY_MASK_ALT|KEY_LEFT), WINDOW_PREV); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/history_next", TTR("History Next"), KEY_MASK_CTRL|KEY_MASK_ALT|KEY_RIGHT), WINDOW_NEXT); file_menu->get_popup()->add_separator(); - file_menu->get_popup()->add_item(TTR("Import Theme"), FILE_IMPORT_THEME); - file_menu->get_popup()->add_item(TTR("Reload Theme"), FILE_RELOAD_THEME); - file_menu->get_popup()->add_item(TTR("Save Theme"), FILE_SAVE_THEME); - file_menu->get_popup()->add_item(TTR("Save Theme As"), FILE_SAVE_THEME_AS); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/import_theme", TTR("Import Theme")), FILE_IMPORT_THEME); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_theme", TTR("Reload Theme")), FILE_RELOAD_THEME); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_theme", TTR("Save Theme")), FILE_SAVE_THEME); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/save_theme_as", TTR("Save Theme As")), FILE_SAVE_THEME_AS); file_menu->get_popup()->add_separator(); - file_menu->get_popup()->add_item(TTR("Close"),FILE_CLOSE,KEY_MASK_CMD|KEY_W); + file_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/close_file", TTR("Close"), KEY_MASK_CMD|KEY_W), FILE_CLOSE); file_menu->get_popup()->connect("item_pressed", this,"_menu_option"); edit_menu = memnew( MenuButton ); menu_hb->add_child(edit_menu); edit_menu->set_text(TTR("Edit")); - edit_menu->get_popup()->add_item(TTR("Undo"),EDIT_UNDO,KEY_MASK_CMD|KEY_Z); - edit_menu->get_popup()->add_item(TTR("Redo"),EDIT_REDO,KEY_MASK_CMD|KEY_Y); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/undo", TTR("Undo"), KEY_MASK_CMD|KEY_Z), EDIT_UNDO); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/redo", TTR("Redo"), KEY_MASK_CMD|KEY_Y), EDIT_REDO); edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_item(TTR("Cut"),EDIT_CUT,KEY_MASK_CMD|KEY_X); - edit_menu->get_popup()->add_item(TTR("Copy"),EDIT_COPY,KEY_MASK_CMD|KEY_C); - edit_menu->get_popup()->add_item(TTR("Paste"),EDIT_PASTE,KEY_MASK_CMD|KEY_V); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/cut", TTR("Cut"), KEY_MASK_CMD|KEY_X), EDIT_CUT); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/copy", TTR("Copy"), KEY_MASK_CMD|KEY_C), EDIT_COPY); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/paste", TTR("Paste"), KEY_MASK_CMD|KEY_V), EDIT_PASTE); edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_item(TTR("Select All"),EDIT_SELECT_ALL,KEY_MASK_CMD|KEY_A); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/select_all", TTR("Select All"), KEY_MASK_CMD|KEY_A), EDIT_SELECT_ALL); edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_item(TTR("Move Up"),EDIT_MOVE_LINE_UP,KEY_MASK_ALT|KEY_UP); - edit_menu->get_popup()->add_item(TTR("Move Down"),EDIT_MOVE_LINE_DOWN,KEY_MASK_ALT|KEY_DOWN); - edit_menu->get_popup()->add_item(TTR("Indent Left"),EDIT_INDENT_LEFT,KEY_MASK_ALT|KEY_LEFT); - edit_menu->get_popup()->add_item(TTR("Indent Right"),EDIT_INDENT_RIGHT,KEY_MASK_ALT|KEY_RIGHT); - edit_menu->get_popup()->add_item(TTR("Toggle Comment"),EDIT_TOGGLE_COMMENT,KEY_MASK_CMD|KEY_K); - edit_menu->get_popup()->add_item(TTR("Clone Down"),EDIT_CLONE_DOWN,KEY_MASK_CMD|KEY_B); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/move_up", TTR("Move Up"), KEY_MASK_ALT|KEY_UP), EDIT_MOVE_LINE_UP); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/move_down", TTR("Move Down"), KEY_MASK_ALT|KEY_DOWN), EDIT_MOVE_LINE_DOWN); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/indent_left", TTR("Indent Left"), KEY_MASK_ALT|KEY_LEFT), EDIT_INDENT_LEFT); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/indent_right", TTR("Indent Right"), KEY_MASK_ALT|KEY_RIGHT), EDIT_INDENT_RIGHT); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/toggle_comment", TTR("Toggle Comment"), KEY_MASK_CMD|KEY_K), EDIT_TOGGLE_COMMENT); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/clone_down", TTR("Clone Down"), KEY_MASK_CMD|KEY_B), EDIT_CLONE_DOWN); edit_menu->get_popup()->add_separator(); #ifdef OSX_ENABLED - edit_menu->get_popup()->add_item(TTR("Complete Symbol"),EDIT_COMPLETE,KEY_MASK_CTRL|KEY_SPACE); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CTRL|KEY_SPACE), EDIT_COMPLETE); #else - edit_menu->get_popup()->add_item(TTR("Complete Symbol"),EDIT_COMPLETE,KEY_MASK_CMD|KEY_SPACE); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/complete_symbol", TTR("Complete Symbol"), KEY_MASK_CMD|KEY_SPACE), EDIT_COMPLETE); #endif - edit_menu->get_popup()->add_item(TTR("Trim Trailing Whitespace"), EDIT_TRIM_TRAILING_WHITESAPCE, KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T); - edit_menu->get_popup()->add_item(TTR("Auto Indent"),EDIT_AUTO_INDENT,KEY_MASK_CMD|KEY_I); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/trim_trailing_whitespace", TTR("Trim Trailing Whitespace"), KEY_MASK_CTRL|KEY_MASK_ALT|KEY_T), EDIT_TRIM_TRAILING_WHITESAPCE); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/auto_indent", TTR("Auto Indent"), KEY_MASK_CMD|KEY_I), EDIT_AUTO_INDENT); edit_menu->get_popup()->connect("item_pressed", this,"_menu_option"); edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_item(TTR("Soft Reload Script"),FILE_TOOL_RELOAD_SOFT,KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_R); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/reload_script_soft", TTR("Soft Reload Script"), KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_R), FILE_TOOL_RELOAD_SOFT); search_menu = memnew( MenuButton ); menu_hb->add_child(search_menu); search_menu->set_text(TTR("Search")); - search_menu->get_popup()->add_item(TTR("Find.."),SEARCH_FIND,KEY_MASK_CMD|KEY_F); - search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3); - search_menu->get_popup()->add_item(TTR("Find Previous"),SEARCH_FIND_PREV,KEY_MASK_SHIFT|KEY_F3); - search_menu->get_popup()->add_item(TTR("Replace.."),SEARCH_REPLACE,KEY_MASK_CMD|KEY_R); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find.."), KEY_MASK_CMD|KEY_F), SEARCH_FIND); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), SEARCH_FIND_NEXT); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT|KEY_F3), SEARCH_FIND_PREV); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/replace", TTR("Replace.."), KEY_MASK_CMD|KEY_R), SEARCH_REPLACE); search_menu->get_popup()->add_separator(); - search_menu->get_popup()->add_item(TTR("Goto Function.."),SEARCH_LOCATE_FUNCTION,KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F); - search_menu->get_popup()->add_item(TTR("Goto Line.."),SEARCH_GOTO_LINE,KEY_MASK_CMD|KEY_L); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_function", TTR("Goto Function.."), KEY_MASK_SHIFT|KEY_MASK_CMD|KEY_F), SEARCH_LOCATE_FUNCTION); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_line", TTR("Goto Line.."), KEY_MASK_CMD|KEY_L), SEARCH_GOTO_LINE); search_menu->get_popup()->connect("item_pressed", this,"_menu_option"); script_search_menu = memnew( MenuButton ); menu_hb->add_child(script_search_menu); script_search_menu->set_text(TTR("Search")); - script_search_menu->get_popup()->add_item(TTR("Find.."),SEARCH_FIND,KEY_MASK_CMD|KEY_F); - script_search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3); + script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find.."), KEY_MASK_CMD|KEY_F), SEARCH_FIND); + script_search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), SEARCH_FIND_NEXT); script_search_menu->get_popup()->connect("item_pressed", this,"_menu_option"); script_search_menu->hide(); @@ -2693,19 +2693,19 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { debug_menu = memnew( MenuButton ); menu_hb->add_child(debug_menu); debug_menu->set_text(TTR("Debug")); - debug_menu->get_popup()->add_item(TTR("Toggle Breakpoint"),DEBUG_TOGGLE_BREAKPOINT,KEY_F9); - debug_menu->get_popup()->add_item(TTR("Remove All Breakpoints"), DEBUG_REMOVE_ALL_BREAKPOINTS, KEY_MASK_CTRL|KEY_MASK_SHIFT|KEY_F9); - debug_menu->get_popup()->add_item(TTR("Goto Next Breakpoint"), DEBUG_GOTO_NEXT_BREAKPOINT, KEY_MASK_CTRL|KEY_PERIOD); - debug_menu->get_popup()->add_item(TTR("Goto Previous Breakpoint"), DEBUG_GOTO_PREV_BREAKPOINT, KEY_MASK_CTRL|KEY_COMMA); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/toggle_breakpoint", TTR("Toggle Breakpoint"), KEY_F9), DEBUG_TOGGLE_BREAKPOINT); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/remove_all_breakpoints", TTR("Remove All Breakpoints"), KEY_MASK_CTRL|KEY_MASK_SHIFT|KEY_F9), DEBUG_REMOVE_ALL_BREAKPOINTS); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_next_breakpoint", TTR("Goto Next Breakpoint"), KEY_MASK_CTRL|KEY_PERIOD), DEBUG_GOTO_NEXT_BREAKPOINT); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_previous_breakpoint", TTR("Goto Previous Breakpoint"), KEY_MASK_CTRL|KEY_COMMA), DEBUG_GOTO_PREV_BREAKPOINT); debug_menu->get_popup()->add_separator(); - debug_menu->get_popup()->add_item(TTR("Step Over"),DEBUG_NEXT,KEY_F10); - debug_menu->get_popup()->add_item(TTR("Step Into"),DEBUG_STEP,KEY_F11); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_over", TTR("Step Over"), KEY_F10), DEBUG_NEXT); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/step_into", TTR("Step Into"), KEY_F11), DEBUG_STEP); debug_menu->get_popup()->add_separator(); - debug_menu->get_popup()->add_item(TTR("Break"),DEBUG_BREAK); - debug_menu->get_popup()->add_item(TTR("Continue"),DEBUG_CONTINUE); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/break", TTR("Break")), DEBUG_BREAK); + debug_menu->get_popup()->add_shortcut(ED_SHORTCUT("debugger/continue", TTR("Continue")), DEBUG_CONTINUE); debug_menu->get_popup()->add_separator(); //debug_menu->get_popup()->add_check_item("Show Debugger",DEBUG_SHOW); - debug_menu->get_popup()->add_check_item(TTR("Keep Debugger Open"),DEBUG_SHOW_KEEP_OPEN); + debug_menu->get_popup()->add_check_shortcut(ED_SHORTCUT("debugger/keep_debugger_open", TTR("Keep Debugger Open")), DEBUG_SHOW_KEEP_OPEN); debug_menu->get_popup()->connect("item_pressed", this,"_menu_option"); debug_menu->get_popup()->set_item_disabled( debug_menu->get_popup()->get_item_index(DEBUG_NEXT), true); @@ -2730,7 +2730,7 @@ ScriptEditor::ScriptEditor(EditorNode *p_editor) { help_menu = memnew( MenuButton ); menu_hb->add_child(help_menu); help_menu->set_text(TTR("Help")); - help_menu->get_popup()->add_item(TTR("Contextual"), HELP_CONTEXTUAL, KEY_MASK_SHIFT|KEY_F1); + help_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/Contextual", TTR("Contextual Help"), KEY_MASK_SHIFT|KEY_F1), HELP_CONTEXTUAL); help_menu->get_popup()->connect("item_pressed", this,"_menu_option"); menu_hb->add_spacer(); diff --git a/tools/editor/plugins/shader_editor_plugin.cpp b/tools/editor/plugins/shader_editor_plugin.cpp index 61dde9a9ef..f4b294daa5 100644 --- a/tools/editor/plugins/shader_editor_plugin.cpp +++ b/tools/editor/plugins/shader_editor_plugin.cpp @@ -496,14 +496,14 @@ ShaderEditor::ShaderEditor() { add_child(edit_menu); edit_menu->set_pos(Point2(5,-1)); edit_menu->set_text(TTR("Edit")); - edit_menu->get_popup()->add_item(TTR("Undo"),EDIT_UNDO,KEY_MASK_CMD|KEY_Z); - edit_menu->get_popup()->add_item(TTR("Redo"),EDIT_REDO,KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_Z); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/undo", TTR("Undo"), KEY_MASK_CMD|KEY_Z), EDIT_UNDO); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/redo", TTR("Redo"), KEY_MASK_CMD|KEY_MASK_SHIFT|KEY_Z), EDIT_REDO); edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_item(TTR("Cut"),EDIT_CUT,KEY_MASK_CMD|KEY_X); - edit_menu->get_popup()->add_item(TTR("Copy"),EDIT_COPY,KEY_MASK_CMD|KEY_C); - edit_menu->get_popup()->add_item(TTR("Paste"),EDIT_PASTE,KEY_MASK_CMD|KEY_V); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/cut", TTR("Cut"), KEY_MASK_CMD|KEY_X), EDIT_CUT); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/copy", TTR("Copy"), KEY_MASK_CMD|KEY_C), EDIT_COPY); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/paste", TTR("Paste"), KEY_MASK_CMD|KEY_V), EDIT_PASTE); edit_menu->get_popup()->add_separator(); - edit_menu->get_popup()->add_item(TTR("Select All"),EDIT_SELECT_ALL,KEY_MASK_CMD|KEY_A); + edit_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/select_all", TTR("Select All"), KEY_MASK_CMD|KEY_A), EDIT_SELECT_ALL); edit_menu->get_popup()->connect("item_pressed", this,"_menu_option"); @@ -511,13 +511,13 @@ ShaderEditor::ShaderEditor() { add_child(search_menu); search_menu->set_pos(Point2(38,-1)); search_menu->set_text(TTR("Search")); - search_menu->get_popup()->add_item(TTR("Find.."),SEARCH_FIND,KEY_MASK_CMD|KEY_F); - search_menu->get_popup()->add_item(TTR("Find Next"),SEARCH_FIND_NEXT,KEY_F3); - search_menu->get_popup()->add_item(TTR("Find Previous"),SEARCH_FIND_PREV,KEY_MASK_SHIFT|KEY_F3); - search_menu->get_popup()->add_item(TTR("Replace.."),SEARCH_REPLACE,KEY_MASK_CMD|KEY_R); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find", TTR("Find.."), KEY_MASK_CMD|KEY_F), SEARCH_FIND); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_next", TTR("Find Next"), KEY_F3), SEARCH_FIND_NEXT); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/find_previous", TTR("Find Previous"), KEY_MASK_SHIFT|KEY_F3), SEARCH_FIND_PREV); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/replace", TTR("Replace.."), KEY_MASK_CMD|KEY_R), SEARCH_REPLACE); search_menu->get_popup()->add_separator(); // search_menu->get_popup()->add_item("Locate Symbol..",SEARCH_LOCATE_SYMBOL,KEY_MASK_CMD|KEY_K); - search_menu->get_popup()->add_item(TTR("Goto Line.."),SEARCH_GOTO_LINE,KEY_MASK_CMD|KEY_G); + search_menu->get_popup()->add_shortcut(ED_SHORTCUT("script_editor/goto_line", TTR("Goto Line.."), KEY_MASK_CMD|KEY_G), SEARCH_GOTO_LINE); search_menu->get_popup()->connect("item_pressed", this,"_menu_option"); diff --git a/tools/translations/ru.po b/tools/translations/ru.po index aa98be2767..138aa2c858 100644 --- a/tools/translations/ru.po +++ b/tools/translations/ru.po @@ -26,7 +26,7 @@ msgid "" "order for AnimatedSprite to display frames." msgstr "" "Чтобы AnimatedSprite отображал кадры, пожалуйста установите или создайте " -"ресурс SpriteFrames в параметре 'Frames'" +"ресурс SpriteFrames в параметре 'Frames'." #: scene/2d/canvas_modulate.cpp msgid "" @@ -218,13 +218,12 @@ msgstr "" "ресурс SampleLibrary в параметре 'samples'." #: scene/3d/sprite_3d.cpp -#, fuzzy msgid "" "A SpriteFrames resource must be created or set in the 'Frames' property in " "order for AnimatedSprite3D to display frames." msgstr "" -"Чтобы AnimatedSprite отображал кадры, пожалуйста установите или создайте " -"ресурс SpriteFrames в параметре 'Frames'" +"Чтобы AnimatedSprite3D отображал кадры, пожалуйста установите или создайте " +"ресурс SpriteFrames в параметре 'Frames'." #: scene/gui/dialogs.cpp tools/editor/io_plugins/editor_scene_import_plugin.cpp msgid "Cancel" @@ -262,24 +261,20 @@ msgid "Open" msgstr "Открыть" #: scene/gui/file_dialog.cpp -#, fuzzy msgid "Open a File" -msgstr "Открыть сэмпл(ы)" +msgstr "Открыть файл" #: scene/gui/file_dialog.cpp -#, fuzzy 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 @@ -343,7 +338,7 @@ 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 @@ -715,7 +710,7 @@ msgstr "Включить индивидуальное редактировани #: tools/editor/animation_editor.cpp msgid "Anim. Optimizer" -msgstr "Оптимизатор анимации." +msgstr "Оптимизатор анимации" #: tools/editor/animation_editor.cpp msgid "Max. Linear Error:" @@ -810,22 +805,20 @@ msgid "Site:" msgstr "Сайт:" #: tools/editor/asset_library_editor_plugin.cpp -#, fuzzy 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 -#, fuzzy msgid "Testing" -msgstr "Настройки" +msgstr "Тестируемые" #: tools/editor/asset_library_editor_plugin.cpp msgid "Assets ZIP File" @@ -1018,9 +1011,8 @@ msgid "Disconnect" msgstr "Отсоединить" #: tools/editor/connections_dialog.cpp tools/editor/node_dock.cpp -#, fuzzy msgid "Signals" -msgstr "Сигналы:" +msgstr "Сигналы" #: tools/editor/create_dialog.cpp msgid "Create New" @@ -1245,7 +1237,7 @@ msgstr "Описание методов:" #: tools/editor/editor_help.cpp msgid "Search Text" -msgstr "Искать текст:" +msgstr "Искать текст" #: tools/editor/editor_import_export.cpp msgid "Added:" @@ -1280,9 +1272,8 @@ msgid "Setting Up.." msgstr "Настройка.." #: tools/editor/editor_log.cpp -#, fuzzy msgid " Output:" -msgstr "Вывод" +msgstr " Вывод:" #: tools/editor/editor_node.cpp tools/editor/editor_reimport_dialog.cpp msgid "Re-Importing" @@ -1396,9 +1387,8 @@ msgid "Copy Params" msgstr "Копировать параметры" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Paste Params" -msgstr "Вставить кадр" +msgstr "Вставить параметры" #: tools/editor/editor_node.cpp #: tools/editor/plugins/resource_preloader_editor_plugin.cpp @@ -1418,9 +1408,8 @@ msgid "Make Sub-Resources Unique" msgstr "Сделать вложенные ресурсы уникальными" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Open in Help" -msgstr "Открыть сцену" +msgstr "Открыть в справке" #: tools/editor/editor_node.cpp msgid "There is no defined scene to run." @@ -1431,6 +1420,9 @@ msgid "" "No main scene has ever been defined.\n" "Select one from \"Project Settings\" under the 'application' category." msgstr "" +"Не назначена главная сцена.\n" +"Укажите её в параметре \"main_scene\" расположенном\n" +"в \"Настройки проекта - Основное - application\"." #: tools/editor/editor_node.cpp msgid "Current scene was never saved, please save it prior to running." @@ -1550,9 +1542,8 @@ msgid "Save Layout" msgstr "Сохранить макет" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Load Layout" -msgstr "Сохранить макет" +msgstr "Загрузить макет" #: tools/editor/editor_node.cpp tools/editor/project_export.cpp msgid "Default" @@ -1616,9 +1607,8 @@ msgid "Open Recent" msgstr "Открыть последнее" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Quick Filter Files.." -msgstr "Быстрый поиск файлов.." +msgstr "Быстро отсортировать файлы.." #: tools/editor/editor_node.cpp msgid "Convert To.." @@ -1690,9 +1680,8 @@ msgid "Export" msgstr "Экспорт" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play the project." -msgstr "Запустить проект (F5)." +msgstr "Запустить проект." #: tools/editor/editor_node.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -1704,14 +1693,12 @@ msgid "Pause the scene" msgstr "Приостановить сцену" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Pause Scene" msgstr "Приостановить сцену" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Stop the scene." -msgstr "Остановить проект (F8)." +msgstr "Остановить сцену." #: tools/editor/editor_node.cpp #: tools/editor/plugins/sample_library_editor_plugin.cpp @@ -1719,14 +1706,12 @@ msgid "Stop" msgstr "Остановить" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play the edited scene." -msgstr "Запустить текущую сцену (F6)." +msgstr "Запустить текущую сцену." #: tools/editor/editor_node.cpp -#, fuzzy msgid "Play Scene" -msgstr "Сохранить сцену" +msgstr "Запустить сцену" #: tools/editor/editor_node.cpp msgid "Play custom scene" @@ -1737,19 +1722,20 @@ msgid "Debug options" msgstr "Параметры отладки" #: tools/editor/editor_node.cpp -#, fuzzy msgid "Deploy with Remote Debug" -msgstr "Развернуть удалённую отладку" +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 "" +"При экспорте или развёртывании, полученный исполняемый файл будет пытаться " +"подключиться к IP этого компьютера с целью отладки." #: tools/editor/editor_node.cpp msgid "Small Deploy with Network FS" -msgstr "" +msgstr "Небольшое развёртывание через сеть" #: tools/editor/editor_node.cpp msgid "" @@ -1760,6 +1746,11 @@ msgid "" "On Android, deploy will use the USB cable for faster performance. This option " "speeds up testing for games with a large footprint." msgstr "" +"Когда эта опция включена, экспорт или развёртывание будет создавать " +"минимальный исполняемый файл.\n" +"Файловая система проекта будет предоставляться редактором через сеть.\n" +"На Android развёртывание будет быстрее при подключении через USB.\n" +"Эта опция ускоряет тестирование больших проектов." #: tools/editor/editor_node.cpp msgid "Visible Collision Shapes" @@ -1770,6 +1761,8 @@ msgid "" "Collision shapes and raycast nodes (for 2D and 3D) will be visible on the " "running game if this option is turned on." msgstr "" +"Когда эта опция включена, области соприкосновений и ноды Raycast(в 2D и 3D) " +"будут видимыми в запущенной игре." #: tools/editor/editor_node.cpp msgid "Visible Navigation" @@ -1780,10 +1773,12 @@ 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 "" +msgstr "Синхронизация изменений на сцене" #: tools/editor/editor_node.cpp msgid "" @@ -1792,11 +1787,14 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Когда эта опция включена, все изменения, внесённые на сцену, в редакторе " +"будут перенесены в запущенную игру.\n" +"При удалённом использовании на устройстве, это работает более эффективно с " +"сетевой файловой системой." #: tools/editor/editor_node.cpp -#, fuzzy msgid "Sync Script Changes" -msgstr "Обновлять при изменениях" +msgstr "Синхронизация изменений в скриптах" #: tools/editor/editor_node.cpp msgid "" @@ -1805,6 +1803,10 @@ msgid "" "When used remotely on a device, this is more efficient with network " "filesystem." msgstr "" +"Когда эта опция включена, любой сохранённый скрипт будет перезагружен в " +"запущенную игру.\n" +"При удалённом использовании на устройстве, это работает более эффективно с " +"сетевой файловой системой." #: tools/editor/editor_node.cpp tools/editor/plugins/spatial_editor_plugin.cpp msgid "Settings" @@ -2068,9 +2070,8 @@ msgid "Imported Resources" msgstr "Импортированные ресурсы" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp -#, fuzzy msgid "No bit masks to import!" -msgstr "Нет элементов для импорта!" +msgstr "Нет битовой маски для импорта!" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_sample_import_plugin.cpp @@ -2100,9 +2101,8 @@ msgid "Save path is empty!" msgstr "Путь сохранения пуст!" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp -#, fuzzy msgid "Import BitMasks" -msgstr "Импорт текстур" +msgstr "Импорт битовой маски" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp #: tools/editor/io_plugins/editor_texture_import_plugin.cpp @@ -2129,7 +2129,7 @@ msgstr "Принять" #: tools/editor/io_plugins/editor_bitmask_import_plugin.cpp msgid "Bit Mask" -msgstr "" +msgstr "Битовая маска" #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "No source font file!" @@ -2164,7 +2164,7 @@ msgid "The quick brown fox jumps over the lazy dog." msgstr "" "Съешь ещё этих мягких французских булок да выпей чаю. \n" "The quick brown fox jumps over the lazy dog.\n" -"0123456789`!@#$%^&*()_+-=\\/" +"0123456789`!@#$%^&*()_+-=\\/." #: tools/editor/io_plugins/editor_font_import_plugin.cpp msgid "Test:" @@ -2646,18 +2646,18 @@ msgid "MultiNode Set" msgstr "Мульти нодовый набор" #: tools/editor/node_dock.cpp -#, fuzzy msgid "Node" -msgstr "Mix Node" +msgstr "Нод" #: tools/editor/node_dock.cpp -#, fuzzy msgid "Groups" -msgstr "Группы:" +msgstr "Группы" #: tools/editor/node_dock.cpp msgid "Select a Node to edit Signals and Groups." msgstr "" +"Выберите нод для редактирования\n" +"сигналов и групп." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Toggle Autoplay" @@ -2774,7 +2774,7 @@ msgstr "Загрузить анимацию с диска." #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Save the current animation" -msgstr "Сохранить текущую анимацию." +msgstr "Сохранить текущую анимацию" #: tools/editor/plugins/animation_player_editor_plugin.cpp msgid "Display list of animations in player." @@ -2925,39 +2925,39 @@ msgstr "Дерево анимации не действительно." #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Animation Node" -msgstr "Animation Node" +msgstr "Animation нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "OneShot Node" -msgstr "OneShot Node" +msgstr "OneShot нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Mix Node" -msgstr "Mix Node" +msgstr "Mix нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend2 Node" -msgstr "Blend2 Node" +msgstr "Blend2 нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend3 Node" -msgstr "Blend3 Node" +msgstr "Blend3 нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Blend4 Node" -msgstr "Blend4 Node" +msgstr "Blend4 нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeScale Node" -msgstr "TimeScale Node" +msgstr "TimeScale нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "TimeSeek Node" -msgstr "TimeSeek Node" +msgstr "TimeSeek нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Transition Node" -msgstr "Transition Node" +msgstr "Transition нод" #: tools/editor/plugins/animation_tree_editor_plugin.cpp msgid "Import Animations.." @@ -3971,14 +3971,12 @@ msgid "Auto Indent" msgstr "Автоотступ" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reload Tool Script" -msgstr "Перезагрузить скрипты" +msgstr "Перезагрузить инструм. скрипт" #: tools/editor/plugins/script_editor_plugin.cpp -#, fuzzy msgid "Reload Tool Script (Soft)" -msgstr "Перезагрузить скрипты" +msgstr "Перезагрузить инструм. скрипт (мягко)" #: tools/editor/plugins/script_editor_plugin.cpp #: tools/editor/plugins/shader_editor_plugin.cpp @@ -4635,20 +4633,20 @@ msgid "StyleBox Preview:" msgstr "StyleBox предпросмотр:" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Texture Region Editor" -msgstr "Редактор Области Спрайта" +msgstr "Редактор области текстуры" #: tools/editor/plugins/texture_region_editor_plugin.cpp -#, fuzzy msgid "Scale Region Editor" -msgstr "Редактор Области Спрайта" +msgstr "Редактор масштабируемой области текстуры" #: tools/editor/plugins/texture_region_editor_plugin.cpp msgid "" "No texture in this node.\n" "Set a texture to be able to edit region." msgstr "" +"В этом ноде нет текстуры.\n" +"Выберите текстуру, чтобы редактировать область." #: tools/editor/plugins/theme_editor_plugin.cpp msgid "Can't save theme to file:" @@ -5171,14 +5169,12 @@ msgid "Remove project from the list? (Folder contents will not be modified)" msgstr "Удалить проект из списка? (Содержимое папки не будет изменено)" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Project Manager" -msgstr "Название проекта:" +msgstr "Менеджер проектов" #: tools/editor/project_manager.cpp -#, fuzzy msgid "Project List" -msgstr "Выйти в список проектов" +msgstr "Список проектов" #: tools/editor/project_manager.cpp msgid "Run" @@ -5198,7 +5194,7 @@ msgstr "Выход" #: tools/editor/project_settings.cpp msgid "Key " -msgstr "Кнопка" +msgstr "Кнопка " #: tools/editor/project_settings.cpp msgid "Joy Button" @@ -5334,14 +5330,12 @@ msgstr "" "константы." #: tools/editor/project_settings.cpp -#, fuzzy msgid "Autoload '%s' already exists!" -msgstr "Действие '%s' уже существует!" +msgstr "Автозагрузка '%s' уже существует!" #: tools/editor/project_settings.cpp -#, fuzzy msgid "Rename Autoload" -msgstr "Удалена автозагрузка" +msgstr "Переименовать автозагрузку" #: tools/editor/project_settings.cpp msgid "Toggle AutoLoad Globals" @@ -5691,9 +5685,7 @@ msgstr "Не могу работать с нодами из внешней сц #: tools/editor/scene_tree_dock.cpp msgid "Can't operate on nodes the current scene inherits from!" -msgstr "" -"Не могу работать с нодами текущей сцены, наследуемой откуда-то!\n" -"Очистите наследование, чтобы продолжить работу с ними." +msgstr "Невозможно работать с нодами текущей сцены, наследуемой откуда-то!" #: tools/editor/scene_tree_dock.cpp msgid "Remove Node(s)" @@ -5861,7 +5853,7 @@ msgstr "Файлы не выбраны!" #: tools/editor/scenes_dock.cpp msgid "Instance" -msgstr "Экземпляр" +msgstr "Добавить экземпляр" #: tools/editor/scenes_dock.cpp msgid "Edit Dependencies.." @@ -5872,9 +5864,8 @@ msgid "View Owners.." msgstr "Просмотреть владельцев.." #: tools/editor/scenes_dock.cpp -#, fuzzy msgid "Copy Path" -msgstr "Копировать параметры" +msgstr "Копировать путь" #: tools/editor/scenes_dock.cpp msgid "Rename or Move.." @@ -6050,7 +6041,7 @@ msgstr "Дерево сцены в реальном времени:" #: tools/editor/script_editor_debugger.cpp msgid "Remote Object Properties: " -msgstr "Параметры объекта:" +msgstr "Параметры объекта: " #: tools/editor/script_editor_debugger.cpp msgid "Profiler" @@ -6114,7 +6105,7 @@ msgstr "Установить из дерева нодов" #: tools/editor/settings_config_dialog.cpp msgid "Shortcuts" -msgstr "" +msgstr "Горячие клавиши" #: tools/editor/spatial_editor_gizmos.cpp msgid "Change Light Radius" |