summaryrefslogtreecommitdiff
path: root/src/scene.c
diff options
context:
space:
mode:
authorOmniscient <17525998+omnisci3nce@users.noreply.github.com>2024-05-10 13:24:05 +1000
committerOmniscient <17525998+omnisci3nce@users.noreply.github.com>2024-05-10 13:24:05 +1000
commitf7944239b793d1d5c49336856965d3a793f99316 (patch)
tree2effd38a16a15aee505eb8c27a231dfbe35c822a /src/scene.c
parent3a0557d98ba311b031ad53ceb8fc6025013f65dc (diff)
make core a static and add a default scene to it
Diffstat (limited to 'src/scene.c')
-rw-r--r--src/scene.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/scene.c b/src/scene.c
new file mode 100644
index 0000000..d9fea05
--- /dev/null
+++ b/src/scene.c
@@ -0,0 +1,56 @@
+#include "scene.h"
+#include "core.h"
+#include "log.h"
+#include "maths.h"
+#include "render_types.h"
+
+extern core g_core;
+
+void scene_init(scene *s) {
+ memset(s, 0, sizeof(scene));
+ s->renderables = render_entity_darray_new(10);
+ // default camera position - moved slightly along Z axis looking at 0,0,0
+ vec3 cam_pos = vec3_create(0, 0, -5);
+ s->camera = camera_create(cam_pos, vec3_negate(cam_pos), VEC3_Y, deg_to_rad(45.0));
+}
+void scene_free(scene *s) { render_entity_darray_free(s->renderables); }
+
+void scene_set_dir_light(directional_light light) { g_core.default_scene.dir_light = light; }
+void scene_add_point_light(point_light light) {
+ scene s = g_core.default_scene;
+ if (s.point_lights_count == 4) {
+ WARN("Already 4 point lights, we can't add more.");
+ } else {
+ s.point_lights[s.point_lights_count] = light;
+ s.point_lights_count++;
+ }
+}
+void scene_add_model(model_handle model, transform3d transform) {
+ render_entity renderable = { .model = model, .tf = transform };
+ render_entity_darray_push(g_core.default_scene.renderables, renderable);
+}
+
+bool scene_remove_model(model_handle model) {
+ scene s = g_core.default_scene;
+ for (u32 i = 0; i <= s.renderables->len; i++) {
+ if (s.renderables->data[i].model.raw == model.raw) {
+ // TODO: add remove function to darray
+ }
+ }
+ return true;
+}
+
+void scene_set_model_transform(model_handle model, transform3d new_transform) {
+ scene s = g_core.default_scene;
+ for (u32 i = 0; i <= s.renderables->len; i++) {
+ if (s.renderables->data[i].model.raw == model.raw) {
+ s.renderables->data[i].tf = new_transform;
+ }
+ }
+}
+
+void scene_set_camera(vec3 pos, vec3 front) {
+ scene s = g_core.default_scene;
+ s.camera.position = pos;
+ s.camera.front = front;
+}