diff --git a/src/prune/core/window.cpp b/src/prune/core/window.cpp index 53d0d5c..07abbc9 100644 --- a/src/prune/core/window.cpp +++ b/src/prune/core/window.cpp @@ -30,10 +30,16 @@ namespace prune { throw std::runtime_error(std::string("Failed to create SDL window: ") + SDL_GetError()); } + Uint32 renderer_flags = SDL_RENDERER_ACCELERATED; + + if (config.vsync) { + renderer_flags |= SDL_RENDERER_PRESENTVSYNC; + } + m_renderer = SDL_CreateRenderer( m_window, -1, - SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC + renderer_flags ); if (!m_renderer) { diff --git a/src/prune/scene/game_object_manager.cpp b/src/prune/scene/game_object_manager.cpp index 2ec7671..ca4b37a 100644 --- a/src/prune/scene/game_object_manager.cpp +++ b/src/prune/scene/game_object_manager.cpp @@ -87,6 +87,11 @@ namespace prune { void GameObjectManager::select(GameObjectId id) noexcept { + if (id == kInvalidGameObjectId) { + m_selected_id = kInvalidGameObjectId; + return; + } + if (get_by_id(id) != nullptr) { m_selected_id = id; } diff --git a/src/prune/scene/sandbox_scene.cpp b/src/prune/scene/sandbox_scene.cpp index e486cdf..ee0c2e4 100644 --- a/src/prune/scene/sandbox_scene.cpp +++ b/src/prune/scene/sandbox_scene.cpp @@ -23,6 +23,12 @@ namespace prune { void SandboxScene::on_enter() { m_objects.clear(); + m_player_id = kInvalidGameObjectId; + + m_camera = {}; + m_grid_options = {}; + m_scene_options = {}; + m_player_controller = {}; m_player_id = m_objects.create_object(create_player()); m_objects.create_object(create_initial_block()); @@ -32,6 +38,7 @@ namespace prune { void SandboxScene::on_exit() { m_objects.clear(); + m_player_id = kInvalidGameObjectId; } GameObject SandboxScene::create_player() { diff --git a/src/prune/scene/sandbox_scene_editor.cpp b/src/prune/scene/sandbox_scene_editor.cpp index 8122229..214efef 100644 --- a/src/prune/scene/sandbox_scene_editor.cpp +++ b/src/prune/scene/sandbox_scene_editor.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -73,6 +74,13 @@ namespace prune { return; } + const float length = std::sqrt((move_x * move_x) + (move_y * move_y)); + + if (length > 0.0f) { + move_x /= length; + move_y /= length; + } + const float move_amount = m_camera.speed * dt; m_camera.x += move_x * move_amount; m_camera.y += move_y * move_amount; diff --git a/src/prune/tooling/outliner.cpp b/src/prune/tooling/outliner.cpp index d5779ab..cee2f9f 100644 --- a/src/prune/tooling/outliner.cpp +++ b/src/prune/tooling/outliner.cpp @@ -21,7 +21,6 @@ namespace prune { if (ImGui::Button("Add Object (Temp)")) { const Transform base = next_block_spawn_position( - objects, static_cast(viewport_width), static_cast(viewport_height), camera_x, @@ -115,7 +114,6 @@ namespace prune { } Transform Outliner::next_block_spawn_position( - GameObjectManager&, float viewport_width, float viewport_height, float camera_x, diff --git a/src/prune/tooling/outliner.hpp b/src/prune/tooling/outliner.hpp index 2cf8784..70ef32b 100644 --- a/src/prune/tooling/outliner.hpp +++ b/src/prune/tooling/outliner.hpp @@ -24,7 +24,6 @@ namespace prune { GameObjectId create_block(GameObjectManager& objects, float x, float y); float random_color_component(); Transform next_block_spawn_position( - GameObjectManager& objects, float viewport_width, float viewport_height, float camera_x, diff --git a/src/prune/tooling/stats.cpp b/src/prune/tooling/stats.cpp index 7763b21..96c4cfb 100644 --- a/src/prune/tooling/stats.cpp +++ b/src/prune/tooling/stats.cpp @@ -1,16 +1,23 @@ +#include + #include "prune/tooling/stats.hpp" #include "prune/tooling/imgui/layout.hpp" #include "prune/tooling/imgui/property_table.hpp" namespace prune { - void Stats::draw(GameObjectManager& objects, GameObjectId player_id, int viewport_width, int viewport_height) { + void Stats::draw(GameObjectManager& objects, GameObjectId player_id, int viewport_width, int viewport_height) + { ImGuiIO& io = ImGui::GetIO(); if (tooling::imgui::layout::collapsing_header("Performance")) { tooling::imgui::property_table::begin("##performance"); - tooling::imgui::property_table::text("FPS", std::to_string(io.Framerate).c_str()); - tooling::imgui::property_table::text("Frame time", std::to_string(1000.0f / io.Framerate).c_str()); + + const float fps = io.Framerate; + const float frame_time_ms = (fps > 0.0f) ? (1000.0f / fps) : 0.0f; + + tooling::imgui::property_table::text("FPS", std::to_string(fps).c_str()); + tooling::imgui::property_table::text("Frame time", std::to_string(frame_time_ms).c_str()); tooling::imgui::property_table::end(); }