00001
00002
00003
00004
00005
00006
00007 #include "GtCamSymbols.h"
00008
00009
00010
00011
00012 #define GETROBOTXimpl(number,pnumber,color) \
00013 double GTCamSymbols::getRobot##number##PosX() {\
00014 return gtCamWorldState.getPlayerPos(pnumber,color).x;\
00015 }\
00016 double GTCamSymbols::getRobot##number##PosY() {\
00017 return gtCamWorldState.getPlayerPos(pnumber,color).y;\
00018 }\
00019 Vector2<double> GTCamSymbols::getRobot##number##Pos() {\
00020 Vector2<double> v;\
00021 v.x = getRobot##number##PosX();\
00022 v.y = getRobot##number##PosY();\
00023 return v;\
00024 }\
00025 double GTCamSymbols::getRobot##number##SpeedX() {\
00026 return gtCamWorldState.getPlayerSpeed(pnumber,color).x;\
00027 }\
00028 double GTCamSymbols::getRobot##number##SpeedY() {\
00029 return gtCamWorldState.getPlayerSpeed(pnumber,color).y;\
00030 }\
00031 Vector2<double> GTCamSymbols::getRobot##number##Speed() {\
00032 Vector2<double> v;\
00033 v.x = getRobot##number##SpeedX();\
00034 v.y = getRobot##number##SpeedY();\
00035 return v;\
00036 }\
00037 double GTCamSymbols::getRobot##number##Rotation() {\
00038 return gtCamWorldState.getPlayerOrientation(pnumber,color);\
00039 }\
00040 double GTCamSymbols::getRobot##number##Distance() {\
00041 Vector2<double> v;\
00042 v.x = robotPose.translation.x - getRobot##number##PosX();\
00043 v.y = robotPose.translation.y - getRobot##number##PosY();\
00044 return v.abs();\
00045 }\
00046
00047 #define REGISTERROBOTXimpl(number)\
00048 engine.registerDecimalInputSymbol("GTCam.Robot" #number ".x",this,\
00049 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getRobot##number##PosX);\
00050 engine.registerDecimalInputSymbol("GTCam.Robot" #number ".y",this,\
00051 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getRobot##number##PosY);\
00052 engine.registerDecimalInputSymbol("GTCam.Robot" #number ".speed.x",this,\
00053 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getRobot##number##SpeedX);\
00054 engine.registerDecimalInputSymbol("GTCam.Robot" #number ".speed.y",this,\
00055 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getRobot##number##SpeedY);\
00056 engine.registerDecimalInputSymbol("GTCam.Robot" #number ".rotation",this,\
00057 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getRobot##number##Rotation);\
00058 engine.registerDecimalInputSymbol("GTCam.DistanceToRobot" #number ".abs",this,\
00059 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getRobot##number##Distance );\
00060
00061
00062
00063
00064
00065
00066
00067
00068 GTCamSymbols::GTCamSymbols(const BehaviorControlInterfaces& interfaces) :
00069 BehaviorControlInterfaces(interfaces)
00070 {
00071 }
00072
00073
00074
00075
00076
00077 void GTCamSymbols::registerSymbols(Xabsl2Engine& engine)
00078 {
00079
00080 engine.registerDecimalInputSymbol("GTCam.ball.x",this,
00081 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getBallX);
00082 engine.registerDecimalInputSymbol("GTCam.ball.y",this,
00083 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getBallY);
00084 engine.registerDecimalInputSymbol("GTCam.ball.speed.x",this,
00085 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getBallSpeedX);
00086 engine.registerDecimalInputSymbol("GTCam.ball.speed.y",this,
00087 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getBallSpeedY);
00088
00089
00090 REGISTERROBOTXimpl(1)
00091 REGISTERROBOTXimpl(2)
00092 REGISTERROBOTXimpl(3)
00093 REGISTERROBOTXimpl(4)
00094 REGISTERROBOTXimpl(5)
00095 REGISTERROBOTXimpl(6)
00096 REGISTERROBOTXimpl(7)
00097 REGISTERROBOTXimpl(8)
00098
00099
00100 engine.registerDecimalInputSymbol("GTCam.Own.rotation",this,
00101 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getOwnRotation);
00102 engine.registerDecimalInputSymbol("GTCam.Own.x",this,
00103 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getOwnPosX);
00104 engine.registerDecimalInputSymbol("GTCam.Own.y",this,
00105 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getOwnPosY);
00106 engine.registerDecimalInputSymbol("GTCam.Own.speed.x",this,
00107 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getOwnSpeedX);
00108 engine.registerDecimalInputSymbol("GTCam.Own.speed.y",this,
00109 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getOwnSpeedY);
00110 engine.registerDecimalInputSymbol("GTCam.Own.Distance.abs",this,
00111 (double (Xabsl2FunctionProvider::*)())>CamSymbols::getOwnDistance);
00112 }
00113
00114
00115
00116
00117 void GTCamSymbols::update()
00118 {
00119 }
00120
00121
00122
00123
00124
00125 GETROBOTXimpl(1,0,Player::red)
00126 GETROBOTXimpl(2,1,Player::red)
00127 GETROBOTXimpl(3,2,Player::red)
00128 GETROBOTXimpl(4,3,Player::red)
00129 GETROBOTXimpl(5,0,Player::blue)
00130 GETROBOTXimpl(6,1,Player::blue)
00131 GETROBOTXimpl(7,2,Player::blue)
00132 GETROBOTXimpl(8,3,Player::blue)
00133
00134
00135
00136
00137 double GTCamSymbols::getBallX() {
00138 return gtCamWorldState.getBallModel().seen.positionField.x;
00139 }
00140
00141
00142
00143
00144 double GTCamSymbols::getBallY() {
00145 return gtCamWorldState.getBallModel().seen.positionField.y;
00146 }
00147
00148
00149
00150
00151 double GTCamSymbols::getBallSpeedX() {
00152 return gtCamWorldState.getBallModel().seen.speedField.x;
00153 }
00154
00155
00156
00157
00158 double GTCamSymbols::getBallSpeedY() {
00159 return gtCamWorldState.getBallModel().seen.speedField.y;
00160 }
00161
00162
00163
00164
00165 Vector2<double> GTCamSymbols::getBall() {
00166 Vector2<double> v;
00167 v.x = getBallX();
00168 v.y = getBallY();
00169 return v;
00170 }
00171
00172
00173
00174
00175
00176 double GTCamSymbols::getOwnDistance() {
00177 Vector2<double> v;
00178 v.x = robotPose.translation.x - getOwnPosX();
00179 v.y = robotPose.translation.y - getOwnPosY();
00180 return v.abs();
00181 }
00182
00183
00184
00185
00186 double GTCamSymbols::getOwnRotation() {
00187 return gtCamWorldState.getPlayerOrientation(getPlayer().getPlayerNumber(),getPlayer().getTeamColor());
00188 }
00189
00190
00191
00192
00193 double GTCamSymbols::getOwnPosX() {
00194 return gtCamWorldState.getPlayerPos(getPlayer().getPlayerNumber() ,getPlayer().getTeamColor()).x;
00195 }
00196
00197
00198
00199
00200 double GTCamSymbols::getOwnPosY() {
00201 return gtCamWorldState.getPlayerPos(getPlayer().getPlayerNumber() ,getPlayer().getTeamColor()).y;
00202 }
00203
00204
00205
00206
00207 double GTCamSymbols::getOwnSpeedX() {
00208 return gtCamWorldState.getPlayerSpeed(getPlayer().getPlayerNumber(),getPlayer().getTeamColor()).x;
00209 }
00210
00211
00212
00213
00214 double GTCamSymbols::getOwnSpeedY() {
00215 return gtCamWorldState.getPlayerSpeed(getPlayer().getPlayerNumber(),getPlayer().getTeamColor()).y;
00216 }