void lt_rt_interpret_case(player *user, rt_lt direction, float increment_constant)
{
	if(direction == lt_dir){
		user -> angle += increment_constant;
		adjust_angle(user);
	}
	else{
		user -> angle -= increment_constant;
		adjust_angle(user);
	}
}
void lt_rt_interpret(player *user, rt_lt direction)
{
	//////////////////////////					Testing
	static int first_pass = 0;

	if(first_pass == 0){

		set_up_test("LT/ RT Interpreting Suite", "Test of lt_rt_interpret()", test_lt_rt_interpret);

		++first_pass;

	}
	//////////////////////////

	if(user -> constant_checker == on){

		if(direction == lt_dir){
			user -> angle += user -> current_constant;
			adjust_angle(user);
		}
		else{
			user -> angle -= user -> current_constant;
			adjust_angle(user);
		}

	}
	else if(user -> variable_checker == on){

		check_variable(user);

		if(direction == lt_dir){
			user -> angle += user -> variable_values[ user -> current_variable ];
			adjust_angle(user);
		}
		else{
			user -> angle -= user -> variable_values[ user -> current_variable ];
			adjust_angle(user);
		}

	}
}
/**
 * \brief Set the position and the angle of the arrow.
 * \param glob The level globals in which we load the media.
 * \param visible_area The visible part of the level.
 */
void ptb::player_arrows_layer::player_data::adjust_arrow
( bear::engine::level_globals& glob,
  const bear::universe::rectangle_type& visible_area )
{
  m_visible = false;

  if ( (m_player != NULL) && !m_player.is_a_marionette() )
    {
      const bear::universe::position_type center =
        m_player.get_center_of_mass();

      if( ( center.x < visible_area.left() ) ||
          ( center.x > visible_area.left() + visible_area.size().x ) ||
          ( center.y < visible_area.bottom() ) ||
          ( center.y > visible_area.bottom() + visible_area.size().y ) )
        {
          adjust_position( visible_area );
          adjust_angle( visible_area );
          adjust_distance(glob, visible_area );

          m_visible = true;
        }
    }
} // player_arrows_layer::player_data::adjust_arrow()
Ejemplo n.º 4
0
void event_handler_rcv(int8_t angle_presc)
{
    int8_t initial_angle = 0;
    uint8_t is_init_angle_read = FALSE;
    uint8_t angle_found = FALSE;
	int target_angle=0;
	// pin 12 arduino uno -- when is high -- angle was found
	pin_mode(DDRB,PORTB4, OUTPUT);
	
	/*init compass*/
	HM55B_PinInit();
	HM55B_Reset();
	pin_mode(DDRB, CLK_PIN,OUTPUT);
	
	/*read data from compass until angle will be found*/
	while(!angle_found)
	{
		
		HM55B_StartMeasurementCommand(); // necessary!!
		_delay_ms(40); // the data is 40ms later ready
	
		HM55B_ReadCommand(); // read data and print Status

	
		int X_Data = ShiftIn(11); // Field strength in X
		int Y_Data = ShiftIn(11); // and Y direction
	
	
		set_pin(PORTB,EN_PIN); // ok deselect chip
		int actual_angle = 180 * (atan2(-1 * Y_Data , X_Data) / M_PI); // angle is atan( -y/x) !!!
	
		if(!is_init_angle_read)
		{
			initial_angle = actual_angle;
			target_angle = adjust_angle(initial_angle, angle_presc);
				
			is_init_angle_read = TRUE;
		}
		
		if(is_init_angle_read)
		{
			if( (actual_angle >= target_angle) && (angle_presc <=0) && (target_angle >=0) )
			{
				angle_found = TRUE;
			}
			else if( (actual_angle >= target_angle) && (angle_presc < 0) && (target_angle<0) )
			{
				angle_found = TRUE;
			}
			else if( (actual_angle <= target_angle) && (angle_presc>=0) && (target_angle<0) )
			{
				angle_found = TRUE;
			}
			else if( (actual_angle <= target_angle) && (angle_presc>=0) && (target_angle>=0) )
			{
				angle_found = TRUE;
			}	
			
			if(angle_found) /*if angle was found, set pin to high*/
				set_pin(PORTB,PORTB4);
		} 
		
		
	}
	
	

}