00001
00002
00003
00004
00005
00006
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
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
00033 engine.registerEnumeratedOutputSymbol("game.current-state",(int*) ¤tState);
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
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
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
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
00057 engine.registerBooleanInputSymbol("game.own-team-scored",this,
00058 (bool (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOwnTeamScored);
00059
00060 engine.registerBooleanInputSymbol("game.opponent-team-scored",this,
00061 (bool (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOpponentTeamScored);
00062
00063 engine.registerDecimalInputSymbol("game.own-score",this,
00064 (double (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOwnScore);
00065
00066 engine.registerDecimalInputSymbol("game.opponent-score",this,
00067 (double (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getOpponentScore);
00068
00069 engine.registerDecimalInputSymbol("game.time-since-last-message",this,
00070 (double (Xabsl2FunctionProvider::*)())&RoboCupGameManagerSymbols::getTimeSinceLastMessage);
00071
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
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218