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:
parent
5ffa3b0d1e
commit
1b4f55804c
6 changed files with 29 additions and 13 deletions
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue