bodysender.cpp
来自「2009 ROBOCUP 仿真2DSERVER 源码」· C++ 代码 · 共 398 行
CPP
398 行
// -*-c++-*-/*************************************************************************** bodysender.cc Classes for sending sense body messages ------------------- begin : 22-AUG-2002 copyright : (C) 2002 by The RoboCup Soccer Simulator 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 "bodysender.h"#include "field.h"#include "player.h"#include "serializer.h"namespace rcss {/*!//===================================================================//// CLASS: BodySender//// DESC: Base class for the sense body protocol.////===================================================================*/BodySender::BodySender( std::ostream & transport ) : Sender( transport ){}BodySender::~BodySender(){}/*!//===================================================================//// CLASS: BodySenderPlayer//// DESC: Base class for the sense body protocol for players.////===================================================================*/BodySenderPlayer::FactoryHolder &BodySenderPlayer::factory(){ static FactoryHolder rval; return rval;}BodySenderPlayer::BodySenderPlayer( const Params & params ) : BodySender( params.m_transport ), M_serializer( params.m_ser ), M_self( params.m_self ){}BodySenderPlayer::~BodySenderPlayer(){ //std::cerr << "delete BodySenderPlayer" << std::endl;}/*!//===================================================================//// CLASS: BodySenderPlayerV1//// DESC: version 1 of the sense body protocol.////===================================================================*/BodySenderPlayerV1::BodySenderPlayerV1( const Params & params ) : BodySenderPlayer( params ){}BodySenderPlayerV1::~BodySenderPlayerV1(){}voidBodySenderPlayerV1::sendBody(){ serializer().serializeBodyBegin( transport(), self().stadium().time() ); sendBodyData(); serializer().serializeBodyEnd( transport() ); transport() << std::ends << std::flush;}voidBodySenderPlayerV1::sendBodyData(){ serializer().serializeBodyViewMode( transport(), ( self().highquality() ? "high" : "low" ), ( self().viewWidth() == rcss::pcom::NARROW ? "narrow" : self().viewWidth() == rcss::pcom::WIDE ? "wide" : "normal" ) ); serializer().serializeBodyStamina( transport(), self().stamina(), self().effort(), self().staminaCapacity() ); sendVelocity(); sendNeck(); sendCounts();}voidBodySenderPlayerV1::sendVelocity(){ serializer().serializeBodyVelocity( transport(), Quantize ( self().vel().r(), 0.01 ) );}voidBodySenderPlayerV1::sendNeck(){}voidBodySenderPlayerV1::sendCounts(){ serializer().serializeBodyCounts( transport(), self().kickCount(), self().dashCount(), self().turnCount(), self().sayCount() );}/*!//===================================================================//// CLASS: BodySenderPlayerV5//// DESC: version 5 of the sense body protocol. Head angle and neck// turn count added////===================================================================*/BodySenderPlayerV5::BodySenderPlayerV5( const Params & params ) : BodySenderPlayerV1( params ){}BodySenderPlayerV5::~BodySenderPlayerV5(){}voidBodySenderPlayerV5::sendNeck(){ int ang = Rad2IDeg( self().angleNeckCommitted() ); serializer().serializeNeckAngle( transport(), ang );}voidBodySenderPlayerV5::sendCounts(){ BodySenderPlayerV1::sendCounts(); serializer().serializeNeckCount( transport(), self().turnNeckCount() );}/*!//===================================================================//// CLASS: BodySenderPlayerV6//// DESC: version 6 of the sense body protocol. Velocity direction// added////===================================================================*/BodySenderPlayerV6::BodySenderPlayerV6( const Params & params ) : BodySenderPlayerV5( params ){}BodySenderPlayerV6::~BodySenderPlayerV6(){}voidBodySenderPlayerV6::sendVelocity(){ double mag = Quantize( self().vel().r(), 0.01 ); int head = Rad2IDeg( normalize_angle ( self().vel().th() - self().angleBodyCommitted() - self().angleNeckCommitted() ) ); serializer().serializeBodyVelocity( transport(), mag, head );}/*!//===================================================================//// CLASS: BodySenderPlayerV7//// DESC: version 7 of the sense body protocol. Extra counts added////===================================================================*/BodySenderPlayerV7::BodySenderPlayerV7( const Params & params ) : BodySenderPlayerV6( params ){}BodySenderPlayerV7::~BodySenderPlayerV7(){}voidBodySenderPlayerV7::sendCounts(){ BodySenderPlayerV6::sendCounts(); serializer().serializeBodyCounts( transport(), self().catchCount(), self().moveCount(), self().changeViewCount() );}/*!//===================================================================//// CLASS: BodySenderPlayerV8//// DESC: version 8 of the sense body protocol. Added arm, focus and// tackle details////===================================================================*/BodySenderPlayerV8::BodySenderPlayerV8( const Params & params ) : BodySenderPlayerV7( params ){}BodySenderPlayerV8::~BodySenderPlayerV8(){}voidBodySenderPlayerV8::sendBodyData(){ BodySenderPlayerV7::sendBodyData(); Arm::State state = self().arm() .getState( rcss::geom::Vector2D( self().pos().x, self().pos().y ), self().angleBodyCommitted() + self().angleNeckCommitted() ); serializer().serializeArm( transport(), state.cyclesTillMovable(), state.cyclesTillExpires(), state.dist(), (int)state.head(), state.count() ); if ( self().getFocusTarget() == NULL ) { serializer().serializeFocus( transport(), "none", self().getFocusCount() ); } else { serializer().serializeFocus( transport(), ( self().getFocusTarget()->side() == LEFT ? "l" : "r" ), self().getFocusTarget()->unum(), self().getFocusCount() ); } serializer().serializeTackle( transport(), self().tackleCycles(), self().tackleCount() );}/*!//===================================================================//// CLASS: BodySenderPlayerV12//// DESC: version 12 of the sense body protocol. Added collision info.////===================================================================*/BodySenderPlayerV12::BodySenderPlayerV12( const Params & params ) : BodySenderPlayerV8( params ){}BodySenderPlayerV12::~BodySenderPlayerV12(){}voidBodySenderPlayerV12::sendBodyData(){ BodySenderPlayerV8::sendBodyData(); serializer().serializeCollision( transport(), self().ballCollide(), self().playerCollide(), self().postCollide() );}/*!//===================================================================//// CLASS: BodySenderPlayerV13//// DESC: version 13 of the sense body protocol. Added stamina// capacity info.////===================================================================*/BodySenderPlayerV13::BodySenderPlayerV13( const Params & params ) : BodySenderPlayerV12( params ){}BodySenderPlayerV13::~BodySenderPlayerV13(){}namespace bodysender {template< typename Sender >BodySenderPlayer::Ptrcreate( const BodySenderPlayer::Params & params ){ return BodySenderPlayer::Ptr( new Sender( params ) );}RegHolder vp1 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV1 >, 1 );RegHolder vp2 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV1 >, 2 );RegHolder vp3 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV1 >, 3 );RegHolder vp4 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV1 >, 4 );RegHolder vp5 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV5 >, 5 );RegHolder vp6 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV6 >, 6 );RegHolder vp7 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV7 >, 7 );RegHolder vp8 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV8 >, 8 );RegHolder vp9 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV8 >, 9 );RegHolder vp10 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV8 >, 10 );RegHolder vp11 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV8 >, 11 );RegHolder vp12 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV12 >, 12 );RegHolder vp13 = BodySenderPlayer::factory().autoReg( &create< BodySenderPlayerV13 >, 13 );}}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?