diff options
author | Omniscient <17525998+omnisci3nce@users.noreply.github.com> | 2024-05-10 13:24:05 +1000 |
---|---|---|
committer | Omniscient <17525998+omnisci3nce@users.noreply.github.com> | 2024-05-10 13:24:05 +1000 |
commit | f7944239b793d1d5c49336856965d3a793f99316 (patch) | |
tree | 2effd38a16a15aee505eb8c27a231dfbe35c822a /src/scene.c | |
parent | 3a0557d98ba311b031ad53ceb8fc6025013f65dc (diff) |
make core a static and add a default scene to it
Diffstat (limited to 'src/scene.c')
-rw-r--r-- | src/scene.c | 56 |
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; +} |