|
|
@ -72,6 +72,14 @@ void Raycaster::draw_pixel_buffer() { |
|
|
|
$view_texture.update((uint8_t *)$pixels.get(), {(unsigned int)$width, (unsigned int)$height}, {0, 0}); |
|
|
|
$view_texture.update((uint8_t *)$pixels.get(), {(unsigned int)$width, (unsigned int)$height}, {0, 0}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Raycaster::apply_sprite_effect(shared_ptr<sf::Shader> effect, float width, float height) { |
|
|
|
|
|
|
|
effect->setUniform("u_time", $clock.getElapsedTime().asSeconds()); |
|
|
|
|
|
|
|
sf::Vector2f u_resolution{width, height}; |
|
|
|
|
|
|
|
effect->setUniform("u_resolution", u_resolution); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void Raycaster::sprite_casting(sf::RenderTarget &target) { |
|
|
|
void Raycaster::sprite_casting(sf::RenderTarget &target) { |
|
|
|
constexpr const int texture_width = TEXTURE_WIDTH; |
|
|
|
constexpr const int texture_width = TEXTURE_WIDTH; |
|
|
|
constexpr const int texture_height = TEXTURE_HEIGHT; |
|
|
|
constexpr const int texture_height = TEXTURE_HEIGHT; |
|
|
@ -171,14 +179,18 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) { |
|
|
|
// the actual distance we need to sqrt that.
|
|
|
|
// the actual distance we need to sqrt that.
|
|
|
|
// float level = sqrt(rec.first);
|
|
|
|
// float level = sqrt(rec.first);
|
|
|
|
float level = lights[sprite_pos.location.y][sprite_pos.location.x] * PERCENT; |
|
|
|
float level = lights[sprite_pos.location.y][sprite_pos.location.x] * PERCENT; |
|
|
|
if(rec.second == aiming_at) level += 0.2; |
|
|
|
|
|
|
|
$brightness->setUniform("darkness", level); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$brightness->setUniform("u_time", $clock.getElapsedTime().asSeconds()); |
|
|
|
shared_ptr<sf::Shader> effect = nullptr; |
|
|
|
sf::Vector2f sprite_size{(float)sprite_width, (float)sprite_height}; |
|
|
|
|
|
|
|
$brightness->setUniform("u_resolution", sprite_size); |
|
|
|
if(rec.second == aiming_at) { |
|
|
|
|
|
|
|
effect = $flame; |
|
|
|
|
|
|
|
apply_sprite_effect(effect, sprite_width, sprite_height); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
effect = $brightness; |
|
|
|
|
|
|
|
effect->setUniform("darkness", level); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
target.draw(*sf_sprite, $brightness.get()); |
|
|
|
target.draw(*sf_sprite, effect.get()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -400,4 +412,6 @@ void Raycaster::update_level(GameLevel level) { |
|
|
|
void Raycaster::init_shaders() { |
|
|
|
void Raycaster::init_shaders() { |
|
|
|
$brightness = shaders::get("rayview_sprites"); |
|
|
|
$brightness = shaders::get("rayview_sprites"); |
|
|
|
$brightness->setUniform("source", sf::Shader::CurrentTexture); |
|
|
|
$brightness->setUniform("source", sf::Shader::CurrentTexture); |
|
|
|
|
|
|
|
$flame = shaders::get("flame"); |
|
|
|
|
|
|
|
$flame->setUniform("source", sf::Shader::CurrentTexture); |
|
|
|
} |
|
|
|
} |
|
|
|