| 60 | float TaskManager::_timeModulator = 1.0f; |
| 61 | |
| 62 | void TaskManager::executeTasks() |
| 63 | { |
| 64 | #if defined(_INTR_PROFILING_ENABLED) |
| 65 | MICROPROFILE_SCOPE(MAIN); |
| 66 | #endif // _INTR_PROFILING_ENABLED |
| 67 | |
| 68 | _INTR_PROFILE_CPU("TaskManager", "Execute Tasks"); |
| 69 | |
| 70 | if (_frameCounter > 0u) |
| 71 | { |
| 72 | _INTR_PROFILE_CPU("TaskManager", "Limit To Max FPS"); |
| 73 | |
| 74 | _lastDeltaT = std::min( |
| 75 | (TimingHelper::getMicroseconds() - _lastUpdate) * 0.000001f, 0.3f); |
| 76 | _lastActualFrameDuration = _lastDeltaT; |
| 77 | |
| 78 | // Adjust deltaT to target frame rate |
| 79 | while (_lastDeltaT < Settings::Manager::_targetFrameRate) |
| 80 | { |
| 81 | _lastDeltaT = (TimingHelper::getMicroseconds() - _lastUpdate) * 0.000001f; |
| 82 | std::this_thread::yield(); |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | // Avoid very high deltaTs due to stalls |
| 87 | _lastDeltaT = std::min(_lastDeltaT, 0.1f); |
| 88 | |
| 89 | const float modDeltaT = _lastDeltaT * _timeModulator; |
| 90 | _totalTimePassed += modDeltaT; |
| 91 | _lastUpdate = TimingHelper::getMicroseconds(); |
| 92 | |
| 93 | { |
| 94 | _INTR_PROFILE_CPU("TaskManager", "Non-Rendering Tasks"); |
| 95 | |
| 96 | // Events and input |
| 97 | { |
| 98 | _INTR_PROFILE_CPU("TaskManager", "Pump Events"); |
| 99 | |
| 100 | Input::System::reset(); |
| 101 | SystemEventProvider::SDL::pumpEvents(); |
| 102 | } |
| 103 | |
| 104 | // Game state update |
| 105 | { |
| 106 | GameStates::Manager::update(modDeltaT); |
| 107 | } |
| 108 | |
| 109 | // Scripts |
| 110 | { |
| 111 | Components::ScriptManager::tickScripts( |
| 112 | Components::ScriptManager::_activeRefs, modDeltaT); |
| 113 | } |
| 114 | |
| 115 | // Physics |
| 116 | { |
| 117 | _INTR_PROFILE_CPU("TaskManager", "Update From Physics Results"); |
| 118 | |
| 119 | Components::RigidBodyManager::updateNodesFromActors( |
nothing calls this directly
no test coverage detected