Had to fix the rendering so that each sprite is rendered separately in sprite_casting during the render phase.
This commit is contained in:
parent
d22eaa554d
commit
dfc86452fc
3 changed files with 9 additions and 10 deletions
|
|
@ -203,6 +203,10 @@ void WorldBuilder::configure_starting_items(DinkyECS::World &world) {
|
||||||
|
|
||||||
auto healing = System::spawn_item(world, "REPAIR_KIT");
|
auto healing = System::spawn_item(world, "REPAIR_KIT");
|
||||||
inventory.add("inv0", healing);
|
inventory.add("inv0", healing);
|
||||||
|
|
||||||
|
healing = System::spawn_item(world, "REPAIR_KIT");
|
||||||
|
inventory.add("inv1", healing);
|
||||||
|
|
||||||
world.make_constant(healing);
|
world.make_constant(healing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ 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& lights = $level.lights->lighting();
|
||||||
auto world = $level.world;
|
auto world = $level.world;
|
||||||
$level.collision->distance_sorted($sprite_order, {(size_t)$pos_x, (size_t)$pos_y}, RENDER_DISTANCE);
|
$level.collision->distance_sorted($sprite_order, {(size_t)$pos_x, (size_t)$pos_y}, RENDER_DISTANCE);
|
||||||
|
|
@ -212,7 +212,6 @@ void Raycaster::sprite_casting() {
|
||||||
sf::Vector2f scale{sprite_scale_w, sprite_scale_h};
|
sf::Vector2f scale{sprite_scale_w, sprite_scale_h};
|
||||||
sf::Vector2f position{x + origin.x * scale.x, y + origin.y * scale.y};
|
sf::Vector2f position{x + origin.x * scale.x, y + origin.y * scale.y};
|
||||||
sf::IntRect in_texture{ {tex_x, tex_y}, {tex_render_width, texture_height}};
|
sf::IntRect in_texture{ {tex_x, tex_y}, {tex_render_width, texture_height}};
|
||||||
|
|
||||||
shared_ptr<sf::Shader> effect = System::sprite_effect(rec.entity);
|
shared_ptr<sf::Shader> effect = System::sprite_effect(rec.entity);
|
||||||
|
|
||||||
if(effect) {
|
if(effect) {
|
||||||
|
|
@ -231,7 +230,7 @@ void Raycaster::sprite_casting() {
|
||||||
set_scale_position(*sf_sprite, position, scale, in_texture, origin);
|
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 +437,12 @@ void Raycaster::update() {
|
||||||
draw_ceiling_floor();
|
draw_ceiling_floor();
|
||||||
cast_rays();
|
cast_rays();
|
||||||
draw_pixel_buffer();
|
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
|
// 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) {
|
void Raycaster::render(sf::RenderTarget& target) {
|
||||||
target.draw($view_sprite);
|
target.draw($view_sprite);
|
||||||
|
sprite_casting(target);
|
||||||
for(auto [sprite, effect] : $sprites_to_render) {
|
|
||||||
target.draw(*sprite, effect.get());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Raycaster::update_sprite(DinkyECS::Entity ent, components::Sprite& sprite) {
|
void Raycaster::update_sprite(DinkyECS::Entity ent, components::Sprite& sprite) {
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ struct CameraLOL {
|
||||||
double target_plane_y = 0.0;
|
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 {
|
struct Raycaster {
|
||||||
sf::Texture $view_texture;
|
sf::Texture $view_texture;
|
||||||
|
|
@ -64,7 +64,7 @@ struct Raycaster {
|
||||||
void cast_rays();
|
void cast_rays();
|
||||||
void draw_ceiling_floor();
|
void draw_ceiling_floor();
|
||||||
void draw_pixel_buffer();
|
void draw_pixel_buffer();
|
||||||
void sprite_casting();
|
void sprite_casting(sf::RenderTarget& target);
|
||||||
void update();
|
void update();
|
||||||
void render(sf::RenderTarget& target);
|
void render(sf::RenderTarget& target);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue