Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

Modules/BehaviorControl/CommonXabsl2Symbols/RoboCupGameManagerSymbols.cpp

Go to the documentation of this file.
00001 /** 
00002 * @file RoboCupGameManagerSymbols.cpp
00003 *
00004 * Implementation of class RoboCupGameManagerSymbols.
00005 *
00006 * @author Matthias Jüngel
00007 */
00008 
00009 #include "RoboCupGameManagerSymbols.h"
00010 
00011 
00012 RoboCupGameManagerSymbols::RoboCupGameManagerSymbols(const BehaviorControlInterfaces& interfaces)
00013 : BehaviorControlInterfaces(interfaces),
00014 lastGameControlDataState(ROBOCUP_STATE_INITIAL),
00015 timeWhenOwnTeamScored(0), lastOwnScore(0),
00016 timeWhenOpponentTeamScored(0), lastOpponentScore(0), currentState(ROBOCUP_STATE_INITIAL)
00017 {
00018 }
00019 
00020 
00021 void RoboCupGameManagerSymbols::registerSymbols(Xabsl2Engine& engine)
00022 {
00023   // "game.state"
00024   engine.registerEnumeratedInputSymbol("game.state",this,
00025     (int (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getState);
00026   engine.registerEnumeratedInputSymbolEnumElement("game.state","game.state.initial",ROBOCUP_STATE_INITIAL);
00027   engine.registerEnumeratedInputSymbolEnumElement("game.state","game.state.ready",ROBOCUP_STATE_READY);
00028   engine.registerEnumeratedInputSymbolEnumElement("game.state","game.state.set",ROBOCUP_STATE_SET);
00029   engine.registerEnumeratedInputSymbolEnumElement("game.state","game.state.playing",ROBOCUP_STATE_PLAYING);
00030   engine.registerEnumeratedInputSymbolEnumElement("game.state","game.state.penalized",ROBOCUP_STATE_PENALIZED);
00031   engine.registerEnumeratedInputSymbolEnumElement("game.state","game.state.finished",ROBOCUP_STATE_FINISHED);
00032   // "game.current-state"
00033   engine.registerEnumeratedOutputSymbol("game.current-state",(int*) &currentState);
00034   engine.registerEnumeratedOutputSymbolEnumElement("game.current-state","game.current-state.initial",ROBOCUP_STATE_INITIAL);
00035   engine.registerEnumeratedOutputSymbolEnumElement("game.current-state","game.current-state.ready",ROBOCUP_STATE_READY);
00036   engine.registerEnumeratedOutputSymbolEnumElement("game.current-state","game.current-state.set",ROBOCUP_STATE_SET);
00037   engine.registerEnumeratedOutputSymbolEnumElement("game.current-state","game.current-state.playing",ROBOCUP_STATE_PLAYING);
00038   engine.registerEnumeratedOutputSymbolEnumElement("game.current-state","game.current-state.penalized",ROBOCUP_STATE_PENALIZED);
00039   engine.registerEnumeratedOutputSymbolEnumElement("game.current-state","game.current-state.finished",ROBOCUP_STATE_FINISHED);
00040   // "game.kickoff"
00041   engine.registerEnumeratedInputSymbol("game.kickoff",this,
00042     (int (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getKickoff);
00043   engine.registerEnumeratedInputSymbolEnumElement("game.kickoff","game.kickoff.invalid",ROBOCUP_KICKOFF_INVALID);
00044   engine.registerEnumeratedInputSymbolEnumElement("game.kickoff","game.kickoff.own",ROBOCUP_KICKOFF_OWN);
00045   engine.registerEnumeratedInputSymbolEnumElement("game.kickoff","game.kickoff.opponent",ROBOCUP_KICKOFF_OPPONENT);
00046   // "game.team-color"
00047   engine.registerEnumeratedInputSymbol("game.team-color",this,
00048     (int (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getTeamColor);
00049   engine.registerEnumeratedInputSymbolEnumElement("game.team-color","red",Player::red);
00050   engine.registerEnumeratedInputSymbolEnumElement("game.team-color","blue",Player::blue);
00051   // "game.set-team-color"
00052   engine.registerEnumeratedOutputSymbol("game.set-team-color",this,
00053     (void (Xabsl2FunctionProvider::*)(int))&RoboCupGameManagerSymbols::setTeamColor);
00054   engine.registerEnumeratedOutputSymbolEnumElement("game.set-team-color","red",Player::red);
00055   engine.registerEnumeratedOutputSymbolEnumElement("game.set-team-color","blue",Player::blue);
00056   // "game.own-team-scored"
00057   engine.registerBooleanInputSymbol("game.own-team-scored",this,
00058     (bool (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOwnTeamScored);
00059   // "game.opponent-team-scored"
00060   engine.registerBooleanInputSymbol("game.opponent-team-scored",this,
00061     (bool (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOpponentTeamScored);
00062   // "game.own-score"
00063   engine.registerDecimalInputSymbol("game.own-score",this,
00064     (double (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOwnScore);
00065   // "game.opponent-score"
00066   engine.registerDecimalInputSymbol("game.opponent-score",this,
00067     (double (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOpponentScore);
00068   // "game.time-since-last-message"
00069   engine.registerDecimalInputSymbol("game.time-since-last-message",this,
00070     (double (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getTimeSinceLastMessage);
00071   // self symbols
00072 }
00073 
00074 void RoboCupGameManagerSymbols::update()
00075 {
00076   if ((gameControlData.data.state == ROBOCUP_STATE_READY)&&
00077       ((lastGameControlDataState == ROBOCUP_STATE_PLAYING)||
00078        (lastGameControlDataState == ROBOCUP_STATE_PENALIZED)))
00079   {
00080     if (gameControlData.data.ownScore > lastOwnScore) 
00081     {
00082       timeWhenOwnTeamScored = SystemCall::getCurrentSystemTime();
00083     }
00084     if (gameControlData.data.opponentScore > lastOpponentScore)
00085     {
00086       timeWhenOpponentTeamScored = SystemCall::getCurrentSystemTime();
00087     }
00088   }
00089   lastOwnScore = gameControlData.data.ownScore;
00090   lastOpponentScore = gameControlData.data.opponentScore;
00091   lastGameControlDataState = gameControlData.data.state;
00092 
00093   if (getTimeSinceLastMessage() < 500)
00094   {
00095     getPlayer().setTeamColor(
00096       gameControlData.data.teamColor == ROBOCUP_TEAMCOLOR_RED ? Player::red : Player::blue);
00097   }
00098 }
00099 
00100 void RoboCupGameManagerSymbols::setTeamColor(int teamColor)
00101 {
00102   getPlayer().setTeamColor((Player::teamColor)teamColor);
00103 }
00104 
00105 int RoboCupGameManagerSymbols::getState()
00106 {
00107   return (int)gameControlData.data.state;
00108 }
00109 
00110 int RoboCupGameManagerSymbols::getKickoff()
00111 {
00112   return (int)gameControlData.data.kickoff;
00113 }
00114 
00115 int RoboCupGameManagerSymbols::getTeamColor() 
00116 { 
00117   return (int)(getPlayer().getTeamColor()); 
00118 }
00119 
00120 bool RoboCupGameManagerSymbols::getOwnTeamScored()
00121 {
00122   return (SystemCall::getTimeSince(timeWhenOwnTeamScored) < 5000);
00123 }
00124 
00125 bool RoboCupGameManagerSymbols::getOpponentTeamScored()
00126 {
00127   return (SystemCall::getTimeSince(timeWhenOpponentTeamScored) < 5000);
00128 }
00129 
00130 double RoboCupGameManagerSymbols::getOwnScore()
00131 {
00132   return (double)gameControlData.data.ownScore;
00133 }
00134 
00135 double RoboCupGameManagerSymbols::getOpponentScore()
00136 {
00137   return (double)gameControlData.data.opponentScore;
00138 }
00139 
00140 double RoboCupGameManagerSymbols::getTimeSinceLastMessage()
00141 {
00142   return (double)SystemCall::getTimeSince(gameControlData.timeStamp);
00143 }
00144 
00145 
00146 
00147 /*
00148 * Change Log
00149 * 
00150 * $Log: RoboCupGameManagerSymbols.cpp,v $
00151 * Revision 1.1.1.1  2004/05/22 17:16:59  cvsadm
00152 * created new repository GT2004_WM
00153 *
00154 * Revision 1.11  2004/04/09 14:06:45  tim
00155 * integrated changes from GO2004
00156 *
00157 * Revision 1.10  2004/04/08 10:08:42  risler
00158 * fixed and unified team color symbols
00159 *
00160 * Revision 1.9  2004/04/07 12:29:00  risler
00161 * ddd checkin after go04 - first part
00162 *
00163 * Revision 1.3  2004/04/01 18:55:53  risler
00164 * bugfix RoboCupGameManager team color interpertreted correctly
00165 *
00166 * Revision 1.2  2004/03/31 00:10:15  risler
00167 * implemented new kickoff rules
00168 *
00169 * Revision 1.1.1.1  2004/03/29 08:28:49  Administrator
00170 * initial transfer from tamara
00171 *
00172 * Revision 1.8  2004/03/27 22:18:55  loetzsch
00173 * bug fix
00174 *
00175 * Revision 1.7  2004/03/27 15:19:33  loetzsch
00176 * in ::update sets the teamColor as sent from the game manager
00177 *
00178 * Revision 1.6  2004/03/25 17:40:15  loetzsch
00179 * adaptations to changes in the game controller and the led request
00180 *
00181 * Revision 1.5  2004/03/25 15:49:47  tim
00182 * changed handling of current state
00183 *
00184 * Revision 1.4  2004/03/25 15:04:25  tim
00185 * added initialisation of currentState
00186 *
00187 * Revision 1.3  2004/03/15 12:50:31  tim
00188 * Adaptions to new GameController
00189 *
00190 * Revision 1.2  2004/03/08 00:58:57  roefer
00191 * Interfaces should be const
00192 *
00193 * Revision 1.1  2003/10/22 22:18:44  loetzsch
00194 * prepared the cloning of the GT2003BehaviorControl
00195 *
00196 * Revision 1.1  2003/10/06 13:39:28  cvsadm
00197 * Created GT2004 (M.J.)
00198 *
00199 * Revision 1.3  2003/07/06 09:34:58  dueffert
00200 * *-team-scored improved!
00201 *
00202 * Revision 1.2  2003/07/05 17:34:27  dueffert
00203 * scoring goals can only be signalized by sending ready
00204 *
00205 * Revision 1.1.1.1  2003/07/02 09:40:23  cvsadm
00206 * created new repository for the competitions in Padova from the 
00207 * tamara CVS (Tuesday 2:00 pm)
00208 *
00209 * removed unused solutions
00210 *
00211 * Revision 1.2  2003/05/25 22:37:02  loetzsch
00212 * finished the game state options of GT2003
00213 *
00214 * Revision 1.1  2003/05/07 17:54:46  juengel
00215 * Added missing symbols to GT2003BehaviorControl.
00216 *
00217 */
00218 

Generated on Thu Sep 23 19:57:25 2004 for GT2004 by doxygen 1.3.6