/**
* \brief  Handles all the motor checking
*
* \param
*
* \return void
*/
void motor_handler(void)
{
	static int16_t last_l_rpm=1,last_r_rpm=1;
	
	if(last_l_rpm!=l_motor.rpm)
	{
		if (l_motor.rpm>MAX_RPM)
		{
			l_motor.rpm = MAX_RPM;
		}
		else if (l_motor.rpm<1)
		{
			l_motor.rpm=0;
		}
		last_l_rpm = l_motor.rpm;
		l_motor.ref_pulses = l_motor.rpm / 16;
	}
	if (last_r_rpm!=r_motor.rpm)
	{
		if (r_motor.rpm>MAX_RPM)
		{
			r_motor.rpm = MAX_RPM;
		}
		else if (r_motor.rpm<1)
		{
			r_motor.rpm=0;
		}
		last_r_rpm = r_motor.rpm;
		r_motor.ref_pulses = r_motor.rpm / 16;
	}
	check_movement(&l_motor);
	check_movement(&r_motor);
	if (status.system.circle == true)//TODO: maybe it should be called from a state
	{
		do_cirecle();
	}
	if (status.system.wall == true)
	{
		
		do_wall();
	}
}
예제 #2
0
void	move(t_data *data, int x, int movement)
{
  if (x == -1)
    {
      if (data->event_data.events[SDLK_LEFT] ||
	  data->event_data.events[SDLK_RIGHT])
	movement /= 2;
      if (check_xm1(data, movement))
	  CHARAC.pos.y += movement;
    }
  if (x == 1)
    {
      if (GRAPHICS.map[CHARAC.pos.y / 64]
	  [(CHARAC.pos.x + movement) / 64] != 'w')
	CHARAC.pos.x += movement;
    }
  else
    check_movement(data, movement);
}
예제 #3
0
/**
* game loop(void)
*
* @brief Game loop function
* @param void
* @return void
*/
void gameloop(void)
{
	uint32 i = 0;

	tick = gettickcount();

	if(tmr25 < tick){
		if(tempdata()->canmovenow){
			check_movement();
			check_attack();
		}

		if(tempdata()->mapanimtimer < tick){
			if(tempdata()->mapanim)
				tempdata()->mapanim = FALSE;
			else
				tempdata()->mapanim = TRUE;
			tempdata()->mapanimtimer = tick + .250;
		}

		tmr25 = tick + .025;
	}

	if(walktimer < tick){
		for( i = 0; i < players_on_map(); i++){
			if(player(player_on_map(i))->moving > 0)
				process_movement(player_on_map(i));
		}

		for( i = 0; i < MAX_MAP_NPCS; i++){
			if(map()->npc[i].num){
				if(map()->npc[i].moving)
					process_npc_movement(i);
			}
		}

		walktimer = tick + .030;
	}
}