diff --git a/engine/engine.c b/engine/engine.c index f558c9f..a788db8 100644 --- a/engine/engine.c +++ b/engine/engine.c @@ -199,10 +199,19 @@ inline void update_scene(Scene_t* scene, float delta_time) update_particle_system(&scene->part_sys, scene->delta_time); } -inline void render_scene(Scene_t* scene) +static void _internal_render_scene(Scene_t* scene) { - BeginDrawing(); - ClearBackground(scene->bg_colour); + if ((scene->state & SCENE_RENDER_BIT) == 0) return; + + if (scene->parent_scene == NULL) + { + ClearBackground(scene->bg_colour); + } + else + { + ClearBackground((Color){255,255,255,0}); + } + for (uint8_t i = 0; i < scene->layers.n_layers; ++i) { RenderLayer_t* layer = scene->layers.render_layers + i; @@ -218,6 +227,12 @@ inline void render_scene(Scene_t* scene) WHITE ); } +} + +inline void render_scene(Scene_t* scene) +{ + BeginDrawing(); + _internal_render_scene(scene); EndDrawing(); } @@ -273,23 +288,8 @@ void render_curr_scene(GameEngine_t* engine) while ((elem = sc_heap_pop(&engine->scenes_render_order)) != NULL) { Scene_t* scene = elem->data; - if ((scene->state & SCENE_RENDER_BIT) == 0) continue; - for (uint8_t i = 0; i < scene->layers.n_layers; ++i) - { - RenderLayer_t* layer = scene->layers.render_layers + i; - Rectangle draw_rec = layer->render_area; - Vector2 draw_pos = {draw_rec.x, draw_rec.y}; - draw_rec.x = 0; - draw_rec.y = 0; - draw_rec.height *= -1; - DrawTextureRec( - layer->layer_tex.texture, - draw_rec, - draw_pos, - WHITE - ); - } + _internal_render_scene(scene); } EndDrawing(); } diff --git a/scene_man_test.c b/scene_man_test.c index 8a514db..7def810 100644 --- a/scene_man_test.c +++ b/scene_man_test.c @@ -27,11 +27,18 @@ struct DummyScene { Scene_t scene; unsigned int number; float elapsed; + Vector2 text_pos; }; static void level_scene_render_func(Scene_t* scene) { + struct DummyScene* data = CONTAINER_OF(scene, struct DummyScene, scene); + char text[32]; + sprintf(text, "Scene %u", data->number); + BeginTextureMode(scene->layers.render_layers[0].layer_tex); + DrawText(text, 32 * data->number, 32 * data->number, 12, BLACK); + EndTextureMode(); } static inline unsigned int get_tile_idx(int x, int y, const TileGrid_t* tilemap) @@ -109,7 +116,7 @@ int main(void) add_scene_layer( &dummy_scenes[i].scene, 1280, 640, (Rectangle){0,0,1280,640} ); - + dummy_scenes[i].scene.bg_colour = WHITE; sc_array_add(&dummy_scenes[i].scene.systems, &print_number_sys); sc_array_add(&dummy_scenes[i].scene.systems, &level_scene_render_func); //sc_map_put_64(&scene.scene.action_map, KEY_R, ACTION_RESTART);