コード例 #1
0
/*!

*/
bool
Body_GoToPointDodge::execute( PlayerAgent * agent )
{
    dlog.addText( Logger::ACTION,
                  "%s:%d: Body_GoToPointDodge"
                  ,__FILE__, __LINE__ );

    Vector2D dodge_pos;
    if ( ! get_dodge_point( agent, M_point, &dodge_pos ) )
    {
        return Body_GoToPoint( M_point,
                               0.1,
                               M_dash_power,
                               -1.0, // dash speed
                               3 ).execute( agent );
    }

    AngleDeg target_angle = ( M_point - agent->world().self().pos() ).th();
    Vector2D dodge_rel = dodge_pos - agent->world().self().pos();

    // difference angle between target and this player to dodge
    // if diff is positive this player is left from target angle.
    double ang_diff = ( target_angle - dodge_rel.th() ).degree();
    if ( std::fabs( ang_diff ) > 90.0 )
    {
        return Body_GoToPoint( M_point,
                               0.1,
                               M_dash_power,
                               -1.0, // dash speed
                               3 ).execute( agent );
    }

    Vector2D new_target;
    if ( ang_diff > 0.0 )
    { // obstacle is left from target dir -> new target is right from old
        new_target
            = dodge_pos
            + Vector2D::polar2vector( ServerParam::i().defaultPlayerSize() * 4.0,
                                      target_angle + 90.0 );
    }
    else
    { // obstacle is right from target dir -> new target is left from old
        new_target
            = dodge_pos
            + Vector2D::polar2vector( ServerParam::i().defaultPlayerSize() * 4.0,
                                      target_angle - 90.0 );
    }

    dlog.addText( Logger::ACTION,
                  "%s:%d: dodge(%f, %f) sub-target(%f, %f)"
                  ,__FILE__, __LINE__,
                  dodge_pos.x, dodge_pos.y, new_target.x, new_target.y );
    // never do dodge agen
    return Body_GoToPoint( new_target,
                           0.1,
                           M_dash_power,
                           -1.0, // dash speed
                           3 ).execute( agent );
}
コード例 #2
0
ファイル: bhv_hunt.cpp プロジェクト: theshibk/wolf-pack-robo
/*!

*/
bool
Bhv_Hunt::execute( PlayerAgent * agent )
{
    std::list<Vector2D> forces;

    //Get force from prey
    Vector2D preyForce = agent->world().ball().rpos(); //Vector to prey
    int preyCo = 1; // for future usee
    forces.push_front(preyForce * preyCo/preyForce.r2()); //1/r^2 relationship


    //    Get forces from team mates
    // PlayerCont * team = agent->world().teammates();
    // for ( PlayerCont::const_iterator tm = team.begin(); tm != team.end(); ++tm ){

    // }

    //Sum up all forces to create resultant vector
    Vector2D * resultant = new Vector2D();
    for ( std::list<Vector2D>::iterator it = forces.begin(); it != forces.end(); ++it ){
        *resultant = *resultant + *it;
    }

   if ( Body_GoToPoint (*resultant, 5, resultant->r()).execute( agent ) ){
       agent->setNeckAction( new Neck_TurnToBall());
       return true;

   }

   return false;
}