Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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	();
}
Esempio n. 4
0
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);
	}

}
Esempio n. 5
0
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);
}