diff --git a/anim/controller.cpp b/anim/controller.cpp index a68955d216..3e347cd4d8 100644 --- a/anim/controller.cpp +++ b/anim/controller.cpp @@ -60,14 +60,20 @@ namespace anim for (TTasks::const_iterator it = m_tasksList.begin(); it != m_tasksList.end(); ++it) { shared_ptr const & task = *it; - if (task->State() == Task::EWaitStart) + if (task->State() == Task::EStarted) task->OnStart(ts); if (task->State() == Task::EInProgress) task->OnStep(ts); - if (task->State() == Task::EWaitEnd) - task->OnEnd(ts); - else + + if (task->State() == Task::EInProgress) l.push_back(task); + else + { + if (task->State() == Task::ECancelled) + task->OnCancel(ts); + if (task->State() == Task::EEnded) + task->OnEnd(ts); + } } m_tasks.ProcessList(bind(&Controller::CopyTasks, this, ref(l), _1)); diff --git a/anim/task.hpp b/anim/task.hpp index 3853b27fce..538481ae15 100644 --- a/anim/task.hpp +++ b/anim/task.hpp @@ -9,9 +9,10 @@ namespace anim enum EState { - EWaitStart, + EStarted, EInProgress, - EWaitEnd + ECancelled, + EEnded }; private: @@ -32,8 +33,12 @@ namespace anim virtual void OnStart(double ts); virtual void OnStep(double ts); virtual void OnEnd(double ts); + virtual void OnCancel(double ts); - void Finish(); - bool IsFinished() const; + void Cancel(); + void End(); + + bool IsCancelled() const; + bool IsEnded() const; }; } diff --git a/map/rotate_screen_task.cpp b/map/rotate_screen_task.cpp index 8a757dfb94..9128a472c7 100644 --- a/map/rotate_screen_task.cpp +++ b/map/rotate_screen_task.cpp @@ -24,11 +24,11 @@ void RotateScreenTask::OnStep(double ts) { if (ts - m_startTime > m_interval) { - Finish(); + End(); return; } - if (IsFinished()) + if (IsEnded()) return; double elapsedSec = ts - m_startTime; @@ -37,3 +37,9 @@ void RotateScreenTask::OnStep(double ts) m_framework->GetNavigator().Rotate(angle - m_curAngle); m_curAngle = angle; } + +void RotateScreenTask::OnEnd(double ts) +{ + /// ensuring that the final angle is reached + m_framework->GetNavigator().SetAngle(m_endAngle); +} diff --git a/map/rotate_screen_task.hpp b/map/rotate_screen_task.hpp index 8d8ec8ec77..634b6499c7 100644 --- a/map/rotate_screen_task.hpp +++ b/map/rotate_screen_task.hpp @@ -25,4 +25,5 @@ public: void OnStart(double ts); void OnStep(double ts); + void OnEnd(double ts); };