fix(attract): el logo no sona en explotar i la càmera del dive no frena amb la cortinilla
This commit is contained in:
@@ -489,11 +489,16 @@ void TitleScene::updateBlackScreenState(float delta_time) {
|
||||
}
|
||||
}
|
||||
|
||||
void TitleScene::updateDemoDiveState(float delta_time) {
|
||||
void TitleScene::advanceDive(float delta_time) {
|
||||
namespace D = Defaults::Game::Dive;
|
||||
dive_time_ += delta_time;
|
||||
const float T = std::min(dive_time_ / D::DURATION, 1.0F);
|
||||
const float EASED = Easing::easeInQuad(T); // acceleració cap al punt de fuga
|
||||
// T SENSE topall: easeInQuad (=T²) fa que la posició creixi quadràticament,
|
||||
// és a dir, la velocitat creix linealment → acceleració constant que no
|
||||
// s'atura. CAMERA_DISTANCE i ZOOM_MAX deixen de ser límits: són el valor
|
||||
// assolit en l'instant de referència (T=1, quan cau la cortinilla) i a
|
||||
// partir d'ací el moviment continua accelerant (std::lerp extrapola).
|
||||
const float T = dive_time_ / D::DURATION;
|
||||
const float EASED = Easing::easeInQuad(T);
|
||||
|
||||
// Càmera 3D real cap a +Z: starfield i naus es projecten amb la càmera, així
|
||||
// que les estrelles es rasguen i les naus creixen i s'escapen pels costats.
|
||||
@@ -507,14 +512,21 @@ void TitleScene::updateDemoDiveState(float delta_time) {
|
||||
}
|
||||
// Logo i peu són 2D: els fakegem el dive amb un zoom des del centre.
|
||||
dive_zoom_ = std::lerp(1.0F, D::ZOOM_MAX, EASED);
|
||||
}
|
||||
|
||||
if (T >= 1.0F) {
|
||||
void TitleScene::updateDemoDiveState(float delta_time) {
|
||||
advanceDive(delta_time);
|
||||
|
||||
// En l'instant de referència (dive_time_ == DURATION) cau la cortinilla,
|
||||
// però la càmera NO s'atura: segueix accelerant a DEMO_CURTAIN.
|
||||
if (dive_time_ >= Defaults::Game::Dive::DURATION) {
|
||||
current_state_ = TitleState::DEMO_CURTAIN;
|
||||
curtain_.cover(Defaults::Game::Curtain::COVER_DURATION);
|
||||
}
|
||||
}
|
||||
|
||||
void TitleScene::updateDemoCurtainState(float delta_time) {
|
||||
advanceDive(delta_time); // la càmera continua accelerant sota la tela
|
||||
curtain_.update(delta_time);
|
||||
if (curtain_.isDone()) {
|
||||
context_.setNextScene(SceneType::GAME);
|
||||
|
||||
Reference in New Issue
Block a user