diff options
Diffstat (limited to 'src/scene.cpp')
-rw-r--r-- | src/scene.cpp | 29 |
1 files changed, 20 insertions, 9 deletions
diff --git a/src/scene.cpp b/src/scene.cpp index b52553a..f69398d 100644 --- a/src/scene.cpp +++ b/src/scene.cpp @@ -1,21 +1,13 @@ #include "scene.hpp" -#include <memory> Scene::Scene() { directional_light = {0, 0, -1}; viewport_dimension = {2, 3}; - scene_dimension = {SCREEN_WIDTH, SCREEN_HEIGHT}; + scene_dimension = {SCREEN_WIDTH / 2, SCREEN_HEIGHT}; z_plane = int2fx(1); } -void Scene::render() { - auto this_ptr = std::make_shared<Scene>(this); - for (auto renderable : renderables) { - renderable.render(this_ptr); - } -} - POINT Scene::project_2d(VECTOR vertex) { POINT pt = {0, 0}; @@ -27,3 +19,22 @@ POINT Scene::project_2d(VECTOR vertex) { return pt; } + +POINT Scene::viewport_to_scene(POINT p) { + FIXED x = fxmul( + p.x, (std::get<0>(scene_dimension) / std::get<0>(viewport_dimension)) + << FIX_SHIFT); + FIXED y = fxmul( + p.y, (std::get<1>(scene_dimension) / std::get<1>(viewport_dimension)) + << FIX_SHIFT); + return {x, y}; +} + +void Scene::draw_line(POINT p0, POINT p1, std::uint8_t pal_idx) { + POINT scene_p0 = viewport_to_scene(p0); + POINT scene_p1 = viewport_to_scene(p1); + + std::uint16_t pixels = (pal_idx << 8) | pal_idx; + bmp16_line(scene_p0.x, scene_p0.y, scene_p1.x, scene_p1.y, pixels, vid_page, + M4_WIDTH); +} |