| 31 | } |
| 32 | |
| 33 | void MultiViewBase::onUpdate(Input& input) |
| 34 | { |
| 35 | if (input.key().isActivated(Key::LeftControl) && input.key().isPressed(Key::LeftAlt) && input.key().isPressed(Key::P)) { |
| 36 | _onPause = !_onPause; |
| 37 | } |
| 38 | if (_onPause) { |
| 39 | return; |
| 40 | } |
| 41 | |
| 42 | // Elapsed time since last rendering. |
| 43 | const auto timeNow = std::chrono::steady_clock::now(); |
| 44 | _deltaTime = (float)(std::chrono::duration_cast<std::chrono::microseconds>(timeNow - _timeLastFrame).count())/1000000.0f; |
| 45 | _timeLastFrame = timeNow; |
| 46 | |
| 47 | for (auto & subview : _subViews) { |
| 48 | if (subview.second.view->active()) { |
| 49 | auto subInput = !subview.second.view->isFocused() ? Input() : Input::subInput(input, subview.second.viewport, false); |
| 50 | |
| 51 | if (subview.second.handler) { |
| 52 | subview.second.handler->update(subInput, _deltaTime, subview.second.viewport); |
| 53 | } |
| 54 | |
| 55 | subview.second.updateFunc(subview.second.view, subInput, subview.second.viewport, _deltaTime); |
| 56 | |
| 57 | } |
| 58 | } |
| 59 | |
| 60 | for (auto & subview : _ibrSubViews) { |
| 61 | MultiViewBase::IBRSubView & fView = subview.second; |
| 62 | |
| 63 | if (fView.view->active()) { |
| 64 | auto subInput = !fView.view->isFocused() ? Input() : Input::subInput(input, fView.viewport, false); |
| 65 | |
| 66 | if (fView.handler) { |
| 67 | fView.handler->update(subInput, _deltaTime, fView.viewport); |
| 68 | } |
| 69 | |
| 70 | fView.cam = fView.updateFunc(fView.view, subInput, fView.viewport, _deltaTime); |
| 71 | |
| 72 | /// If we use the default update func and the integrated handler, |
| 73 | /// we have to use the handler's camera. |
| 74 | if (fView.defaultUpdateFunc && fView.handler) { |
| 75 | fView.cam = fView.handler->getCamera(); |
| 76 | } |
| 77 | |
| 78 | } |
| 79 | } |
| 80 | |
| 81 | for (auto & subMultiView : _subMultiViews) { |
| 82 | subMultiView.second->onUpdate(input); |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | void MultiViewBase::onRender(Window& win, ShowInfo& info) |
| 87 | { |
no test coverage detected