MCPcopy Create free account
hub / github.com/OGSR/OGSR-Engine / UpdateTasks

Method UpdateTasks

ogsr_engine/xrGame/GametaskManager.cpp:199–298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

197}
198
199void CGameTaskManager::UpdateTasks()
200{
201 auto& tasks = GameTasks();
202
203 if (tasks.empty())
204 return;
205
206 auto act_task = ActiveTask();
207 bool need_update_active_task = !act_task || act_task->Objective(0).TaskState() != eTaskStateInProgress;
208
209 CGameTask* max_prio_task{};
210 u16 max_prio_task_obj{};
211
212 size_t processed{};
213 auto iter = tasks.rbegin();
214 while (iter != tasks.rend()) //Реверсивный перебор тасков из-за того что походу внутри SetTaskState таски могут удалиться, из-за этого обычный итератор тут крашится.
215 {
216 const auto size = tasks.size();
217
218 auto& task = *(iter++);
219 //
220
221 auto* t = task.game_task;
222 for (u16 i = 0; i < t->m_Objectives.size(); ++i)
223 {
224 auto& obj = t->Objective(i);
225 if (obj.TaskState() != eTaskStateInProgress)
226 {
227 if (i == 0)
228 {
229 //need_update_active_task = true;
230 break;
231 }
232 else
233 continue;
234 }
235
236 ETaskState state = obj.UpdateState();
237 if (state == eTaskStateFail || state == eTaskStateCompleted || state == eTaskStateSkiped)
238 {
239 SetTaskState(t, i, state);
240
241 if (i == 0)
242 {
243 need_update_active_task = true;
244 }
245
246 if (!need_update_active_task)
247 {
248 // Тут проверяем заново, потому что в функции выше активный таск может обновиться
249 act_task = ActiveTask();
250 need_update_active_task = !act_task || act_task->Objective(0).TaskState() != eTaskStateInProgress;
251 }
252 }
253 // Тут ставим активным только первый objective если он один либо второй, чтоб тут случайно не назначился тот который скрыт опцией show_objectives_ondemand.
254 else if ((i == 0 && t->m_Objectives.size() == 1) || (i == 1 && t->Objective(0).TaskState() == eTaskStateInProgress))
255 {
256 if (!max_prio_task || max_prio_task->m_priority > t->m_priority)

Callers 1

shedule_UpdateMethod · 0.80

Calls 13

TaskStateMethod · 0.80
ObjectiveMethod · 0.80
rbeginMethod · 0.80
rendMethod · 0.80
DisableAllPointersMethod · 0.80
LinkedMapLocationMethod · 0.80
PointerEnabledMethod · 0.80
EnablePointerMethod · 0.80
advanceFunction · 0.50
emptyMethod · 0.45
sizeMethod · 0.45
UpdateStateMethod · 0.45

Tested by

no test coverage detected