From 9aeefcbe3b9dae0f8a82c534610c1a5888af7efa Mon Sep 17 00:00:00 2001 From: T1ti Date: Thu, 20 Jul 2023 03:11:11 +0200 Subject: [PATCH] optimize game view performance --- src/noggit/MapView.cpp | 14 ++++++++------ src/noggit/MapView.h | 1 + src/noggit/ui/tools/ViewToolbar/Ui/ViewToolbar.cpp | 11 ++++++++++- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/noggit/MapView.cpp b/src/noggit/MapView.cpp index 05b1f040..883a1aae 100755 --- a/src/noggit/MapView.cpp +++ b/src/noggit/MapView.cpp @@ -3998,20 +3998,22 @@ void MapView::tick (float dt) if (moving) { _camera.move_forward(moving, dt); + _camera_moved_since_last_draw = true; // TODO use normalized speed (doesn't slow down when looking up) // _camera.move_forward_normalized(moving, dt); } if (strafing) { _camera.move_horizontal(strafing, dt); + _camera_moved_since_last_draw = true; } - // get ground z position - // can be optimized by calling this only when moving/strafing or changing camera mode. - auto ground_pos = _world.get()->get_ground_height(_camera.position); - _camera.position.y = ground_pos.y + 2; - _camera_moved_since_last_draw = true; - + // hack to update camera when entering mode in void ViewToolbar::add_tool_icon() + if (_camera_moved_since_last_draw) + { + auto ground_pos = _world.get()->get_ground_height(_camera.position); + _camera.position.y = ground_pos.y + 2; + } } else { diff --git a/src/noggit/MapView.h b/src/noggit/MapView.h index a6e6df2b..b265268a 100755 --- a/src/noggit/MapView.h +++ b/src/noggit/MapView.h @@ -280,6 +280,7 @@ public: void randomizeStampRotation(); void onSettingsSave(); void updateRotationEditor() { _rotation_editor_need_update = true; }; + void setCameraDirty() { _camera_moved_since_last_draw = true; }; [[nodiscard]] Noggit::Ui::minimap_widget* getMinimapWidget() const { return _minimap; } diff --git a/src/noggit/ui/tools/ViewToolbar/Ui/ViewToolbar.cpp b/src/noggit/ui/tools/ViewToolbar/Ui/ViewToolbar.cpp index d25a325c..07e384f3 100755 --- a/src/noggit/ui/tools/ViewToolbar/Ui/ViewToolbar.cpp +++ b/src/noggit/ui/tools/ViewToolbar/Ui/ViewToolbar.cpp @@ -398,7 +398,16 @@ void ViewToolbar::add_tool_icon(MapView* mapView, } }); - connect (view_state, &Noggit::BoolToggleProperty::changed, [action, view_state] () { + connect (view_state, &Noggit::BoolToggleProperty::changed, [action, view_state, mapView] () { + if (action->text() == "Game view" && view_state->get()) + { + // hack, manually update camera when switch to game_view + mapView->setCameraDirty(); + auto ground_pos = mapView->getWorld()->get_ground_height(mapView->getCamera()->position); + mapView->getCamera()->position.y = ground_pos.y + 2; + } + + action->setChecked(view_state->get()); });