00001
00002
00003
00004
00005
00006
00007
00008
00009 #include "GT2004ConfigurationSymbols.h"
00010
00011 GT2004ConfigurationSymbols::GT2004ConfigurationSymbols(
00012 BehaviorControlInterfaces& interfaces)
00013 : BehaviorControlInterfaces(interfaces)
00014 {
00015 currentKickoff = 0;
00016
00017 goalie.x = -2000.0;
00018 goalie.y = 50;
00019
00020 defensiveSupporter.x = -1000.0;
00021 defensiveSupporter.y = -200.0;
00022
00023
00024 offensiveSupporterOpponentKickoff.x = -1000.0;
00025 offensiveSupporterOpponentKickoff.y = -800.0;
00026
00027 strikerOpponentKickoff.x = -1000.0;
00028 strikerOpponentKickoff.y = 500.0;
00029
00030
00031 offensiveSupporterOwnKickoff[0].x = -100.0;
00032 offensiveSupporterOwnKickoff[0].y = -800.0;
00033 offensiveSupporterOwnKickoffAngle[0] = 0.0;
00034 strikerOwnKickoff[0].x = -130.0;
00035 strikerOwnKickoff[0].y = 130.0;
00036 strikerOwnKickoffAngle[0] = -45.0;
00037
00038
00039 offensiveSupporterOwnKickoff[1].x = -100.0;
00040 offensiveSupporterOwnKickoff[1].y = 800.0;
00041 offensiveSupporterOwnKickoffAngle[1] = 0.0;
00042 strikerOwnKickoff[1].x = -130.0;
00043 strikerOwnKickoff[1].y = -130.0;
00044 strikerOwnKickoffAngle[1] = 45.0;
00045
00046 }
00047
00048 void GT2004ConfigurationSymbols::registerSymbols(Xabsl2Engine& engine)
00049 {
00050 engine.registerDecimalInputSymbol("current-kickoff-variant",this,
00051 (double (Xabsl2FunctionProvider::*)())>2004ConfigurationSymbols::getCurrentKickoff);
00052
00053 engine.registerDecimalInputSymbol("own-kickoff.angle",this,
00054 (double (Xabsl2FunctionProvider::*)())>2004ConfigurationSymbols::getOwnKickoffAngle);
00055 engine.registerDecimalInputSymbol("own-kickoff.x",this,
00056 (double (Xabsl2FunctionProvider::*)())>2004ConfigurationSymbols::getOwnKickoffX);
00057 engine.registerDecimalInputSymbol("own-kickoff.y",this,
00058 (double (Xabsl2FunctionProvider::*)())>2004ConfigurationSymbols::getOwnKickoffY);
00059
00060 engine.registerDecimalInputSymbol("opponent-kickoff.angle",this,
00061 (double (Xabsl2FunctionProvider::*)())>2004ConfigurationSymbols::getOpponentKickoffAngle);
00062 engine.registerDecimalInputSymbol("opponent-kickoff.x",this,
00063 (double (Xabsl2FunctionProvider::*)())>2004ConfigurationSymbols::getOpponentKickoffX);
00064 engine.registerDecimalInputSymbol("opponent-kickoff.y",this,
00065 (double (Xabsl2FunctionProvider::*)())>2004ConfigurationSymbols::getOpponentKickoffY);
00066 }
00067
00068 void GT2004ConfigurationSymbols::update()
00069 {
00070 currentKickoff = gameControlData.data.opponentScore % numOfKickoff;
00071
00072
00073 double radius = 250.0;
00074
00075 double leftAbs = fromDegrees(10.0);
00076 double rightAbs = fromDegrees(55.0);
00077 double freeWidth = fromDegrees(15.0);
00078
00079 double step = fromDegrees(5.0);
00080 double bestAngle = 0.0;
00081 double bestDist = 0.0;
00082
00083 double start = 0.0, end = 0.0;
00084 enum { left, right } direction = left;
00085
00086 switch (currentKickoff % 2)
00087 {
00088 case 0:
00089 start = -1 * leftAbs;
00090 end = -1 * rightAbs;
00091 step *= -1;
00092 direction = right;
00093 break;
00094 case 1:
00095 start = leftAbs;
00096 end = rightAbs;
00097 step = step;
00098 direction = left;
00099 break;
00100 }
00101
00102 for(
00103 double ang = start;
00104 (direction == left && ang <= end) || (direction == right && ang >= end);
00105 ang += step
00106 )
00107 {
00108 double currDist = obstaclesModel.getDistanceInCorridor(ang, freeWidth);
00109 double angAbs = ang - robotPose.getAngle();
00110 currDist = obstaclesModel.getDistanceInDirection(angAbs, freeWidth);
00111 if(currDist > bestDist)
00112 {
00113 bestDist = currDist;
00114 bestAngle = ang;
00115 }
00116 }
00117
00118 double posX = - cos ( bestAngle ) * radius;
00119 double posY = - sin ( bestAngle ) * radius;
00120
00121 obstacleKickoff.translation.x = posX;
00122 obstacleKickoff.translation.y = posY;
00123 obstacleKickoff.fromAngle(toDegrees(bestAngle));
00124 }
00125
00126 double GT2004ConfigurationSymbols::getCurrentKickoff()
00127 {
00128 return currentKickoff;
00129 }
00130
00131 double GT2004ConfigurationSymbols::getOwnKickoffAngle()
00132 {
00133 switch (getPlayer().getPlayerNumber())
00134 {
00135 case Player::one:
00136 case Player::two:
00137 default:
00138 return 0;
00139 case Player::three:
00140 return offensiveSupporterOwnKickoffAngle[currentKickoff];
00141 case Player::four:
00142 return getOwnKickoffAngleByObstacles();
00143
00144 }
00145 }
00146
00147 double GT2004ConfigurationSymbols::getOwnKickoffX()
00148 {
00149 switch (getPlayer().getPlayerNumber())
00150 {
00151 case Player::one:
00152 default:
00153 return goalie.x;
00154 case Player::two:
00155 return defensiveSupporter.x;
00156 case Player::three:
00157 return offensiveSupporterOwnKickoff[currentKickoff].x;
00158 case Player::four:
00159 return getOwnKickoffXByObstacles();
00160
00161 }
00162 }
00163
00164 double GT2004ConfigurationSymbols::getOwnKickoffY()
00165 {
00166 switch (getPlayer().getPlayerNumber())
00167 {
00168 case Player::one:
00169 default:
00170 return goalie.y;
00171 case Player::two:
00172 return defensiveSupporter.y;
00173 case Player::three:
00174 return offensiveSupporterOwnKickoff[currentKickoff].y;
00175 case Player::four:
00176 return getOwnKickoffYByObstacles();
00177
00178 }
00179 }
00180
00181 double GT2004ConfigurationSymbols::getOwnKickoffXByObstacles()
00182 {
00183 return obstacleKickoff.translation.x;
00184 }
00185
00186 double GT2004ConfigurationSymbols::getOwnKickoffYByObstacles()
00187 {
00188 return obstacleKickoff.translation.y;
00189 }
00190
00191 double GT2004ConfigurationSymbols::getOwnKickoffAngleByObstacles()
00192 {
00193 return obstacleKickoff.getAngle();
00194 }
00195
00196 double GT2004ConfigurationSymbols::getOpponentKickoffAngle()
00197 {
00198 switch (getPlayer().getPlayerNumber())
00199 {
00200 case Player::one:
00201 case Player::two:
00202 case Player::three:
00203 case Player::four:
00204 default:
00205 return 0;
00206 }
00207 }
00208
00209 double GT2004ConfigurationSymbols::getOpponentKickoffX()
00210 {
00211 switch (getPlayer().getPlayerNumber())
00212 {
00213 case Player::one:
00214 default:
00215 return goalie.x;
00216 case Player::two:
00217 return defensiveSupporter.x;
00218 case Player::three:
00219 return offensiveSupporterOpponentKickoff.x;
00220 case Player::four:
00221 return strikerOpponentKickoff.x;
00222 }
00223 }
00224
00225 double GT2004ConfigurationSymbols::getOpponentKickoffY()
00226 {
00227 switch (getPlayer().getPlayerNumber())
00228 {
00229 case Player::one:
00230 default:
00231 return goalie.y;
00232 case Player::two:
00233 return defensiveSupporter.y;
00234 case Player::three:
00235 return offensiveSupporterOpponentKickoff.y;
00236 case Player::four:
00237 return strikerOpponentKickoff.y;
00238 }
00239 }
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261