From a1ed803bc14bbea1ec621a7d7d0a9797c2a9f7ae Mon Sep 17 00:00:00 2001 From: Nomango Date: Tue, 31 Mar 2020 14:07:13 +0800 Subject: [PATCH] [deploy] update Runner --- src/kiwano/platform/Application.cpp | 13 +++++++++---- src/kiwano/platform/Application.h | 12 ++++++++++++ src/kiwano/platform/Runner.cpp | 23 +---------------------- src/kiwano/platform/Runner.h | 20 +++----------------- src/kiwano/platform/win32/WindowImpl.cpp | 5 ++++- 5 files changed, 29 insertions(+), 44 deletions(-) diff --git a/src/kiwano/platform/Application.cpp b/src/kiwano/platform/Application.cpp index f5ab4a3d..064f1d94 100644 --- a/src/kiwano/platform/Application.cpp +++ b/src/kiwano/platform/Application.cpp @@ -63,17 +63,22 @@ void Application::Run(RunnerPtr runner, bool debug) } // Everything is ready - runner->Ready(); + runner->OnReady(); - quiting_ = false; + quiting_ = false; + last_update_time_ = Time::Now(); while (!quiting_) { - if (!runner->MainLoop()) + const Time now = Time::Now(); + const Duration dt = (now - last_update_time_); + last_update_time_ = now; + + if (!runner->MainLoop(dt)) quiting_ = true; } // Destroy all resources - runner->Destroy(); + runner->OnDestroy(); this->Destroy(); } diff --git a/src/kiwano/platform/Application.h b/src/kiwano/platform/Application.h index 69771e39..1ca1bce2 100644 --- a/src/kiwano/platform/Application.h +++ b/src/kiwano/platform/Application.h @@ -136,10 +136,17 @@ public: */ void Destroy(); + /** + * \~chinese + * @brief 获取上一次更新时间 + */ + Time GetLastUpdateTime() const; + private: bool quiting_; float time_scale_; RunnerPtr runner_; + Time last_update_time_; List modules_; std::mutex perform_mutex_; Queue> functions_to_perform_; @@ -156,4 +163,9 @@ inline WindowPtr Application::GetMainWindow() const return runner_->GetMainWindow(); } +inline Time Application::GetLastUpdateTime() const +{ + return last_update_time_; +} + } // namespace kiwano diff --git a/src/kiwano/platform/Runner.cpp b/src/kiwano/platform/Runner.cpp index fc313990..1c261f3e 100644 --- a/src/kiwano/platform/Runner.cpp +++ b/src/kiwano/platform/Runner.cpp @@ -69,7 +69,7 @@ Runner::Runner() {} Runner::~Runner() {} -bool Runner::MainLoop() +bool Runner::MainLoop(Duration dt) { if (main_window_->ShouldClose()) { @@ -88,30 +88,9 @@ bool Runner::MainLoop() } // Update & render - const Time now = Time::Now(); - const Duration dt = (now - last_update_time_); - last_update_time_ = now; - app.Update(dt); app.Render(); return true; } -void Runner::Ready() -{ - OnReady(); - last_update_time_ = Time::Now(); -} - -void Runner::Destroy() -{ - OnDestroy(); - - if (main_window_) - { - main_window_->Destroy(); - main_window_.Reset(); - } -} - } // namespace kiwano diff --git a/src/kiwano/platform/Runner.h b/src/kiwano/platform/Runner.h index 8c8ae93c..a156b8a9 100644 --- a/src/kiwano/platform/Runner.h +++ b/src/kiwano/platform/Runner.h @@ -73,9 +73,10 @@ public: /// \~chinese /// @brief 应用程序主循环 - /// @details 重载该函数以 + /// @param dt 时间间隔 + /// @details 重载该函数以控制程序主循环 /// @return 返回false退出主循环,否则继续运行主循环 - virtual bool MainLoop(); + virtual bool MainLoop(Duration dt); /// \~chinese /// @brief 获取主窗口 @@ -85,18 +86,8 @@ public: /// @brief 设置主窗口 void SetMainWindow(WindowPtr window); - /// \~chinese - /// @brief 获取上一次更新时间 - Time GetLastUpdateTime() const; - -private: - void Ready(); - - void Destroy(); - private: WindowPtr main_window_; - Time last_update_time_; }; inline void Runner::OnReady() {} @@ -118,9 +109,4 @@ inline void Runner::SetMainWindow(WindowPtr window) main_window_ = window; } -inline Time Runner::GetLastUpdateTime() const -{ - return last_update_time_; -} - } // namespace kiwano diff --git a/src/kiwano/platform/win32/WindowImpl.cpp b/src/kiwano/platform/win32/WindowImpl.cpp index 15646e69..c3ac3700 100644 --- a/src/kiwano/platform/win32/WindowImpl.cpp +++ b/src/kiwano/platform/win32/WindowImpl.cpp @@ -205,7 +205,10 @@ WindowWin32Impl::WindowWin32Impl() key_map_[VK_F1 + i] = KeyCode(size_t(KeyCode::F1) + i); } -WindowWin32Impl::~WindowWin32Impl() {} +WindowWin32Impl::~WindowWin32Impl() +{ + this->Destroy(); +} void WindowWin32Impl::Init(const String& title, uint32_t width, uint32_t height, uint32_t icon, bool resizable, bool fullscreen)