hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-21 19:08:34 +0200
committerhachem <im@hachem.wtf>2025-08-21 19:08:34 +0200
commitd8ba57f6d45b9467520377ffcc1f453154d77430 (patch)
treefe3c68a98f5efecadc8416f757839fae0cb4467d /src/engine
parent3d13b496b10f9571b5724ee4df51cfd80f513a62 (diff)
fix: proper scene loading
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/engine.cpp82
-rw-r--r--src/engine/engine.h7
2 files changed, 81 insertions, 8 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("========================");
+ }
}
diff --git a/src/engine/engine.h b/src/engine/engine.h
index 124fa39..b0e06f3 100644
--- a/src/engine/engine.h
+++ b/src/engine/engine.h
@@ -8,8 +8,9 @@
#include <chrono>
#include <cmath>
-#include "core/application.h"
#include "core/camera.h"
+#include "object.h"
+
#include "rendering/renderer.h"
#include "rendering/shader.h"
#include "rendering/vertex_array.h"
@@ -73,6 +74,7 @@ namespace Donut
void render_scene();
void update_physics(float delta_time);
void update_window_dimensions();
+ void set_window_dimensions(int width, int height);
int get_width() const { return m_width; }
int get_height() const { return m_height; }
@@ -97,6 +99,9 @@ namespace Donut
void set_max_steps_moving(int steps) { m_max_steps_moving = steps; }
void set_max_steps_static(int steps) { m_max_steps_static = steps; }
void set_early_exit_distance(float distance) { m_early_exit_distance = distance; }
+
+ void load_objects_from_scene(const std::vector<Donut::Object>& objects);
+ void print_object_info() const;
private:
Ref<Shader> create_compute_program(const char* path);
std::pair<Ref<VertexArray>, Ref<Texture2D>> quad_vao();