The flame shader now only turns on when facing an enemy. Next is tagging enemies with specific shaders to apply at a specific time.

This commit is contained in:
Zed A. Shaw 2025-04-16 00:02:27 -04:00
parent 5ffa3b0d1e
commit 1b4f55804c
6 changed files with 29 additions and 13 deletions

View file

@ -72,6 +72,14 @@ void Raycaster::draw_pixel_buffer() {
$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) {
constexpr const int texture_width = TEXTURE_WIDTH;
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.
// float level = sqrt(rec.first);
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());
sf::Vector2f sprite_size{(float)sprite_width, (float)sprite_height};
$brightness->setUniform("u_resolution", sprite_size);
shared_ptr<sf::Shader> effect = nullptr;
target.draw(*sf_sprite, $brightness.get());
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, effect.get());
}
}
}
@ -400,4 +412,6 @@ void Raycaster::update_level(GameLevel level) {
void Raycaster::init_shaders() {
$brightness = shaders::get("rayview_sprites");
$brightness->setUniform("source", sf::Shader::CurrentTexture);
$flame = shaders::get("flame");
$flame->setUniform("source", sf::Shader::CurrentTexture);
}