Refactor the raycaster to separate update from render.

This commit is contained in:
Zed A. Shaw 2026-02-28 12:22:03 -05:00
parent 36efdc91aa
commit dd3952d5c1
3 changed files with 22 additions and 11 deletions

View file

@ -21,6 +21,8 @@ struct CameraLOL {
double target_plane_y = 0.0;
};
using SpriteRender = std::pair<std::shared_ptr<sf::Sprite>, std::shared_ptr<sf::Shader>>;
struct Raycaster {
int $pitch=0;
sf::Clock $clock;
@ -48,6 +50,8 @@ struct Raycaster {
int $screen_pos_x = RAY_VIEW_X;
int $screen_pos_y = RAY_VIEW_Y;
std::unordered_map<DinkyECS::Entity, textures::SpriteTexture> $sprites;
// BUG: this can be way better I think
std::vector<SpriteRender> $sprites_to_render;
SortedEntities $sprite_order;
GameDB::Level $level;
@ -60,9 +64,9 @@ struct Raycaster {
void cast_rays();
void draw_ceiling_floor();
void draw_pixel_buffer();
void sprite_casting(sf::RenderTarget& target);
void render();
void draw(sf::RenderTarget& target);
void sprite_casting();
void update();
void render(sf::RenderTarget& target);
void sort_sprites(std::vector<int>& order, std::vector<double>& dist, int amount);
void set_position(int x, int y);