diff options
author | Joshua Rowe <17525998+omnisci3nce@users.noreply.github.com> | 2024-05-20 10:50:11 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-05-20 10:50:11 +1000 |
commit | e904c22003c3a134201b222e6619e782fbe63947 (patch) | |
tree | 5295c8ce5f855ca4a0f1bebe50beee80bae66682 /src/scene.c | |
parent | 02e84ee4d18e705e3362be1e327fdb6f1397a032 (diff) | |
parent | 73d4145f46d2305f45761b8e456df692d1962dfb (diff) |
Merge pull request #14 from omnisci3nce/realign
Realign
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; +} |