Merge pull request #55224 from KoBeWi/ΔV_even_when_paused
This commit is contained in:
commit
c3606a87fe
@ -80,6 +80,14 @@ bool SceneTreeTimer::is_pause_mode_process() {
|
|||||||
return process_pause;
|
return process_pause;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SceneTreeTimer::set_ignore_time_scale(bool p_ignore) {
|
||||||
|
ignore_time_scale = p_ignore;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SceneTreeTimer::is_ignore_time_scale() {
|
||||||
|
return ignore_time_scale;
|
||||||
|
}
|
||||||
|
|
||||||
void SceneTreeTimer::release_connections() {
|
void SceneTreeTimer::release_connections() {
|
||||||
List<Connection> connections;
|
List<Connection> connections;
|
||||||
get_all_signal_connections(&connections);
|
get_all_signal_connections(&connections);
|
||||||
@ -557,8 +565,13 @@ bool SceneTree::idle(float p_time) {
|
|||||||
E = N;
|
E = N;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
float time_left = E->get()->get_time_left();
|
float time_left = E->get()->get_time_left();
|
||||||
time_left -= p_time;
|
if (E->get()->is_ignore_time_scale()) {
|
||||||
|
time_left -= Engine::get_singleton()->get_idle_frame_step();
|
||||||
|
} else {
|
||||||
|
time_left -= p_time;
|
||||||
|
}
|
||||||
E->get()->set_time_left(time_left);
|
E->get()->set_time_left(time_left);
|
||||||
|
|
||||||
if (time_left < 0) {
|
if (time_left < 0) {
|
||||||
|
@ -50,6 +50,7 @@ class SceneTreeTimer : public Reference {
|
|||||||
|
|
||||||
float time_left;
|
float time_left;
|
||||||
bool process_pause;
|
bool process_pause;
|
||||||
|
bool ignore_time_scale = false;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
@ -61,6 +62,9 @@ public:
|
|||||||
void set_pause_mode_process(bool p_pause_mode_process);
|
void set_pause_mode_process(bool p_pause_mode_process);
|
||||||
bool is_pause_mode_process();
|
bool is_pause_mode_process();
|
||||||
|
|
||||||
|
void set_ignore_time_scale(bool p_ignore);
|
||||||
|
bool is_ignore_time_scale();
|
||||||
|
|
||||||
void release_connections();
|
void release_connections();
|
||||||
|
|
||||||
SceneTreeTimer();
|
SceneTreeTimer();
|
||||||
|
@ -333,7 +333,6 @@ void Viewport::_notification(int p_what) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Enable processing for tooltips, collision debugging, physics object picking, etc.
|
// Enable processing for tooltips, collision debugging, physics object picking, etc.
|
||||||
set_process_internal(true);
|
|
||||||
set_physics_process_internal(true);
|
set_physics_process_internal(true);
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
@ -361,16 +360,6 @@ void Viewport::_notification(int p_what) {
|
|||||||
remove_from_group("_viewports");
|
remove_from_group("_viewports");
|
||||||
|
|
||||||
VS::get_singleton()->viewport_set_active(viewport, false);
|
VS::get_singleton()->viewport_set_active(viewport, false);
|
||||||
|
|
||||||
} break;
|
|
||||||
case NOTIFICATION_INTERNAL_PROCESS: {
|
|
||||||
if (gui.tooltip_timer >= 0) {
|
|
||||||
gui.tooltip_timer -= get_process_delta_time();
|
|
||||||
if (gui.tooltip_timer < 0) {
|
|
||||||
_gui_show_tooltip();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
} break;
|
} break;
|
||||||
case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
|
case NOTIFICATION_INTERNAL_PHYSICS_PROCESS: {
|
||||||
if (get_tree()->is_debugging_collisions_hint() && contact_2d_debug.is_valid()) {
|
if (get_tree()->is_debugging_collisions_hint() && contact_2d_debug.is_valid()) {
|
||||||
@ -1500,7 +1489,10 @@ void Viewport::_gui_sort_roots() {
|
|||||||
|
|
||||||
void Viewport::_gui_cancel_tooltip() {
|
void Viewport::_gui_cancel_tooltip() {
|
||||||
gui.tooltip_control = nullptr;
|
gui.tooltip_control = nullptr;
|
||||||
gui.tooltip_timer = -1;
|
if (gui.tooltip_timer.is_valid()) {
|
||||||
|
gui.tooltip_timer->release_connections();
|
||||||
|
gui.tooltip_timer = Ref<SceneTreeTimer>();
|
||||||
|
}
|
||||||
if (gui.tooltip_popup) {
|
if (gui.tooltip_popup) {
|
||||||
gui.tooltip_popup->queue_delete();
|
gui.tooltip_popup->queue_delete();
|
||||||
gui.tooltip_popup = nullptr;
|
gui.tooltip_popup = nullptr;
|
||||||
@ -2241,9 +2233,15 @@ void Viewport::_gui_input_event(Ref<InputEvent> p_event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (can_tooltip && !is_tooltip_shown) {
|
if (can_tooltip && !is_tooltip_shown) {
|
||||||
|
if (gui.tooltip_timer.is_valid()) {
|
||||||
|
gui.tooltip_timer->release_connections();
|
||||||
|
gui.tooltip_timer = Ref<SceneTreeTimer>();
|
||||||
|
}
|
||||||
gui.tooltip_control = over;
|
gui.tooltip_control = over;
|
||||||
gui.tooltip_pos = mpos;
|
gui.tooltip_pos = mpos;
|
||||||
gui.tooltip_timer = gui.tooltip_delay;
|
gui.tooltip_timer = get_tree()->create_timer(gui.tooltip_delay);
|
||||||
|
gui.tooltip_timer->set_ignore_time_scale(true);
|
||||||
|
gui.tooltip_timer->connect("timeout", this, "_gui_show_tooltip");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,6 +49,7 @@ class Label;
|
|||||||
class Timer;
|
class Timer;
|
||||||
class Viewport;
|
class Viewport;
|
||||||
class CollisionObject;
|
class CollisionObject;
|
||||||
|
class SceneTreeTimer;
|
||||||
|
|
||||||
class ViewportTexture : public Texture {
|
class ViewportTexture : public Texture {
|
||||||
GDCLASS(ViewportTexture, Texture);
|
GDCLASS(ViewportTexture, Texture);
|
||||||
@ -308,7 +309,7 @@ private:
|
|||||||
bool drag_attempted;
|
bool drag_attempted;
|
||||||
Variant drag_data;
|
Variant drag_data;
|
||||||
ObjectID drag_preview_id;
|
ObjectID drag_preview_id;
|
||||||
float tooltip_timer;
|
Ref<SceneTreeTimer> tooltip_timer;
|
||||||
float tooltip_delay;
|
float tooltip_delay;
|
||||||
List<Control *> modal_stack;
|
List<Control *> modal_stack;
|
||||||
Transform2D focus_inv_xform;
|
Transform2D focus_inv_xform;
|
||||||
|
Loading…
Reference in New Issue
Block a user