#include "classicflyinganimationscenario.h" #include "graphics/classicsprite.h" void ClassicFlyingAnimationScenario::launch(const std::shared_ptr 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(Coordinates(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); }