Sprites now have a distance lighting calculation that's the same as the raycaster using a shader.

This commit is contained in:
Zed A. Shaw 2025-02-07 13:50:50 -05:00
parent a19bc47904
commit 3986e6978e
4 changed files with 21 additions and 8 deletions

View file

@ -136,7 +136,11 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) {
$anim.step(*sf_sprite, texX, texY, texX_end - texX, textureHeight);
sf_sprite->setPosition({x, y});
target.draw(*sf_sprite);
$brightness.setUniform("offsetFactor", sf::Glsl::Vec2{0.0f, 0.0f});
float level = sqrt(rec.first);
$brightness.setUniform("darkness", level);
target.draw(*sf_sprite, &$brightness);
}
}
}
@ -351,3 +355,10 @@ void Raycaster::set_level(GameLevel level) {
}
});
}
void Raycaster::init_shaders() {
dbc::check(sf::Shader::isAvailable(), "no shaders?!");
bool good = $brightness.loadFromFile("shaders/modal.frag", sf::Shader::Type::Fragment);
dbc::check(good, "shader could not be loaded");
$brightness.setUniform("source", sf::Shader::CurrentTexture);
}