feat(border): bump del border per explosions properes a la paret
This commit is contained in:
@@ -75,6 +75,21 @@ GameScene::GameScene(SDLManager& sdl, SceneContext& context)
|
||||
border_.bumpAt(hit.contact_point, STRENGTH);
|
||||
});
|
||||
|
||||
// Explosions properes a una paret també generen bump (falloff lineal amb la distància).
|
||||
debris_manager_.setExplosionCallback([this](Vec2 center) {
|
||||
const SDL_FRect& zona = Defaults::Zones::PLAYAREA;
|
||||
const float DIST_LEFT = std::abs(center.x - zona.x);
|
||||
const float DIST_RIGHT = std::abs((zona.x + zona.w) - center.x);
|
||||
const float DIST_TOP = std::abs(center.y - zona.y);
|
||||
const float DIST_BOTTOM = std::abs((zona.y + zona.h) - center.y);
|
||||
const float MIN_DIST = std::min({DIST_LEFT, DIST_RIGHT, DIST_TOP, DIST_BOTTOM});
|
||||
if (MIN_DIST > Defaults::Border::EXPLOSION_FALLOFF_PX) {
|
||||
return;
|
||||
}
|
||||
const float FALLOFF = 1.0F - (MIN_DIST / Defaults::Border::EXPLOSION_FALLOFF_PX);
|
||||
border_.bumpAt(center, Defaults::Border::EXPLOSION_BASE_STRENGTH * FALLOFF);
|
||||
});
|
||||
|
||||
// Load stage configuration
|
||||
stage_config_ = StageSystem::StageLoader::load("data/stages/stages.yaml");
|
||||
if (!stage_config_) {
|
||||
|
||||
Reference in New Issue
Block a user