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);
}
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();
}

View File

@ -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);