@ -67,6 +67,7 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) {
// sort sprites from far to close
// sort sprites from far to close
auto sprite_order = $ level . collision - > distance_sorted ( { ( size_t ) $ posX , ( size_t ) $ posY } ) ;
auto sprite_order = $ level . collision - > distance_sorted ( { ( size_t ) $ posX , ( size_t ) $ posY } ) ;
// after sorting the sprites, do the projection
// after sorting the sprites, do the projection
for ( auto & rec : sprite_order ) {
for ( auto & rec : sprite_order ) {
if ( ! $ sprites . contains ( rec . second ) ) continue ;
if ( ! $ sprites . contains ( rec . second ) ) continue ;
@ -332,9 +333,13 @@ void Raycaster::set_level(GameLevel level) {
$ level = level ;
$ level = level ;
auto & tiles = $ level . map - > tiles ( ) ;
auto & tiles = $ level . map - > tiles ( ) ;
auto world = $ level . world ;
auto world = $ level . world ;
auto & player = world - > get_the < components : : Player > ( ) ;
$ map = $ textures . convert_char_to_texture ( tiles . $ tile_ids ) ;
$ map = $ textures . convert_char_to_texture ( tiles . $ tile_ids ) ;
world - > query < components : : Position > ( [ & ] ( const auto ent , auto & pos ) {
world - > query < components : : Position > ( [ & ] ( const auto ent , auto & pos ) {
// player doesn't need a sprite
if ( player . entity = = ent ) return ;
if ( world - > has < components : : Combat > ( ent ) ) {
if ( world - > has < components : : Combat > ( ent ) ) {
fmt : : println ( " enemy: {}, pos={},{} " , ent , pos . location . x , pos . location . y ) ;
fmt : : println ( " enemy: {}, pos={},{} " , ent , pos . location . x , pos . location . y ) ;
auto sprite_txt = $ textures . sprite_textures . at ( " evil_eye " ) ;
auto sprite_txt = $ textures . sprite_textures . at ( " evil_eye " ) ;