Refactor to allow for the new screen flow.

This commit is contained in:
Zed A. Shaw 2026-05-27 12:09:17 -04:00
parent e7b6b42698
commit 6f9e8a3ed4
10 changed files with 59 additions and 52 deletions

View file

@ -121,11 +121,10 @@ inline void set_scale_position(sf::Sprite& sprite, sf::Vector2f& position, sf::V
}
void Raycaster::sprite_casting() {
void Raycaster::sprite_casting(sf::RenderTarget& target) {
auto& lights = $level.lights->lighting();
auto world = $level.world;
$level.collision->distance_sorted($sprite_order, {(size_t)$pos_x, (size_t)$pos_y}, RENDER_DISTANCE);
$sprites_to_render.clear();
// BUG: shaders are shared between sprites
// BUG: sprites seem to be shared too? Put a torch on the floor in a room then another to its left and only one is visible at a time.
@ -226,12 +225,13 @@ void Raycaster::sprite_casting() {
auto anim = world->get_if<animation::Animation>(rec.entity);
if(anim != nullptr && anim->playing) {
// BUG: why use refs for sf_sprite? Can it just be pointer?
step_animation(*anim, *sf_sprite, position, scale, in_texture, origin);
} else {
set_scale_position(*sf_sprite, position, scale, in_texture, origin);
}
$sprites_to_render.emplace_back(sf_sprite, effect);
target.draw(*sf_sprite, effect.get());
}
}
}
@ -438,16 +438,13 @@ void Raycaster::update() {
draw_ceiling_floor();
cast_rays();
draw_pixel_buffer();
sprite_casting();
}
// BUG: if target is a rendertarget then I can say it has to be the viewport only, then I can get rid of $screen_pos_x/y
void Raycaster::render(sf::RenderTarget& target) {
target.draw($view_sprite);
for(auto [sprite, effect] : $sprites_to_render) {
target.draw(*sprite, effect.get());
}
sprite_casting(target);
}
void Raycaster::update_sprite(DinkyECS::Entity ent, components::Sprite& sprite) {

View file

@ -21,7 +21,7 @@ struct CameraLOL {
double target_plane_y = 0.0;
};
using SpriteRender = std::pair<std::shared_ptr<sf::Sprite>, std::shared_ptr<sf::Shader>>;
using SpriteRender = std::pair<sf::Sprite, std::shared_ptr<sf::Shader>>;
struct Raycaster {
sf::Texture $view_texture;
@ -52,7 +52,6 @@ struct Raycaster {
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;
@ -64,7 +63,7 @@ struct Raycaster {
void cast_rays();
void draw_ceiling_floor();
void draw_pixel_buffer();
void sprite_casting();
void sprite_casting(sf::RenderTarget& target);
void update();
void render(sf::RenderTarget& target);