Refactor render function
parent
c5a30bee6d
commit
510428d152
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
|
|
Loading…
Reference in New Issue