forked from NaiJi/project-kyoku
56 lines
1.5 KiB
C++
56 lines
1.5 KiB
C++
#include "classicflyinganimationscenario.h"
|
|
#include "classicsprite.h"
|
|
|
|
void ClassicFlyingAnimationScenario::launch(const std::shared_ptr<ClassicSprite> sprite, const microsec& time_begin, const microsec &time_end)
|
|
{
|
|
_sprite = sprite;
|
|
_time_begin = time_begin;
|
|
_time_end = time_end;
|
|
|
|
_percentage = ((_time_end - _time_begin) * 0.01);
|
|
}
|
|
|
|
float ClassicFlyingAnimationScenario::getPoint(float n1, float n2, float perc) const
|
|
{
|
|
float diff = n2 - n1;
|
|
|
|
return n1 + ( diff * perc );
|
|
}
|
|
|
|
void ClassicFlyingAnimationScenario::update(const microsec& music_offset)
|
|
{
|
|
const auto crd = _sprite->coordinates();
|
|
auto update_time = music_offset - _time_begin;
|
|
float i = update_time / _percentage * 0.01;
|
|
|
|
float xa = getPoint( crd.x + 20. , crd.x + 90. , i );
|
|
float ya = getPoint( crd.y - 600. , crd.y - 150. , i );
|
|
float xb = getPoint( crd.x + 90. , crd.x , i );
|
|
float yb = getPoint( crd.y - 150. , crd.y , i );
|
|
|
|
_sprite->setTrailCoordinates({getPoint( xa , xb , i ), getPoint( ya , yb , i )});
|
|
|
|
bool pastPerfectScore = (i >= 1);
|
|
|
|
if (pastPerfectScore)
|
|
fadeTrailSprite();
|
|
}
|
|
|
|
bool ClassicFlyingAnimationScenario::isDone() const
|
|
{
|
|
return false;
|
|
}
|
|
|
|
void ClassicFlyingAnimationScenario::fadeTrailSprite() const
|
|
{
|
|
auto fill_color = _sprite->trailColor();
|
|
|
|
if (fill_color.a == 0)
|
|
return;
|
|
|
|
auto new_alpha = fill_color.a - 35;
|
|
fill_color.a = new_alpha < 0 ? 0 : new_alpha;
|
|
|
|
_sprite->setTrailColor(fill_color);
|
|
}
|