Refactor render function

scene_man
En Yi 2024-06-30 15:24:22 +08:00
parent c5a30bee6d
commit 510428d152
2 changed files with 27 additions and 20 deletions

View File

@ -199,10 +199,19 @@ inline void update_scene(Scene_t* scene, float delta_time)
update_particle_system(&scene->part_sys, scene->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)
{
if ((scene->state & SCENE_RENDER_BIT) == 0) return;
if (scene->parent_scene == NULL)
{ {
BeginDrawing();
ClearBackground(scene->bg_colour); ClearBackground(scene->bg_colour);
}
else
{
ClearBackground((Color){255,255,255,0});
}
for (uint8_t i = 0; i < scene->layers.n_layers; ++i) for (uint8_t i = 0; i < scene->layers.n_layers; ++i)
{ {
RenderLayer_t* layer = scene->layers.render_layers + i; RenderLayer_t* layer = scene->layers.render_layers + i;
@ -218,6 +227,12 @@ inline void render_scene(Scene_t* scene)
WHITE WHITE
); );
} }
}
inline void render_scene(Scene_t* scene)
{
BeginDrawing();
_internal_render_scene(scene);
EndDrawing(); EndDrawing();
} }
@ -273,23 +288,8 @@ void render_curr_scene(GameEngine_t* engine)
while ((elem = sc_heap_pop(&engine->scenes_render_order)) != NULL) while ((elem = sc_heap_pop(&engine->scenes_render_order)) != NULL)
{ {
Scene_t* scene = elem->data; Scene_t* scene = elem->data;
if ((scene->state & SCENE_RENDER_BIT) == 0) continue;
for (uint8_t i = 0; i < scene->layers.n_layers; ++i) _internal_render_scene(scene);
{
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
);
}
} }
EndDrawing(); EndDrawing();
} }

View File

@ -27,11 +27,18 @@ struct DummyScene {
Scene_t scene; Scene_t scene;
unsigned int number; unsigned int number;
float elapsed; float elapsed;
Vector2 text_pos;
}; };
static void level_scene_render_func(Scene_t* scene) 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) 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( add_scene_layer(
&dummy_scenes[i].scene, 1280, 640, (Rectangle){0,0,1280,640} &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, &print_number_sys);
sc_array_add(&dummy_scenes[i].scene.systems, &level_scene_render_func); sc_array_add(&dummy_scenes[i].scene.systems, &level_scene_render_func);
//sc_map_put_64(&scene.scene.action_map, KEY_R, ACTION_RESTART); //sc_map_put_64(&scene.scene.action_map, KEY_R, ACTION_RESTART);