int SingleFileNode::GetData( OWSMODULE::byteSeq& dataBlock ) { if(pos >= len) return 0; int num = READSIZE; if(num >= len - pos) num = len - pos; FILE *fin = NULL; errno_t err = fopen_s(&fin, fileName.c_str(), "rb"); if(err == 0) { fseek(fin, pos, SEEK_SET); memset(buf, 0, num); fread(buf, 1, num, fin); dataBlock.assign(buf, buf+num); fclose(fin); } else { SetTaskState(OWSMODULE::OWSERROR); return 0; } pos += num; if(pos >= len) SetTaskState(OWSMODULE::OWSFINISH); return num; }
int SingleBufNode::GetData( OWSMODULE::byteSeq& dataBlock ) { if(pos >= len) return 0; int num = READSIZE; if(num >= len - pos) num = len - pos; dataBlock.assign(buf+pos, buf+pos+num); pos += num; if(pos >= len) SetTaskState(OWSMODULE::OWSFINISH); return num; }
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 (); }
void CGameTaskManager::SetTaskState(CGameTask* t, u16 objective_num, ETaskState state) { m_flags.set (eChanged, TRUE); bool isRoot = (objective_num==0); SGameTaskObjective* o = &t->Objective(objective_num); CMapLocation* ml = o->LinkedMapLocation(); bool bActive = ActiveObjective()==o; if(((state==eTaskStateFail)||(state==eTaskStateCompleted)) && ml ){ Level().MapManager().RemoveMapLocation(o->map_location, o->object_id); o->map_location = NULL; o->object_id = u16(-1); } o->SetTaskState (state); //highlight next objective if needed if( (isRoot || !t->HasInProgressObjective()) && (ActiveTask()==t) ) { SetActiveTask ("", 1 ); }else if(!isRoot && bActive && objective_num != (t->m_Objectives.size()-1) ){//not last SetActiveTask (t->m_ID, objective_num+1 ); } if(isRoot){//setState for task and all sub-tasks for(u16 i=0; i<t->m_Objectives.size();++i) if( t->Objective(i).TaskState()==eTaskStateInProgress ) SetTaskState(t,i,state); } if(0 == objective_num && eTaskStateCompleted == state || eTaskStateFail == state) t->m_FinishTime = Level().GetGameTime(); CUIGameSP* pGameSP = smart_cast<CUIGameSP*>(HUD().GetUI()->UIGame()); if(pGameSP) { pGameSP->PdaMenu->PdaContentsChanged (pda_section::quests); } }
void CGameTaskManager::SetTaskState(const TASK_ID& id, u16 objective_num, ETaskState state) { CGameTask* t = HasGameTask(id); if (NULL==t) {Msg("actor does not has task [%s]", *id); return;} SetTaskState (t,objective_num, state); }