void CGameTaskManager::SetActiveTask(const TASK_ID& id, u16 idx) { if(idx==0) Msg("! g_active_task_objective_idx==0"); g_active_task_id = id; g_active_task_objective_id = idx; Level().MapManager().DisableAllPointers(); SGameTaskObjective* o = ActiveObjective(); if(o) { CMapLocation* ml = o->LinkedMapLocation(); if(ml) ml->EnablePointer(); } }
void CGameTaskManager::UpdateTasks () { u32 task_count = GameTasks().size(); if(0==task_count) return; SGameTaskKey *tasks = (SGameTaskKey*)_alloca(task_count*sizeof(SGameTaskKey)); SGameTaskKey *I = tasks; SGameTaskKey *E = tasks + task_count; GameTasks_it i = GameTasks().begin(); for ( ; I != E; ++I, ++i) new (I) SGameTaskKey(*i); for (I = tasks; I != E; ++I) { CGameTask *t = (*I).game_task; for(u16 i=0; i<t->m_Objectives.size() ;++i) { SGameTaskObjective& obj = t->Objective(i); if(obj.TaskState()!=eTaskStateInProgress && i==0) break; if(obj.TaskState()!=eTaskStateInProgress) continue; ETaskState state = obj.UpdateState(); if( (state==eTaskStateFail || state==eTaskStateCompleted)) SetTaskState(t, i, state); } } for ( ; I != E; ++I, ++i) I->~SGameTaskKey (); SGameTaskObjective* obj = ActiveObjective(); if(obj) { Level().MapManager().DisableAllPointers(); CMapLocation* ml = obj->LinkedMapLocation(); if(ml && !ml->PointerEnabled()) ml->EnablePointer(); } if( m_flags.test(eChanged) ) UpdateActiveTask (); }