Ejemplo n.º 1
0
int main()
{
    Init();
    Config();
    Start();
    
    // Run this loop waiting for either motion detected, e.g., something triggering the robot to wake up, 
    // or the PC has sent operational state configuration information, i.e., the robot is ready to do something
    // Note: Run this loop every 1 second so as to not overwhelm the serial port with junk.
    while (!MotionDetected() && !OpStateReceived())
    {
        ProcessIncomingMessages();
        CheckEnvironment();
        SendStatusMessages();
        pause(INIT_LOOP_WAIT_TIME);        
    };

    // We're ready to do something, enable odometry and sensors
    ENABLE_ODOM();
    ENABLE_SENSORS();
    
    // Run the main loop
    while (1)
    {
        ProcessIncomingMessages();
        CheckEnvironment();
        UpdateMotorSpeed();
        SendStatusMessages();
    }
    
    
}
Ejemplo n.º 2
0
void DnsHealthMonitor::OnTimer(
    __in_opt KAsyncContextBase* const,
    __in KAsyncContextBase& context
)
{
    if (context.Status() == STATUS_SUCCESS)
    {
        CheckEnvironment();

        StartTimer();
    }
    else
    {
        // Timer was cancelled
        KInvariant(context.Status() == STATUS_CANCELLED);
    }
}
Ejemplo n.º 3
0
void main(int argc, char *argv[])
{
	int n;

//	Debug_Init();

	setbuf(stdout,NULL);
	CheckEnvironment();
	ArgInit(argc, argv);
	DeleteTempFiles();
	CreateD32AEnvVar();
	CheckExec(argv);
	oldfilesize=GetFileSize(oldfilename);
	UnbindExec();

	OpenExec();
	Exec_Type=FindExecType();
	Print("\n");
	if(!verbose) Print("+ Unbinding Exec     :   Ok.\n");
	else	     Print("+ Unbinding Exec     :   Ok.  (%s-style)\n",execstyle[Exec_Type-1]);
	CloseExec();

	if(advanced)
	{
		if(!quiet) printf("+ Preprocessing Exec :   ");
		n=relocate_exec(tempname1);
		if(n!=0)
		{
			Print("Error!     \n");
			err_relocator(n);
		}
		if(!verbose) Print("Ok.\n");
		else	     Print("Ok.  (%d fixups)\n",relocated_fixups);
	}

	OpenExec();
	CompressExec();
	CloseExec();

	if(bind)
	{
		BindExec();
		if(!verbose) Print("+ Binding Exec       :   Ok.\n");
		else	     Print("+ Binding Exec       :   Ok.  (Stub file used: \"%s\")\n",stubnames[bindtype]);
	}
	else
	{
		unlink(newfilename);
		copy_file(tempname2,newfilename);
		unlink(tempname2);

	}
	newfilesize=GetFileSize(newfilename);
	DeleteTempFiles();

	if(!quiet)
	{
		printf("\n  Original Exec Stats:   \"%s\", %s-style, %d bytes\n", oldfilename, execstyle[Exec_Type-1], oldfilesize);
		printf("Compressed Exec Stats:   \"%s\", %s-style, %d bytes   (%1.1f%%)\n", newfilename, execstyle[2], newfilesize, (float)(newfilesize+0.01)/(float)(oldfilesize+0.01) *100);
	}
	else
	{
		if(!silent) printf("SC/32A: File \"%s\" has been successfully compressed\n", oldfilename);
	}
	exit(0);
}
Ejemplo n.º 4
0
void CPHMovementControl::Calculate(const xr_vector<DetailPathManager::STravelPathPoint>& path,float speed,  u32& travel_point,  float& precision  )
{
#ifdef DEBUG
	if(ph_dbg_draw_mask1.test(ph_m1_DbgTrackObject)&&(!!pObject->cName())&&stricmp(PH_DBG_ObjectTrack(),*pObject->cName())==0)
	{
		Msg("CPHMovementControl::Calculate in %s (Object Position) %f,%f,%f",PH_DBG_ObjectTrack(),pObject->Position().x,pObject->Position().y,pObject->Position().z);
		Msg("CPHMovementControl::Calculate in %s (CPHMovementControl::vPosition) %f,%f,%f",PH_DBG_ObjectTrack(),vPosition.x,vPosition.y,vPosition.z);
	}
#endif
	if(!m_character->b_exist)	return;
	if(m_capture) 
	{
		if(m_capture->Failed()) xr_delete(m_capture);
	}
	

	Fvector new_position;
	m_character->IPosition(new_position);

	int index=0;//nearest point
	//float distance;//distance

	bool  near_line;
	m_path_size=path.size();
	Fvector dir;
	dir.set(0,0,0);
	if(m_path_size==0)
	{
		speed=0;
		vPosition.set(new_position);
	}
	else if(b_exect_position)
	{
		m_start_index=travel_point;

		//////////////////////////////////////////////////////////////////////////
		//////////////////////////////////////////////////////////////////////////
		if((m_path_size-1)>(int)travel_point)
			dir.sub(path[travel_point+1].position,path[travel_point].position);
		else
			dir.sub(path[travel_point].position,new_position);
		m_start_index=travel_point;
		dir.y=0.f;
		dir.normalize_safe();
		vPosition.set(new_position);
		m_path_distance=0;
		SetPathDir	(dir);
		vPathPoint.set(vPosition);


	}
	else {
		Fvector dif;

		dif.sub(new_position,vPathPoint);
		float radius = dif.magnitude()*2.f;
		if(m_path_size==1)
		{
			speed=0.f;
			vPosition.set(new_position);	//todo - insert it in PathNearestPoint
			index=0;
			vPathPoint.set(path[0].position);
			Fvector _d;
			_d.sub(path[0].position,new_position);
			SetPathDir	(_d);
			m_path_distance=GetPathDir().magnitude();
			if(m_path_distance>EPS)
			{
				Fvector _d = GetPathDir();
				_d.mul(1.f/m_path_distance);
				SetPathDir(_d);
			}
			near_line=false;
		}
		else
		{
			m_path_distance=dInfinity;
			near_line=true;
			if(m_start_index<m_path_size)
			{
				PathNearestPointFindUp(path,new_position,index,radius,near_line);
				PathNearestPointFindDown(path,new_position,index,radius,near_line);
			}
			if(m_path_distance>radius)
			{
				m_start_index=0;
				PathNearestPoint(path,new_position,index,near_line);
			}
			vPosition.set(new_position);//for PathDirLine && PathDirPoint
			if(near_line) PathDIrLine(path,index,m_path_distance,precision,dir);
			else		  PathDIrPoint(path,index,m_path_distance,precision,dir);
			
	
			travel_point=(u32)index;
			m_start_index=index;
			if(fis_zero(speed)) dir.set(0,0,0);
		}

	}
	
	dir.y=0.f;
	//VERIFY(!(fis_zero(dir.magnitude())&&!fis_zero(speed)));
	dir.normalize_safe();
	
	/////////////////////////////////////////////////////////////////
	if(bExernalImpulse)
	{

		//vAccel.add(vExternalImpulse);
		Fvector V;
		V.set(dir);
		//V.mul(speed*fMass/fixed_step);
		V.mul(speed*10.f);
		V.add(vExternalImpulse);
		m_character->ApplyForce(vExternalImpulse);
		speed=V.magnitude();

		if(!fis_zero(speed))
		{
			dir.set(V);
			dir.mul(1.f/speed);
		}
		speed/=10.f;
		vExternalImpulse.set(0.f,0.f,0.f);
		bExernalImpulse=false;
	}
	/////////////////////////
	//if(!PhyssicsOnlyMode()){
	//	Fvector	v;//m_character->GetVelocity(v);
	//	v.mul(dir,speed);
	//	SetVelocity(v);//hk
	//	
	//}
	/////////////////////////
	m_character->SetMaximumVelocity(speed);
	m_character->SetAcceleration(dir);
	//////////////////////////////////////////////////////
	m_character->GetSmothedVelocity(vVelocity);
	fActualVelocity=vVelocity.magnitude();

	gcontact_Was=m_character->ContactWas();
	const ICollisionDamageInfo* di=m_character->CollisionDamageInfo();
	fContactSpeed=0.f;
	{
		fContactSpeed=di->ContactVelocity();
		gcontact_Power				= fContactSpeed/fMaxCrashSpeed;
		gcontact_HealthLost			= 0;
		if (fContactSpeed>fMinCrashSpeed) 
		{
			gcontact_HealthLost = 
				((fContactSpeed-fMinCrashSpeed))/(fMaxCrashSpeed-fMinCrashSpeed);
		}
	}

	CheckEnvironment(vPosition);
	bSleep=false;
	b_exect_position=false;
	//m_character->Reinit();
}
Ejemplo n.º 5
0
void CPHMovementControl::Calculate(Fvector& vAccel,const Fvector& camDir,float /**ang_speed/**/,float jump,float /**dt/**/,bool /**bLight/**/){

	
	
	if(m_capture) 
	{
		if(m_capture->Failed()) xr_delete(m_capture);
	}
	Fvector previous_position;previous_position.set(vPosition);
	m_character->IPosition(vPosition);
	if(bExernalImpulse)
	{
		
		vAccel.add(vExternalImpulse);
		m_character->ApplyForce(vExternalImpulse);
		vExternalImpulse.set(0.f,0.f,0.f);
		
		bExernalImpulse=false;
	}
	//vAccel.y=jump;
	float mAccel=vAccel.magnitude();
	m_character->SetCamDir(camDir);
	m_character->SetMaximumVelocity(mAccel/10.f);
	//if(!fis_zero(mAccel))vAccel.mul(1.f/mAccel);
	m_character->SetAcceleration(vAccel);
	if(!fis_zero(jump)) m_character->Jump(vAccel);
	
	m_character->GetSavedVelocity(vVelocity); 
	fActualVelocity=vVelocity.magnitude();
	//Msg("saved avel %f", fActualVelocity);
	gcontact_Was=m_character->ContactWas();
	fContactSpeed=0.f;
	const ICollisionDamageInfo* di=m_character->CollisionDamageInfo();
 	{
		fContactSpeed=di->ContactVelocity();

		gcontact_Power				= fContactSpeed/fMaxCrashSpeed;

		gcontact_HealthLost			= 0;
		if (fContactSpeed>fMinCrashSpeed) 
		{
				gcontact_HealthLost = 
				((fContactSpeed-fMinCrashSpeed))/(fMaxCrashSpeed-fMinCrashSpeed);
		}

	}
	if(m_character->LastMaterialIDX()!=u16(-1))
	{
		const SGameMtl *last_material=GMLib.GetMaterialByIdx(m_character->LastMaterialIDX());
		if(last_material->Flags.test(SGameMtl::flInjurious))
		{
			gcontact_HealthLost+=Device.fTimeDelta*last_material->fInjuriousSpeed;
		}
	}

	//CPhysicsShellHolder * O=di->DamageObject();
	//SCollisionHitCallback* cc= O ? O->get_collision_hit_callback() : NULL;
	const ICollisionDamageInfo	*cdi=CollisionDamageInfo();
	if(cdi->HitCallback())cdi->HitCallback()->call(static_cast<CGameObject*>(m_character->PhysicsRefObject()),fMinCrashSpeed,fMaxCrashSpeed,fContactSpeed,gcontact_HealthLost,CollisionDamageInfo());
	
	TraceBorder(previous_position);
	CheckEnvironment(vPosition);
	bSleep=false;
	m_character->Reinit();
}