00001
00002
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00031
00032 #ifndef RCSC_ACTION_BODY_GO_TO_POINT_H
00033 #define RCSC_ACTION_BODY_GO_TO_POINT_H
00034
00035 #include <rcsc/player/soccer_action.h>
00036 #include <rcsc/common/player_type.h>
00037 #include <rcsc/geom/vector_2d.h>
00038
00039 namespace rcsc {
00040
00045 class Body_GoToPoint
00046 : public BodyAction {
00047 private:
00049 const Vector2D M_target_point;
00051 const double M_dist_thr;
00053 const double M_dash_power;
00055 const int M_cycle;
00057 bool M_back_mode;
00059 const bool M_save_recovery;
00061 const double M_dir_thr;
00062 public:
00075 Body_GoToPoint( const Vector2D & point,
00076 const double & dist_thr,
00077 const double & dash_power,
00078 const int cycle = 100,
00079 const bool back_mode = false,
00080 const bool save_recovery = true,
00081 const double & dir_thr = 12.0 )
00082 : M_target_point( point )
00083 , M_dist_thr( dist_thr )
00084 , M_dash_power( std::fabs( dash_power ) )
00085 , M_cycle( cycle )
00086 , M_back_mode( back_mode )
00087 , M_save_recovery( save_recovery )
00088 , M_dir_thr( dir_thr )
00089 { }
00090
00096 bool execute( PlayerAgent * agent );
00097
00098 private:
00106 bool doTurn( PlayerAgent * agent,
00107 const Vector2D & target_rel,
00108 AngleDeg * accel_angle );
00109
00117 bool doDash( PlayerAgent * agent,
00118 Vector2D target_rel,
00119 const AngleDeg & accel_angle );
00120 };
00121
00122 }
00123
00124 #endif