visualsendercoach.cpp

来自「2009 ROBOCUP 仿真2DSERVER 源码」· C++ 代码 · 共 363 行

CPP
363
字号
// -*-c++-*-/***************************************************************************                             visualsendercoach.cpp              Classes for building visual messages for coaches                             -------------------    begin                : 2008-02-17    copyright            : (C) 2008 by The RoboCup Soccer Server                           Maintenance Group.    email                : sserver-admin@lists.sourceforge.net***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU LGPL as published by the Free Software  * *   Foundation; either version 2 of the License, or (at your option) any  * *   later version.                                                        * *                                                                         * ***************************************************************************/#ifdef HAVE_CONFIG_H#include "config.h"#endif#include "visualsendercoach.h"#include "field.h"#include "player.h"#include "coach.h"#include "serializer.h"namespace rcss {/*!//===================================================================////  CLASS: VisualSenderCoach////  DESC: Base class for the visual protocol for coaches.////===================================================================*/VisualSenderCoach::FactoryHolder &VisualSenderCoach::factory(){    static FactoryHolder rval;    return rval;}VisualSenderCoach::VisualSenderCoach( const Params & params )    : VisualSender( params.M_transport ),      M_ser( params.M_ser ),      M_self( params.M_self ),      M_stadium( params.M_stadium ){}VisualSenderCoach::~VisualSenderCoach(){    //std::cerr << "delete VisualSenderCoach" << std::endl;}/*!//===================================================================////  CLASS: VisualSenderCoachV1////  DESC:////===================================================================*/VisualSenderCoachV1::VisualSenderCoachV1( const Params & params )    : VisualSenderCoach( params ){}VisualSenderCoachV1::~VisualSenderCoachV1(){}voidVisualSenderCoachV1::sendVisual(){    serializer().serializeVisualBegin( transport(), stadium().time() );    sendGoals();    sendBall();    const Stadium::PlayerCont::const_iterator end = stadium().players().end();    for ( Stadium::PlayerCont::const_iterator p = stadium().players().begin();          p != end;          ++p )    {        if ( (*p)->state() == DISABLE ) continue;        serializePlayer( **p );    }    serializer().serializeVisualEnd( transport() );    transport() << std::ends << std::flush;}voidVisualSenderCoachV1::sendLook(){    serializer().serializeLookBegin( transport(), stadium().time() );    sendGoals();    sendBall();    const Stadium::PlayerCont::const_iterator end = stadium().players().end();    for ( Stadium::PlayerCont::const_iterator p = stadium().players().begin();          p != end;          ++p )    {        if ( (*p)->state() == DISABLE ) continue;        serializePlayerLook( **p );    }    serializer().serializeLookEnd( transport() );    transport() << std::ends << std::flush;}voidVisualSenderCoachV1::sendOKEye(){    serializer().serializeOKEye( transport(), self().isEyeOn() );    transport() << std::ends << std::flush;}voidVisualSenderCoachV1::sendGoals(){    const std::vector< const PObject * >::const_iterator end = stadium().field().goals().end();    for ( std::vector< const PObject * >::const_iterator it = stadium().field().goals().begin();          it != end;          ++it )    {        sendGoal( **it );    }}voidVisualSenderCoachV1::sendGoal( const PObject & goal ){    serializer().serializeVisualObject( transport(),                                        calcName( goal ),                                        goal.pos() );}voidVisualSenderCoachV1::sendBall(){    serializer().serializeVisualObject( transport(),                                        calcName( stadium().ball() ),                                        stadium().ball().pos(),                                        stadium().ball().vel() );}voidVisualSenderCoachV1::serializePlayer( const Player & player ){    serializer().serializeVisualObject( transport(),                                        calcName( player ),                                        player.pos(),                                        player.vel(),                                        rad2Deg( player.angleBodyCommitted() ),                                        rad2Deg( player.angleNeckCommitted() ) );}voidVisualSenderCoachV1::serializePlayerLook( const Player & player ){    serializePlayer( player );}/*!//===================================================================////  CLASS: VisualSenderCoachV7////  DESC:////===================================================================*/VisualSenderCoachV7::VisualSenderCoachV7( const Params & params )    : VisualSenderCoachV1( params ){}VisualSenderCoachV7::~VisualSenderCoachV7(){}/*!//===================================================================////  CLASS: VisualSenderCoachV8////  DESC:////===================================================================*/VisualSenderCoachV8::VisualSenderCoachV8( const Params & params )    : VisualSenderCoachV7( params ){}VisualSenderCoachV8::~VisualSenderCoachV8(){}intVisualSenderCoachV8::calcPointDir( const Player & player ){    double arm_dir = 0.0;    if ( player.arm().getRelDir( rcss::geom::Vector2D( player.pos().x,                                                       player.pos().y ),                                 player.angleBodyCommitted()                                 + player.angleNeckCommitted(),                                 arm_dir ) )    {        return Rad2IDegRound( normalize_angle( arm_dir                                               + player.angleNeckCommitted()                                               + player.angleBodyCommitted() ) );    }    return 0;}voidVisualSenderCoachV8::serializePlayer( const Player & player ){    if ( player.arm().isPointing() )    {        serializer().serializeVisualObject( transport(),                                            calcName( player ),                                            player.pos(),                                            player.vel(),                                            rad2Deg( player.angleBodyCommitted() ),                                            rad2Deg( player.angleNeckCommitted() ),                                            calcPointDir( player ),                                            player.isTackling() );    }    else    {        serializer().serializeVisualObject( transport(),                                            calcName( player ),                                            player.pos(),                                            player.vel(),                                            rad2Deg( player.angleBodyCommitted() ),                                            rad2Deg( player.angleNeckCommitted() ),                                            player.isTackling() );    }}voidVisualSenderCoachV8::serializePlayerLook( const Player & player ){    VisualSenderCoachV7::serializePlayer( player );}/*!//===================================================================////  CLASS: VisualSenderCoachV13////  DESC:////===================================================================*/VisualSenderCoachV13::VisualSenderCoachV13( const Params & params )    : VisualSenderCoachV8( params ){}VisualSenderCoachV13::~VisualSenderCoachV13(){}voidVisualSenderCoachV13::serializePlayer( const Player & player ){    if ( player.arm().isPointing() )    {        serializer().serializeVisualPlayer( transport(),                                            player,                                            calcName( player ),                                            player.pos(),                                            player.vel(),                                            rad2Deg( player.angleBodyCommitted() ),                                            rad2Deg( player.angleNeckCommitted() ),                                            calcPointDir( player ) );    }    else    {        serializer().serializeVisualPlayer( transport(),                                            player,                                            calcName( player ),                                            player.pos(),                                            player.vel(),                                            rad2Deg( player.angleBodyCommitted() ),                                            rad2Deg( player.angleNeckCommitted() ) );    }}voidVisualSenderCoachV13::serializePlayerLook( const Player & player ){    VisualSenderCoachV8::serializePlayer( player );}/*!//===================================================================////  Register senders for different versions////===================================================================*/namespace visual {template< typename Sender >VisualSenderCoach::Ptrcreate( const VisualSenderCoach::Params & params ){    return VisualSenderCoach::Ptr( new Sender( params ) );}RegHolder vc1 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV1 >, 1 );RegHolder vc2 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV1 >, 2 );RegHolder vc3 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV1 >, 3 );RegHolder vc4 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV1 >, 4 );RegHolder vc5 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV1 >, 5 );RegHolder vc6 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV1 >, 6 );RegHolder vc7 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV7 >, 7 );RegHolder vc8 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV8 >, 8 );RegHolder vc9 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV8 >, 9 );RegHolder vc10 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV8 >, 10 );RegHolder vc11 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV8 >, 11 );RegHolder vc12 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV8 >, 12 );RegHolder vc13 = VisualSenderCoach::factory().autoReg( &create< VisualSenderCoachV13 >, 13 );}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?