#ifdef HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include typedef Atlas::Message::MapType AtlasMapType; namespace Eris { Task::Task(Entity* owner, const std::string& nm) : m_name(nm), m_owner(owner), m_progress(0.0), m_progressRate(-1.0) { } Task::~Task() { m_progressRate = -1.0; // force it to be un-registered m_owner->getView()->taskRateChanged(this); } bool Task::isComplete() const { return (m_progress >= 1.0); } void Task::updateFromAtlas(const AtlasMapType& d) { AtlasMapType::const_iterator it = d.find("progress"); if (it != d.end()) { m_progress = it->second.asFloat(); progressChanged(); } it = d.find("progress_rate"); if (it != d.end()) { m_progressRate = it->second.asFloat(); m_owner->getView()->taskRateChanged(this); } } void Task::progressChanged() { Progressed.emit(); if (isComplete()) { Completed.emit(); // remove from progression updating m_progressRate = -1; m_owner->getView()->taskRateChanged(this); } } void Task::updatePredictedProgress(const WFMath::TimeDiff& dt) { if (isComplete()) return; m_progress += m_progressRate * (dt.milliseconds() / 1000.0); m_progress = std::min(m_progress, 1.0); Progressed.emit(); // note we will never signal completion here, but instead we wait for // the server to notify us. } }