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()
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); } } }