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_HOLD_BALL_H
00033 #define RCSC_ACTION_BODY_HOLD_BALL_H
00034
00035 #include <rcsc/player/soccer_action.h>
00036 #include <rcsc/geom/vector_2d.h>
00037
00038 namespace rcsc {
00039
00040 class PlayerObject;
00041
00046 class Body_HoldBall
00047 : public BodyAction {
00048 private:
00050 const bool M_do_turn;
00052 const Vector2D M_turn_target_point;
00054 const Vector2D M_kick_target_point;
00055 public:
00061 Body_HoldBall( const bool do_turn = false,
00062 const Vector2D & turn_target_point = Vector2D( 0.0, 0.0 ),
00063 const Vector2D & kick_target_point = Vector2D::INVALIDATED )
00064 : M_do_turn( do_turn )
00065 , M_turn_target_point( turn_target_point )
00066 , M_kick_target_point( kick_target_point )
00067 { }
00068
00074 bool execute( PlayerAgent * agent );
00075
00076 private:
00083 bool avoidOpponent( PlayerAgent * agent,
00084 const double & front_keep_dist );
00085
00092 bool avoidOpponentLine( PlayerAgent * agent,
00093 const PlayerObject * opponent );
00094
00100 bool turnToPoint( PlayerAgent * agent );
00101
00108 bool keepFront( PlayerAgent * agent,
00109 const double & front_keep_dist );
00110
00115 bool keepReverse( PlayerAgent * agent );
00116
00117 };
00118
00119 }
00120
00121 #endif