11 #include <Atlas/Message/Element.h> 13 #include <wfmath/timestamp.h> 15 typedef Atlas::Message::MapType AtlasMapType;
20 m_name(
std::move(name)),
23 m_progressRate(-1.0) {
28 m_progressRate = -1.0;
30 ProgressRateChanged.emit();
34 return (m_progress >= 1.0);
37 void Task::updateFromAtlas(
const AtlasMapType& d) {
40 auto it = d.find(
"progress");
41 if (it != d.end() && it->second.Float()) {
42 m_progress = it->second.asFloat();
49 if (it != d.end() && it->second.isFloat()) {
50 m_progressRate = it->second.Float();
52 ProgressRateChanged.emit();
56 std::vector<TaskUsage> usages;
57 it = d.find(
"usages");
58 if (it != d.end() && it->second.isList()) {
59 for (
auto& entry : it->second.List()) {
62 auto nameI = entry.Map().find(
"name");
63 if (nameI != entry.Map().end() && nameI->second.isString()) {
64 usage.name = nameI->second.String();
66 auto paramsI = entry.Map().find(
"params");
67 if (paramsI != entry.Map().end() && paramsI->second.isMap()) {
68 auto& params = paramsI->second.Map();
69 for (
auto& paramEntry : params) {
71 if (paramEntry.second.isMap()) {
72 auto& paramMap = paramEntry.second.Map();
74 auto I = paramMap.find(
"max");
75 if (I != paramMap.end() && I->second.isInt()) {
76 param.max = I->second.Int();
82 auto I = paramMap.find(
"min");
83 if (I != paramMap.end() && I->second.isInt()) {
84 param.min = I->second.Int();
90 auto I = paramMap.find(
"constraint");
91 if (I != paramMap.end() && I->second.isString()) {
92 param.constraint = I->second.String();
96 auto I = paramMap.find(
"type");
97 if (I != paramMap.end() && I->second.isString()) {
98 param.type = I->second.String();
102 usage.params.emplace(paramEntry.first, param);
105 usages.emplace_back(std::move(usage));
108 if (usages != m_usages) {
109 m_usages = std::move(usages);
110 UsagesChanged.emit();
115 void Task::progressChanged() {
122 ProgressRateChanged.emit();
126 void Task::updatePredictedProgress(
const WFMath::TimeDiff& dt) {
129 m_progress += m_progressRate * (dt.milliseconds() / 1000.0);
130 m_progress = std::min(m_progress, 1.0);
Task(Entity &owner, std::string name)
bool isComplete() const
Returns true if the task has completed.
double progressRate() const
Gets the progress rate.
double progress() const
Return the current progress of the task. Value will always be in the range [0..1].
Entity is a concrete (instantiable) class representing one game entity.