@@ -240,7 +240,6 @@ void GameView::_sessions_changed() {
240
240
active_sessions++;
241
241
}
242
242
}
243
-
244
243
_update_debugger_buttons ();
245
244
246
245
#ifdef MACOS_ENABLED
@@ -419,6 +418,8 @@ void GameView::_update_debugger_buttons() {
419
418
420
419
suspend_button->set_disabled (empty);
421
420
camera_override_button->set_disabled (empty);
421
+ speed_state_button->set_disabled (empty);
422
+ reset_speed_button->set_disabled (empty);
422
423
423
424
PopupMenu *menu = camera_override_menu->get_popup ();
424
425
@@ -431,6 +432,8 @@ void GameView::_update_debugger_buttons() {
431
432
camera_override_button->set_pressed (false );
432
433
}
433
434
next_frame_button->set_disabled (!suspend_button->is_pressed ());
435
+
436
+ _reset_time_scales ();
434
437
}
435
438
436
439
void GameView::_handle_shortcut_requested (int p_embed_action) {
@@ -511,6 +514,44 @@ void GameView::_size_mode_button_pressed(int size_mode) {
511
514
_update_embed_window_size ();
512
515
}
513
516
517
+ void GameView::_reset_time_scales () {
518
+ time_scale_index = DEFUALT_TIME_SCALE_INDEX;
519
+ _update_time_scales ();
520
+ }
521
+
522
+ void GameView::_update_time_scales () {
523
+ bool disabled = time_scale_index == DEFUALT_TIME_SCALE_INDEX;
524
+ Array message;
525
+ message.append (!disabled);
526
+ message.append (time_scale_range[time_scale_index]);
527
+ Array sessions = debugger->get_sessions ();
528
+ for (int i = 0 ; i < sessions.size (); i++) {
529
+ if (Object::cast_to<EditorDebuggerSession>(sessions[i])->is_active ()) {
530
+ Ref<EditorDebuggerSession> session = sessions[i];
531
+ session->send_message (" scene:speed_changed" , message);
532
+ }
533
+ }
534
+ Color text_color;
535
+ if (time_scale_index == DEFUALT_TIME_SCALE_INDEX) {
536
+ text_color = Color (1 .0f , 1 .0f , 1 .0f );
537
+ } else if (time_scale_index > DEFUALT_TIME_SCALE_INDEX) {
538
+ text_color = Color (0 .0f , 1 .0f , 0 .0f );
539
+ } else if (time_scale_index < DEFUALT_TIME_SCALE_INDEX) {
540
+ text_color = Color (1 .0f , 1 .0f , 0 .0f );
541
+ }
542
+ speed_state_button->add_theme_color_override (" font_color" , text_color);
543
+ speed_state_button->set_text (vformat (" %0.2fx" , time_scale_range[time_scale_index]));
544
+ reset_speed_button->set_disabled (disabled);
545
+ }
546
+
547
+ void GameView::_speed_state_menu_pressed (int p_id) {
548
+ if (time_scale_index == p_id) {
549
+ return ;
550
+ }
551
+ time_scale_index = p_id;
552
+ _update_time_scales ();
553
+ }
554
+
514
555
GameView::EmbedAvailability GameView::_get_embed_available () {
515
556
if (!DisplayServer::get_singleton ()->has_feature (DisplayServer::FEATURE_WINDOW_EMBEDDING)) {
516
557
return EMBED_NOT_AVAILABLE_FEATURE_NOT_SUPPORTED;
@@ -700,6 +741,7 @@ void GameView::_notification(int p_what) {
700
741
case NOTIFICATION_THEME_CHANGED: {
701
742
suspend_button->set_button_icon (get_editor_theme_icon (SNAME (" Pause" )));
702
743
next_frame_button->set_button_icon (get_editor_theme_icon (SNAME (" NextFrame" )));
744
+ reset_speed_button->set_button_icon (get_editor_theme_icon (SNAME (" Reload" )));
703
745
704
746
node_type_button[RuntimeNodeSelect::NODE_TYPE_NONE]->set_button_icon (get_editor_theme_icon (SNAME (" InputEventJoypadMotion" )));
705
747
node_type_button[RuntimeNodeSelect::NODE_TYPE_2D]->set_button_icon (get_editor_theme_icon (SNAME (" 2DNodes" )));
@@ -995,6 +1037,27 @@ GameView::GameView(Ref<GameViewDebugger> p_debugger, EmbeddedProcessBase *p_embe
995
1037
next_frame_button->set_accessibility_name (TTRC (" Next Frame" ));
996
1038
next_frame_button->set_shortcut (ED_SHORTCUT (" editor/next_frame_embedded_project" , TTRC (" Next Frame" ), Key::F10));
997
1039
1040
+ speed_state_button = memnew (MenuButton);
1041
+ main_menu_hbox->add_child (speed_state_button);
1042
+ speed_state_button->set_text (TTRC (" 1.00x" ));
1043
+ speed_state_button->set_theme_type_variation (" FlatButton" );
1044
+ speed_state_button->set_tooltip_text (TTRC (" Change the game speed." ));
1045
+ speed_state_button->set_accessibility_name (TTRC (" Speed State" ));
1046
+ speed_state_button->set_custom_minimum_size (Vector2 (48 , 0 ));
1047
+
1048
+ PopupMenu *menu = speed_state_button->get_popup ();
1049
+ menu->connect (SceneStringName (id_pressed), callable_mp (this , &GameView::_speed_state_menu_pressed));
1050
+ for (float f : time_scale_range) {
1051
+ menu->add_item (TTRC (vformat (" %0.2fx" , f)));
1052
+ }
1053
+
1054
+ reset_speed_button = memnew (Button);
1055
+ main_menu_hbox->add_child (reset_speed_button);
1056
+ reset_speed_button->set_theme_type_variation (" FlatButton" );
1057
+ reset_speed_button->set_tooltip_text (TTRC (" Reset the game speed." ));
1058
+ reset_speed_button->set_accessibility_name (TTRC (" Reset Speed" ));
1059
+ reset_speed_button->connect (SceneStringName (pressed), callable_mp (this , &GameView::_reset_time_scales));
1060
+
998
1061
main_menu_hbox->add_child (memnew (VSeparator));
999
1062
1000
1063
node_type_button[RuntimeNodeSelect::NODE_TYPE_NONE] = memnew (Button);
@@ -1079,7 +1142,7 @@ GameView::GameView(Ref<GameViewDebugger> p_debugger, EmbeddedProcessBase *p_embe
1079
1142
camera_override_menu->set_tooltip_text (TTRC (" Camera Override Options" ));
1080
1143
camera_override_menu->set_accessibility_name (TTRC (" Camera Override Options" ));
1081
1144
1082
- PopupMenu * menu = camera_override_menu->get_popup ();
1145
+ menu = camera_override_menu->get_popup ();
1083
1146
menu->connect (SceneStringName (id_pressed), callable_mp (this , &GameView::_camera_override_menu_id_pressed));
1084
1147
menu->add_item (TTRC (" Reset 2D Camera" ), CAMERA_RESET_2D);
1085
1148
menu->add_item (TTRC (" Reset 3D Camera" ), CAMERA_RESET_3D);
0 commit comments