diff options
| author | hachem <im@hachem.wtf> | 2025-08-21 19:08:34 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-21 19:08:34 +0200 |
| commit | d8ba57f6d45b9467520377ffcc1f453154d77430 (patch) | |
| tree | fe3c68a98f5efecadc8416f757839fae0cb4467d /src/engine/engine.cpp | |
| parent | 3d13b496b10f9571b5724ee4df51cfd80f513a62 (diff) | |
fix: proper scene loading
Diffstat (limited to 'src/engine/engine.cpp')
| -rw-r--r-- | src/engine/engine.cpp | 82 |
1 files changed, 75 insertions, 7 deletions
diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 9577d1e..ef9b93d 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -5,6 +5,7 @@ #include <GLFW/glfw3.h> #include "engine.h" +#include "core/log.h" #include "rendering/vertex_buffer.h" #include "rendering/index_buffer.h" @@ -13,14 +14,14 @@ namespace Donut Engine::Engine() : m_sag_a(glm::vec3(0.0f, 0.0f, 0.0f), 8.54e36f) { - GLFWwindow* window = static_cast<GLFWwindow*>(Application::get().get_window().get_native_window()); - glfwGetFramebufferSize(window, &m_width, &m_height); + m_width = 1280; + m_height = 720; m_camera.set_camera_mode(CameraMode::Orbital); - m_camera.set_orbital_radius(6.34194e10); - m_camera.set_orbital_limits(1e10, 1e12); + m_camera.set_orbital_radius(1e11); + m_camera.set_orbital_limits(1e9, 1e13); m_camera.set_orbital_speed(0.01f); - m_camera.set_zoom_speed(25e9f); + m_camera.set_zoom_speed(1e10f); m_objects = { @@ -47,12 +48,17 @@ namespace Donut void Engine::update_window_dimensions() { - GLFWwindow* window = static_cast<GLFWwindow*>(Application::get().get_window().get_native_window()); + update_compute_dimensions(); + } + + void Engine::set_window_dimensions(int width, int height) + { int old_width = m_width; int old_height = m_height; int old_compute_height = m_compute_height; - glfwGetFramebufferSize(window, &m_width, &m_height); + m_width = width; + m_height = height; if (old_width != m_width || old_height != m_height || @@ -273,4 +279,66 @@ namespace Donut return { vertex_array, texture }; } + + void Engine::load_objects_from_scene(const std::vector<Donut::Object>& objects) + { + m_objects.clear(); + m_objects.push_back( + { + glm::vec4(0.00f, 0.00f, 0.00f, m_sag_a.m_rs), + glm::vec4(0, 0, 0, 1), + static_cast<float>(m_sag_a.m_mass) + }); + + for (const auto& obj : objects) + { + ObjectData engine_obj; + + float scale_factor = 1e10f; + engine_obj.m_pos_radius = glm::vec4 + ( + obj.m_centre.x * scale_factor, + obj.m_centre.y * scale_factor, + obj.m_centre.z * scale_factor, + obj.m_radius * scale_factor + ); + + engine_obj.m_color = glm::vec4(obj.m_material.m_color, 1.0f); + + float volume = (4.0f / 3.0f) * 3.14159f * engine_obj.m_pos_radius.w * engine_obj.m_pos_radius.w * engine_obj.m_pos_radius.w; + float density = 1e12f; + engine_obj.m_mass = volume * density; + engine_obj.m_velocity = glm::vec3(0.0f, 0.0f, 0.0f); + + m_objects.push_back(engine_obj); + } + + DONUT_INFO("Loaded {} objects from WorldBuilder scene (scaled up by {})", objects.size(), 1e10f); + print_object_info(); + } + + void Engine::print_object_info() const + { + DONUT_INFO("=== Object Information ==="); + DONUT_INFO("Total objects: {}", m_objects.size()); + + for (size_t i = 0; i < m_objects.size(); ++i) + { + const auto& obj = m_objects[i]; + DONUT_INFO("Object {}: Pos=({:.2e}, {:.2e}, {:.2e}), Radius={:.2e}, Mass={:.2e}, Color=({:.2f}, {:.2f}, {:.2f})", + i, + obj.m_pos_radius.x, obj.m_pos_radius.y, obj.m_pos_radius.z, + obj.m_pos_radius.w, + obj.m_mass, + obj.m_color.x, obj.m_color.y, obj.m_color.z + ); + } + DONUT_INFO("Camera position: ({:.2e}, {:.2e}, {:.2e})", + m_camera.get_orbital_position().x, + m_camera.get_orbital_position().y, + m_camera.get_orbital_position().z + ); + DONUT_INFO("Camera radius: {:.2e}", m_camera.get_orbital_radius()); + DONUT_INFO("========================"); + } } |
