Refactor to allow for the new screen flow.
This commit is contained in:
parent
e7b6b42698
commit
6f9e8a3ed4
10 changed files with 59 additions and 52 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue