00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
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
00186 #include <sstream>
00187 #include <cstdio>
00188 #include <cstring>
00189 #include <cctype>
00190
00191 #include "Sensors.h"
00192 #include "Controller.h"
00193 #include "SensorInterface.h"
00194
00195 #include "SetCyclesSinceIOBeforeShutdown.h"
00196 #include "SetMinTicksBeforeSendingCommand.h"
00197 #include "SetMaxTicksBeforeSendingCommand.h"
00198 #include "SetTicksBeforeCommandWarning.h"
00199 #include "SetTicksBetweenCycles.h"
00200 #include "SetTicksBetweenSenses.h"
00201 #include "SetTicksBetweenVisuals.h"
00202
00203 #include "string_utils.h"
00204 #include "rs_error.h"
00205 #include "rs_log.h"
00206 #include "rs_try_catch.h"
00207
00208 RS_BEGIN_NAMESPACE
00209
00210
00211 Sensors::Sensors(SensorInterface* sensor_interface,
00212 rcss::Parser& coachMessageParser)
00213 : rcc::Parser(coachMessageParser),
00214 facts(WorldFacts::nonConstInstance()),
00215 theController(NULL),
00216 theSensorInterface(sensor_interface),
00217 lastSensorType(SENSOR_UNKNOWN),
00218 currentTime(0),
00219 commandQueue(),
00220 parsedSide(S_UNKNOWN),
00221 parsedPlayMode(PM_UNKNOWN),
00222 parsedViewQuality(VQ_UNKNOWN),
00223 parsedViewWidth(VW_UNKNOWN),
00224 parsedLocations(),
00225 parsedFlagOffset(UIntUnknown()),
00226 parsedUniformNumber(UIntUnknown()),
00227 parsedGoalie(false),
00228 parsedTeam(T_UNKNOWN),
00229 parsedArmState(),
00230 parsedFocusState(),
00231 parsedTackleState() {}
00232
00233 void Sensors::init(Controller* controller) {
00234 theController = controller;
00235 }
00236
00237 void Sensors::analyze(ServerCommand* command) {
00238 lastSensorType = SENSOR_ACTUATORS;
00239 commandQueue.push(command->getType());
00240 theSensorInterface->setLastCommand(command->clone());
00241 theSensorInterface->setLastSensorType(lastSensorType);
00242 delete command;
00243 }
00244
00245 void Sensors::analyze(char* sensor_data) {
00246 lastSensorType = SENSOR_UNKNOWN;
00247 std::istringstream strm(sensor_data);
00248 if (!parse(strm)) {
00249 RS_LOG( LA_WARNING, "Parse error on sensor data: '" << sensor_data << "'");
00250 }
00251 else if ( lastSensorType == SENSOR_UNKNOWN )
00252 RS_LOG( LA_WARNING, "Unknown sensor data: '" << sensor_data << "'");
00253 else
00254 theSensorInterface->setLastSensorType(lastSensorType);
00255 }
00256
00257 void Sensors::updateTime(int time) {
00258 setCurrentTime(time);
00259 if ( theController->updateTime(getCurrentTime()) ) {
00260 theSensorInterface->newCycle();
00261 RS_LOG( LA_CONTROLLER, "Time: " << toString(getCurrentTime())
00262 << " --- NEW CYCLE ---");
00263 }
00264 }
00265
00266
00267
00268
00269
00270 void Sensors::doMsgParsed() {
00271 }
00272
00273 void Sensors::doBuildScore( int time, int our, int opp ) {
00274 RS_LOG ( LA_SENSORS, "BuildScore: " << time << ", " << our << ", " << opp );
00275 facts->setScore(facts->getOurSide(), our);
00276 facts->setScore(facts->getTheirSide(), opp);
00277 updateTime(time);
00278 lastSensorType = SENSOR_AURAL_SCORE;
00279
00280 }
00281
00282 void Sensors::doBuildTeamName( const std::string& name ) {
00283 RS_LOG ( LA_SENSORS, "BuildTeamName: " << name );
00284 if ( parsedSide != S_UNKNOWN ) {
00285 RS_LOG ( LA_SENSORS, "BuildTeamName: got team name" );
00286 if ( facts->getOurSide() == parsedSide ) {
00287 facts->CP_team_name = name;
00288 } else {
00289 facts->CP_their_team_name = name;
00290 }
00291 } else {
00292 RS_LOG( LA_SENSORS, "BuildTeamName: " << facts->CP_team_name
00293 << ", " << facts->CP_their_team_name );
00294 if ( name == facts->CP_team_name ) {
00295 RS_LOG ( LA_SENSORS, "BuildTeamName: our team" );
00296 parsedTeam = T_OUR_TEAM;
00297 } else if ( name == facts->CP_their_team_name ) {
00298 RS_LOG ( LA_SENSORS, "BuildTeamName: their team" );
00299 parsedTeam = T_THEIR_TEAM;
00300 } else {
00301
00302
00303
00304 if ( facts->isOurTeamNameKnown() ) {
00305 RS_LOG ( LA_SENSORS, "BuildTeamName: assume their team is " << name );
00306 facts->CP_their_team_name = name;
00307 parsedTeam = T_THEIR_TEAM;
00308 } else if ( facts->isTheirTeamNameKnown() ) {
00309 RS_LOG ( LA_SENSORS, "BuildTeamName: assume our team is " << name );
00310 facts->CP_team_name = name;
00311 parsedTeam = T_OUR_TEAM;
00312 } else {
00313
00314 RS_LOG ( LA_SENSORS, "BuildTeamName: do not know team" );
00315 parsedTeam = T_UNKNOWN;
00316 }
00317 }
00318 }
00319 }
00320
00321 void Sensors::doBuildUNum( int unum ) {
00322 RS_LOG ( LA_SENSORS, "BuildUNum: " << unum);
00323 parsedUniformNumber = unum;
00324 }
00325
00326 void Sensors::doBuildGoalie() {
00327 RS_LOG ( LA_SENSORS, "BuildGoalie" );
00328 parsedGoalie = true;
00329 }
00330
00331
00332
00333
00334
00335 void Sensors::doParsedCLang( const std::string& msg ) {
00336 RS_LOG ( LA_SENSORS, "ParsedCLang: " << msg);
00337 lastSensorType = SENSOR_AURAL_COACH;
00338 }
00339
00340
00341
00342
00343
00344 void Sensors::doBuildFullState( int time ) {
00345 RS_LOG ( LA_SENSORS, "BuildFullState: " << time);
00346 RS_WARNING("Fullstate messages isn't implemented");
00347 lastSensorType = SENSOR_UNKNOWN;
00348 updateTime(time);
00349 theSensorInterface->seeFullstate(parsedFullstatePlayers,
00350 parsedCoachBall);
00351 parsedFullstatePlayers.clear();
00352 parsedCoachBall = CoachBallObject();
00353 }
00354
00355 void Sensors::doBuildCounts(int kick, int dash, int turn, int katch,
00356 int move, int turn_neck, int change_view, int say) {
00357 RS_LOG ( LA_SENSORS, "BuildCounts: " << kick << ", " << dash << ", "
00358 << turn << ", " << ", " << katch << ", " << move << ", "
00359 << turn_neck << ", " << change_view << ", " << say);
00360 RS_WARNING("This BuildCounts isn't implemented");
00361 lastSensorType = SENSOR_UNKNOWN;
00362 }
00363
00364 void Sensors::doBuildScore( int our, int opp ) {
00365 RS_LOG ( LA_SENSORS, "BuildScore: " << our << ", " << opp );
00366 facts->setScore(facts->getOurSide(), our);
00367 facts->setScore(facts->getTheirSide(), opp);
00368 lastSensorType = SENSOR_AURAL_SCORE;
00369 }
00370
00371 void Sensors::doBuildBall( double x, double y,
00372 double delta_x, double delta_y ) {
00373 RS_LOG ( LA_SENSORS, "BuildBall: " << x << ", " << y << ", "
00374 << delta_x << ", " << delta_y);
00375 parsedCoachBall = CoachBallObject(x, y, delta_x, delta_y);
00376 }
00377
00378 void Sensors::doBuildPlayer( int unum, int type, double x, double y,
00379 double dx, double dy,
00380 double body_dir, double head_dir,
00381 int stamina, double effort, double recovery ) {
00382
00383 RS_LOG ( LA_SENSORS, "BuildPlayer: " << unum << ", " << type << ", "
00384 << x << ", " << y << ", " << dx << ", " << dy << ", " << body_dir
00385 << ", " << head_dir << ", " << stamina << ", " << effort
00386 << ", " << recovery);
00387 parsedFullstatePlayers.push_back
00388 (FullstatePlayerObject
00389 (x, y, dx, dy,
00390 T_UNKNOWN,
00391 unum,
00392 false,
00393 body_dir,
00394 head_dir,
00395 AngleDegUnknown(),
00396 false,
00397 stamina,
00398 effort));
00399 }
00400
00401 void Sensors::doBuildPlayer( int unum, int type, double x, double y,
00402 double dx, double dy,
00403 double body_dir, double head_dir,
00404 double arm_mag, double arm_dir,
00405 int stamina, double effort, double recovery ) {
00406
00407 RS_LOG ( LA_SENSORS, "BuildPlayer: " << unum << ", " << type << ", "
00408 << x << ", " << y << ", " << dx << ", " << dy << ", " << body_dir
00409 << ", " << head_dir << ", " << arm_mag << ", " << arm_dir << ", "
00410 << stamina << ", " << effort << ", " << recovery);
00411 RS_WARNING("This doBuildPlayer isn't implemented!");
00412 lastSensorType = SENSOR_UNKNOWN;
00413 }
00414
00415 void Sensors::doBuildGoalie( int unum, double x, double y,
00416 double dx, double dy,
00417 double body_dir, double head_dir,
00418 int stamina, double effort, double recovery ) {
00419
00420 RS_LOG ( LA_SENSORS, "BuildGoalie: " << unum << ", " << ", "
00421 << x << ", " << y << ", " << dx << ", " << dy << ", " << body_dir
00422 << ", " << head_dir << ", " << stamina << ", " << effort
00423 << ", " << recovery);
00424 RS_WARNING("This doBuildGoalie isn't implemented!");
00425 lastSensorType = SENSOR_UNKNOWN;
00426 }
00427
00428 void Sensors::doBuildGoalie( int unum, double x, double y,
00429 double dx, double dy,
00430 double body_dir, double head_dir,
00431 double arm_mag, double arm_dir,
00432 int stamina, double effort, double recovery ) {
00433
00434 RS_LOG ( LA_SENSORS, "BuildGoalie: " << unum << ", " << ", "
00435 << x << ", " << y << ", " << dx << ", " << dy << ", " << body_dir
00436 << ", " << head_dir << ", " << arm_mag << ", " << arm_dir << ", "
00437 << stamina << ", " << effort << ", " << recovery);
00438 RS_WARNING("This doBuildGoalie isn't implemented!");
00439 lastSensorType = SENSOR_UNKNOWN;
00440 }
00441
00442
00443
00444
00445
00446 void Sensors::doBuildCatchBallLeftPlayMode() {
00447 RS_LOG ( LA_SENSORS, "BuildCatchBallLeftPlayMode");
00448 if (facts->getOurSide() == S_LEFT)
00449 parsedPlayMode = PM_OUR_GOALIE_GOT_BALL;
00450 else if (facts->getOurSide() == S_RIGHT)
00451 parsedPlayMode = PM_THEIR_GOALIE_GOT_BALL;
00452 }
00453
00454 void Sensors::doBuildCatchBallRightPlayMode() {
00455 RS_LOG ( LA_SENSORS, "BuildCatchBallRightPlayMode" );
00456 if (facts->getOurSide() == S_RIGHT)
00457 parsedPlayMode = PM_OUR_GOALIE_GOT_BALL;
00458 else if (facts->getOurSide() == S_LEFT)
00459 parsedPlayMode = PM_THEIR_GOALIE_GOT_BALL;
00460 }
00461
00462 void Sensors::doBuildBeforeKickOffPlayMode() {
00463 RS_LOG ( LA_SENSORS, "BuildBeforeKickOffPlayMode" );
00464 parsedPlayMode = PM_BEFORE_KICK_OFF;
00465 }
00466
00467 void Sensors::doBuildTimeOverPlayMode() {
00468 RS_LOG ( LA_SENSORS, "BuildTimeOverPlayMode" );
00469 parsedPlayMode = PM_TIME_OVER;
00470 }
00471
00472 void Sensors::doBuildPlayOnPlayMode() {
00473 RS_LOG ( LA_SENSORS, "BuildPlayOnPlayMode" );
00474 parsedPlayMode = PM_PLAY_ON;
00475 }
00476
00477 void Sensors::doBuildKickOffLeftPlayMode() {
00478 RS_LOG ( LA_SENSORS, "BuildKickOffLeftPlayMode" );
00479 if (facts->getOurSide() == S_LEFT)
00480 parsedPlayMode = PM_OUR_KICK_OFF;
00481 else if (facts->getOurSide() == S_RIGHT)
00482 parsedPlayMode = PM_THEIR_KICK_OFF;
00483 }
00484
00485 void Sensors::doBuildKickOffRightPlayMode() {
00486 RS_LOG ( LA_SENSORS, "BuildKickOffRightPlayMode" );
00487 if (facts->getOurSide() == S_RIGHT)
00488 parsedPlayMode = PM_OUR_KICK_OFF;
00489 else if (facts->getOurSide() == S_LEFT)
00490 parsedPlayMode = PM_THEIR_KICK_OFF;
00491 }
00492
00493 void Sensors::doBuildKickInLeftPlayMode() {
00494 RS_LOG ( LA_SENSORS, "BuildKickInLeftPlayMode" );
00495 if (facts->getOurSide() == S_LEFT)
00496 parsedPlayMode = PM_OUR_KICK_IN;
00497 else if (facts->getOurSide() == S_RIGHT)
00498 parsedPlayMode = PM_THEIR_KICK_IN;
00499 }
00500
00501 void Sensors::doBuildKickInRightPlayMode() {
00502 RS_LOG ( LA_SENSORS, "BuildKickInRightPlayMode" );
00503 if (facts->getOurSide() == S_RIGHT)
00504 parsedPlayMode = PM_OUR_KICK_IN;
00505 else if (facts->getOurSide() == S_LEFT)
00506 parsedPlayMode = PM_THEIR_KICK_IN;
00507 }
00508
00509 void Sensors::doBuildFreeKickLeftPlayMode() {
00510 RS_LOG ( LA_SENSORS, "BuildFreeKickLeftPlayMode" );
00511 if (facts->getOurSide() == S_LEFT)
00512 parsedPlayMode = PM_OUR_FREE_KICK;
00513 else if (facts->getOurSide() == S_RIGHT)
00514 parsedPlayMode = PM_THEIR_FREE_KICK;
00515 }
00516
00517 void Sensors::doBuildFreeKickRightPlayMode() {
00518 RS_LOG ( LA_SENSORS, "BuildFreeKickRightPlayMode" );
00519 if (facts->getOurSide() == S_RIGHT)
00520 parsedPlayMode = PM_OUR_FREE_KICK;
00521 else if (facts->getOurSide() == S_LEFT)
00522 parsedPlayMode = PM_THEIR_FREE_KICK;
00523 }
00524
00525 void Sensors::doBuildCornerKickLeftPlayMode() {
00526 RS_LOG ( LA_SENSORS, "BuildCornerKickLeftPlayMode" );
00527 if (facts->getOurSide() == S_LEFT)
00528 parsedPlayMode = PM_OUR_CORNER_KICK;
00529 else if (facts->getOurSide() == S_RIGHT)
00530 parsedPlayMode = PM_THEIR_CORNER_KICK;
00531 }
00532
00533 void Sensors::doBuildCornerKickRightPlayMode() {
00534 RS_LOG ( LA_SENSORS, "BuildCornerKickRightPlayMode" );
00535 if (facts->getOurSide() == S_RIGHT)
00536 parsedPlayMode = PM_OUR_CORNER_KICK;
00537 else if (facts->getOurSide() == S_LEFT)
00538 parsedPlayMode = PM_THEIR_CORNER_KICK;
00539 }
00540
00541 void Sensors::doBuildGoalKickLeftPlayMode() {
00542 RS_LOG ( LA_SENSORS, "BuildGoalKickLeftPlayMode" );
00543 if (facts->getOurSide() == S_LEFT)
00544 parsedPlayMode = PM_OUR_GOAL_KICK;
00545 else if (facts->getOurSide() == S_RIGHT)
00546 parsedPlayMode = PM_THEIR_GOAL_KICK;
00547 }
00548
00549 void Sensors::doBuildGoalKickRightPlayMode() {
00550 RS_LOG ( LA_SENSORS, "BuildGoalKickRightPlayMode" );
00551 if (facts->getOurSide() == S_RIGHT)
00552 parsedPlayMode = PM_OUR_GOAL_KICK;
00553 else if (facts->getOurSide() == S_LEFT)
00554 parsedPlayMode = PM_THEIR_GOAL_KICK;
00555 }
00556
00557 void Sensors::doBuildAfterGoalLeftPlayMode() {
00558 RS_LOG ( LA_SENSORS, "BuildAfterGoalLeftPlayMode" );
00559 if (facts->getOurSide() == S_LEFT)
00560 parsedPlayMode = PM_OUR_GOAL;
00561 else if (facts->getOurSide() == S_RIGHT)
00562 parsedPlayMode = PM_THEIR_GOAL;
00563 }
00564
00565 void Sensors::doBuildAfterGoalRightPlayMode() {
00566 RS_LOG ( LA_SENSORS, "BuildAfterGoalRightPlayMode" );
00567 if (facts->getOurSide() == S_RIGHT)
00568 parsedPlayMode = PM_OUR_GOAL;
00569 else if (facts->getOurSide() == S_LEFT)
00570 parsedPlayMode = PM_THEIR_GOAL;
00571 }
00572
00573 void Sensors::doBuildDropBallPlayMode() {
00574 RS_LOG ( LA_SENSORS, "BuildDropBallPlayMode" );
00575 parsedPlayMode = PM_DROP_BALL;
00576 }
00577
00578 void Sensors::doBuildOffSideLeftPlayMode() {
00579 RS_LOG ( LA_SENSORS, "BuildOffSideLeftPlayMode" );
00580 if (facts->getOurSide() == S_LEFT)
00581 parsedPlayMode = PM_OUR_OFFSIDE_KICK;
00582 else if (facts->getOurSide() == S_RIGHT)
00583 parsedPlayMode = PM_THEIR_OFFSIDE_KICK;
00584 }
00585
00586 void Sensors::doBuildOffsideRightPlayMode() {
00587 RS_LOG ( LA_SENSORS, "BuildOffsideRightPlayMode" );
00588 if (facts->getOurSide() == S_RIGHT)
00589 parsedPlayMode = PM_OUR_OFFSIDE_KICK;
00590 else if (facts->getOurSide() == S_LEFT)
00591 parsedPlayMode = PM_THEIR_OFFSIDE_KICK;
00592 }
00593
00594 void Sensors::doBuildPenaltyKickLeftPlayMode() {
00595 RS_LOG ( LA_SENSORS, "BuildPenaltyKickLeftPlayMode" );
00596 if (facts->getOurSide() == S_LEFT)
00597 parsedPlayMode = PM_OUR_PENALTY_KICK;
00598 else if (facts->getOurSide() == S_RIGHT)
00599 parsedPlayMode = PM_THEIR_PENALTY_KICK;
00600 }
00601
00602 void Sensors::doBuildPenaltyKickRightPlayMode() {
00603 RS_LOG ( LA_SENSORS, "BuildPenaltyKickRightPlayMode" );
00604 if (facts->getOurSide() == S_RIGHT)
00605 parsedPlayMode = PM_OUR_PENALTY_KICK;
00606 else if (facts->getOurSide() == S_LEFT)
00607 parsedPlayMode = PM_THEIR_PENALTY_KICK;
00608 }
00609
00610 void Sensors::doBuildFirstHalfOverPlayMode() {
00611 RS_LOG ( LA_SENSORS, "BuildFirstHalfOverPlayMode" );
00612 parsedPlayMode = PM_HALF_TIME;
00613 }
00614
00615 void Sensors::doBuildPausePlayMode() {
00616 RS_LOG ( LA_SENSORS, "BuildPausePlayMode" );
00617 parsedPlayMode = PM_PAUSE;
00618 }
00619
00620 void Sensors::doBuildHumanPlayMode() {
00621 RS_LOG ( LA_SENSORS, "BuildHumanPlayMode" );
00622 parsedPlayMode = PM_HUMAN;
00623 }
00624
00625 void Sensors::doBuildFoulLeftPlayMode() {
00626 RS_LOG ( LA_SENSORS, "BuildFoulLeftPlayMode: ");
00627 if (facts->getOurSide() == S_LEFT)
00628 parsedPlayMode = PM_OUR_FOUL;
00629 else if (facts->getOurSide() == S_RIGHT)
00630 parsedPlayMode = PM_THEIR_FOUL;
00631 }
00632
00633 void Sensors::doBuildFoulRightPlayMode() {
00634 RS_LOG ( LA_SENSORS, "BuildFoulRightPlayMode: ");
00635 if (facts->getOurSide() == S_LEFT)
00636 parsedPlayMode = PM_OUR_FOUL;
00637 else if (facts->getOurSide() == S_RIGHT)
00638 parsedPlayMode = PM_THEIR_FOUL;
00639 }
00640
00641 void Sensors::doBuildFoulChargeLeftPlayMode() {
00642 RS_LOG ( LA_SENSORS, "BuildFoulChargeLeftPlayMode" );
00643 if (facts->getOurSide() == S_LEFT)
00644 parsedPlayMode = PM_OUR_FOUL_CHARGE;
00645 else if (facts->getOurSide() == S_RIGHT)
00646 parsedPlayMode = PM_THEIR_FOUL_CHARGE;
00647 }
00648
00649 void Sensors::doBuildFoulChargeRightPlayMode() {
00650 RS_LOG ( LA_SENSORS, "BuildFoulChargeRightPlayMode" );
00651 if (facts->getOurSide() == S_RIGHT)
00652 parsedPlayMode = PM_OUR_FOUL_CHARGE;
00653 else if (facts->getOurSide() == S_LEFT)
00654 parsedPlayMode = PM_THEIR_FOUL_CHARGE;
00655 }
00656
00657 void Sensors::doBuildFoulPushLeftPlayMode() {
00658 RS_LOG ( LA_SENSORS, "BuildFoulPushLeftPlayMode" );
00659 if (facts->getOurSide() == S_LEFT)
00660 parsedPlayMode = PM_OUR_FOUL_PUSH;
00661 else if (facts->getOurSide() == S_RIGHT)
00662 parsedPlayMode = PM_THEIR_FOUL_PUSH;
00663 }
00664
00665 void Sensors::doBuildFoulPushRightPlayMode() {
00666 RS_LOG ( LA_SENSORS, "BuildFoulPushRightPlayMode" );
00667 if (facts->getOurSide() == S_RIGHT)
00668 parsedPlayMode = PM_OUR_FOUL_PUSH;
00669 else if (facts->getOurSide() == S_LEFT)
00670 parsedPlayMode = PM_THEIR_FOUL_PUSH;
00671 }
00672
00673 void Sensors::doBuildFoulMultipleAttackerLeftPlayMode() {
00674 RS_LOG ( LA_SENSORS, "BuildFoulMultipleAttackerLeftPlayMode" );
00675 if (facts->getOurSide() == S_LEFT)
00676 parsedPlayMode = PM_OUR_FOUL_MULTIPLEATTACKER;
00677 else if (facts->getOurSide() == S_RIGHT)
00678 parsedPlayMode = PM_THEIR_FOUL_MULTIPLEATTACKER;
00679 }
00680
00681 void Sensors::doBuildFoulMultipleAttackerRightPlayMode() {
00682 RS_LOG ( LA_SENSORS, "BuildFoulMultipleAttackerRightPlayMode" );
00683 if (facts->getOurSide() == S_RIGHT)
00684 parsedPlayMode = PM_OUR_FOUL_MULTIPLEATTACKER;
00685 else if (facts->getOurSide() == S_LEFT)
00686 parsedPlayMode = PM_THEIR_FOUL_MULTIPLEATTACKER;
00687 }
00688
00689 void Sensors::doBuildFoulBallOutLeftPlayMode() {
00690 RS_LOG ( LA_SENSORS, "BuildFoulBallOutLeftPlayMode" );
00691 if (facts->getOurSide() == S_LEFT)
00692 parsedPlayMode = PM_OUR_FOUL_BALLOUT;
00693 else if (facts->getOurSide() == S_RIGHT)
00694 parsedPlayMode = PM_THEIR_FOUL_BALLOUT;
00695 }
00696
00697 void Sensors::doBuildFoulBallOutRightPlayMode() {
00698 RS_LOG ( LA_SENSORS, "BuildFoulBallOutRightPlayMode" );
00699 if (facts->getOurSide() == S_RIGHT)
00700 parsedPlayMode = PM_OUR_FOUL_BALLOUT;
00701 else if (facts->getOurSide() == S_LEFT)
00702 parsedPlayMode = PM_THEIR_FOUL_BALLOUT;
00703 }
00704
00705 void Sensors::doBuildBackPassLeftPlayMode() {
00706 RS_LOG ( LA_SENSORS, "BuildBackPassLeftPlayMode" );
00707 if (facts->getOurSide() == S_LEFT)
00708 parsedPlayMode = PM_OUR_FOUL_BACKPASS;
00709 else if (facts->getOurSide() == S_RIGHT)
00710 parsedPlayMode = PM_THEIR_FOUL_BACKPASS;
00711 }
00712
00713 void Sensors::doBuildBackPassRightPlayMode() {
00714 RS_LOG ( LA_SENSORS, "BuildBackPassRightPlayMode" );
00715 if (facts->getOurSide() == S_RIGHT)
00716 parsedPlayMode = PM_OUR_FOUL_BACKPASS;
00717 else if (facts->getOurSide() == S_LEFT)
00718 parsedPlayMode = PM_THEIR_FOUL_BACKPASS;
00719 }
00720
00721 void Sensors::doBuildFreeKickFaultLeftPlayMode() {
00722 RS_LOG ( LA_SENSORS, "BuildFreeKickFaultLeftPlayMode" );
00723 if (facts->getOurSide() == S_LEFT)
00724 parsedPlayMode = PM_OUR_FOUL_FREEKICKFAULT;
00725 else if (facts->getOurSide() == S_RIGHT)
00726 parsedPlayMode = PM_THEIR_FOUL_FREEKICKFAULT;
00727 }
00728
00729 void Sensors::doBuildFreeKickFaultRightPlayMode() {
00730 RS_LOG ( LA_SENSORS, "BuildFreeKickFaultRightPlayMode" );
00731 if (facts->getOurSide() == S_RIGHT)
00732 parsedPlayMode = PM_OUR_FOUL_FREEKICKFAULT;
00733 else if (facts->getOurSide() == S_LEFT)
00734 parsedPlayMode = PM_THEIR_FOUL_FREEKICKFAULT;
00735 }
00736
00737 void Sensors::doBuildCatchFaultLeftPlayMode() {
00738 RS_LOG ( LA_SENSORS, "BuildCatchFaultLeftPlayMode" );
00739 if (facts->getOurSide() == S_LEFT)
00740 parsedPlayMode = PM_OUR_FOUL_CATCHFAULT;
00741 else if (facts->getOurSide() == S_RIGHT)
00742 parsedPlayMode = PM_THEIR_FOUL_CATCHFAULT;
00743 }
00744
00745 void Sensors::doBuildCatchFaultRightPlayMode() {
00746 RS_LOG ( LA_SENSORS, "BuildCatchFaultRigthPlayMode" );
00747 if (facts->getOurSide() == S_RIGHT)
00748 parsedPlayMode = PM_OUR_FOUL_CATCHFAULT;
00749 else if (facts->getOurSide() == S_RIGHT)
00750 parsedPlayMode = PM_THEIR_FOUL_CATCHFAULT;
00751 }
00752
00753 void Sensors::doBuildIndirectFreeKickLeftPlayMode() {
00754 RS_LOG ( LA_SENSORS, "BuildIndirectFreeKickLeftPlayMode" );
00755 if (facts->getOurSide() == S_LEFT)
00756 parsedPlayMode = PM_OUR_INDIRECT_FREE_KICK;
00757 else if (facts->getOurSide() == S_RIGHT)
00758 parsedPlayMode = PM_THEIR_INDIRECT_FREE_KICK;
00759 }
00760
00761 void Sensors::doBuildIndirectFreeKickRightPlayMode() {
00762 RS_LOG ( LA_SENSORS, "BuildIndirectFreeKickRigthPlayMode" );
00763 if (facts->getOurSide() == S_RIGHT)
00764 parsedPlayMode = PM_OUR_INDIRECT_FREE_KICK;
00765 else if (facts->getOurSide() == S_RIGHT)
00766 parsedPlayMode = PM_THEIR_INDIRECT_FREE_KICK;
00767 }
00768
00769 void Sensors::doBuildPenaltySetupLeftPlayMode() {
00770 RS_LOG ( LA_SENSORS, "BuildPenaltySetupLeftPlayMode" );
00771 if (facts->getOurSide() == S_LEFT)
00772 parsedPlayMode = PM_OUR_PENALTY_SETUP;
00773 else if (facts->getOurSide() == S_RIGHT)
00774 parsedPlayMode = PM_THEIR_PENALTY_SETUP;
00775 }
00776
00777 void Sensors::doBuildPenaltySetupRightPlayMode() {
00778 RS_LOG ( LA_SENSORS, "BuildPenaltySetupRightPlayMode" );
00779 if (facts->getOurSide() == S_RIGHT)
00780 parsedPlayMode = PM_OUR_PENALTY_SETUP;
00781 else if (facts->getOurSide() == S_LEFT)
00782 parsedPlayMode = PM_THEIR_PENALTY_SETUP;
00783 }
00784
00785 void Sensors::doBuildPenaltyReadyLeftPlayMode() {
00786 RS_LOG ( LA_SENSORS, "BuildPenaltyReadyLeftPlayMode" );
00787 if (facts->getOurSide() == S_LEFT)
00788 parsedPlayMode = PM_OUR_PENALTY_READY;
00789 else if (facts->getOurSide() == S_RIGHT)
00790 parsedPlayMode = PM_THEIR_PENALTY_READY;
00791 }
00792
00793 void Sensors::doBuildPenaltyReadyRightPlayMode() {
00794 RS_LOG ( LA_SENSORS, "BuildPenaltyReadyRightPlayMode" );
00795 if (facts->getOurSide() == S_RIGHT)
00796 parsedPlayMode = PM_OUR_PENALTY_READY;
00797 else if (facts->getOurSide() == S_LEFT)
00798 parsedPlayMode = PM_THEIR_PENALTY_READY;
00799 }
00800
00801 void Sensors::doBuildPenaltyTakenLeftPlayMode() {
00802 RS_LOG ( LA_SENSORS, "BuildPenaltyTakenLeftPlayMode" );
00803 if (facts->getOurSide() == S_LEFT)
00804 parsedPlayMode = PM_OUR_PENALTY_TAKEN;
00805 else if (facts->getOurSide() == S_RIGHT)
00806 parsedPlayMode = PM_THEIR_PENALTY_TAKEN;
00807 }
00808
00809 void Sensors::doBuildPenaltyTakenRightPlayMode() {
00810 RS_LOG ( LA_SENSORS, "BuildPenaltyTakenRightPlayMode" );
00811 if (facts->getOurSide() == S_RIGHT)
00812 parsedPlayMode = PM_OUR_PENALTY_TAKEN;
00813 else if (facts->getOurSide() == S_LEFT)
00814 parsedPlayMode = PM_THEIR_PENALTY_TAKEN;
00815 }
00816
00817 void Sensors::doBuildPenaltyMissLeftPlayMode() {
00818 RS_LOG ( LA_SENSORS, "BuildPenaltyMissLeftPlayMode" );
00819 if (facts->getOurSide() == S_LEFT)
00820 parsedPlayMode = PM_OUR_PENALTY_MISS;
00821 else if (facts->getOurSide() == S_RIGHT)
00822 parsedPlayMode = PM_THEIR_PENALTY_MISS;
00823 }
00824
00825 void Sensors::doBuildPenaltyMissRightPlayMode() {
00826 RS_LOG ( LA_SENSORS, "BuildPenaltyMissRightPlayMode" );
00827 if (facts->getOurSide() == S_RIGHT)
00828 parsedPlayMode = PM_OUR_PENALTY_MISS;
00829 else if (facts->getOurSide() == S_LEFT)
00830 parsedPlayMode = PM_THEIR_PENALTY_MISS;
00831 }
00832
00833 void Sensors::doBuildPenaltyScoreLeftPlayMode() {
00834 RS_LOG ( LA_SENSORS, "BuildPenaltyScoreLeftPlayMode" );
00835 if (facts->getOurSide() == S_LEFT)
00836 parsedPlayMode = PM_OUR_PENALTY_SCORE;
00837 else if (facts->getOurSide() == S_RIGHT)
00838 parsedPlayMode = PM_THEIR_PENALTY_SCORE;
00839 }
00840
00841 void Sensors::doBuildPenaltyScoreRightPlayMode() {
00842 RS_LOG ( LA_SENSORS, "BuildPenaltyScoreRightPlayMode" );
00843 if (facts->getOurSide() == S_RIGHT)
00844 parsedPlayMode = PM_OUR_PENALTY_SCORE;
00845 else if (facts->getOurSide() == S_LEFT)
00846 parsedPlayMode = PM_THEIR_PENALTY_SCORE;
00847 }
00848
00849 void Sensors::doBuildPenaltyOnFieldLeftPlayMode() {
00850 RS_LOG ( LA_SENSORS, "BuildPenaltyOnFieldLeftPlayMode" );
00851 if (facts->getOurSide() == S_LEFT)
00852 parsedPlayMode = PM_OUR_PENALTY_ONFIELD;
00853 else if (facts->getOurSide() == S_RIGHT)
00854 parsedPlayMode = PM_THEIR_PENALTY_ONFIELD;
00855 }
00856
00857 void Sensors::doBuildPenaltyOnFieldRightPlayMode() {
00858 RS_LOG ( LA_SENSORS, "BuildPenaltyOnFieldRightPlayMode" );
00859 if (facts->getOurSide() == S_RIGHT)
00860 parsedPlayMode = PM_OUR_PENALTY_ONFIELD;
00861 else if (facts->getOurSide() == S_LEFT)
00862 parsedPlayMode = PM_THEIR_PENALTY_ONFIELD;
00863 }
00864
00865 void Sensors::doBuildPenaltyFoulLeftPlayMode() {
00866 RS_LOG ( LA_SENSORS, "BuildPenaltyFoulLeftPlayMode" );
00867 if (facts->getOurSide() == S_LEFT)
00868 parsedPlayMode = PM_OUR_PENALTY_FOUL;
00869 else if (facts->getOurSide() == S_RIGHT)
00870 parsedPlayMode = PM_THEIR_PENALTY_FOUL;
00871 }
00872
00873 void Sensors::doBuildPenaltyFoulRightPlayMode() {
00874 RS_LOG ( LA_SENSORS, "BuildPenaltyFoulRightPlayMode" );
00875 if (facts->getOurSide() == S_RIGHT)
00876 parsedPlayMode = PM_OUR_PENALTY_FOUL;
00877 else if (facts->getOurSide() == S_LEFT)
00878 parsedPlayMode = PM_THEIR_PENALTY_FOUL;
00879 }
00880
00881 void Sensors::doBuildPenaltyWinnerLeftPlayMode() {
00882 RS_LOG ( LA_SENSORS, "BuildPenaltyWinnerLeftPlayMode" );
00883 if (facts->getOurSide() == S_LEFT)
00884 parsedPlayMode = PM_OUR_PENALTY_WINNER;
00885 else if (facts->getOurSide() == S_RIGHT)
00886 parsedPlayMode = PM_THEIR_PENALTY_WINNER;
00887 }
00888
00889 void Sensors::doBuildPenaltyWinnerRightPlayMode() {
00890 RS_LOG ( LA_SENSORS, "BuildPenaltyWinnerRightPlayMode" );
00891 if (facts->getOurSide() == S_RIGHT)
00892 parsedPlayMode = PM_OUR_PENALTY_WINNER;
00893 else if (facts->getOurSide() == S_LEFT)
00894 parsedPlayMode = PM_THEIR_PENALTY_WINNER;
00895 }
00896
00897 void Sensors::doBuildPenaltyDrawPlayMode() {
00898 RS_LOG ( LA_SENSORS, "BuildPenaltyDraw" );
00899 parsedPlayMode = PM_PENALTY_DRAW;
00900 }
00901
00902
00903
00904
00905
00906 void Sensors::doBuildLeftSide() {
00907 RS_LOG ( LA_SENSORS, "BuildLeftSide" );
00908 parsedSide = S_LEFT;
00909 }
00910
00911 void Sensors::doBuildRightSide() {
00912 RS_LOG ( LA_SENSORS, "BuildRightSide" );
00913 parsedSide = S_RIGHT;
00914 }
00915
00916 void Sensors::doBuildOppSide() {
00917 RS_LOG ( LA_SENSORS, "BuildOppSide" );
00918 if (facts->getOurSide() == S_LEFT)
00919 parsedSide = S_RIGHT;
00920 else if (facts->getOurSide() == S_RIGHT)
00921 parsedSide = S_LEFT;
00922 }
00923
00924 void Sensors::doBuildOurSide() {
00925 RS_LOG ( LA_SENSORS, "BuildOurSide" );
00926 parsedSide = facts->getOurSide();
00927 }
00928
00929 void Sensors::doBuildNeutralSide() {
00930 RS_LOG ( LA_SENSORS, "BuildNeutralSide" );
00931 parsedSide = S_NEUTRAL;
00932 }
00933
00934 void Sensors::doBuildSenseBody( int time, double stamina, double effort,
00935 double speed_mag, double speed_head,
00936 double head_angle, int kick_count,
00937 int dash_count, int turn_count,
00938 int say_count, int turn_neck_count,
00939 int catch_count, int move_count,
00940 int chg_view_count ) {
00941 RS_LOG ( LA_SENSORS, "BuildSenseBody: " << time << ", " << stamina
00942 << ", " << effort << ", " << speed_mag << ", " << speed_head
00943 << ", " << head_angle << ", " << kick_count << ", " << dash_count
00944 << ", " << turn_count << ", " << say_count << ", "
00945 << turn_neck_count << ", " << catch_count << ", " << move_count
00946 << ", " << chg_view_count);
00947 lastSensorType = SENSOR_SENSE;
00948
00949
00950
00951
00952 static UInt change_views = 0;
00953 static UInt says = 0;
00954 static UInt turn_necks = 0;
00955 static UInt attentionTos = 0;
00956 static UInt pointTos = 0;
00957
00958
00959 static UInt catches = 0;
00960 static UInt dashes = 0;
00961 static UInt kicks = 0;
00962 static UInt moves = 0;
00963 static UInt turns = 0;
00964 static UInt tackles = 0;
00965
00966 Int lastcycle_change_views = chg_view_count - change_views;
00967 Int lastcycle_says = say_count - says;
00968 Int lastcycle_turn_necks = turn_neck_count - turn_necks;
00969 Int lastcycle_attentionTos = parsedFocusState.focusCount - attentionTos;
00970 Int lastcycle_pointTos = parsedArmState.count - pointTos;
00971
00972 Int lastcycle_catches = catch_count - catches;
00973 Int lastcycle_dashes = dash_count - dashes;
00974 Int lastcycle_kicks = kick_count - kicks;
00975 Int lastcycle_moves = move_count - moves;
00976 Int lastcycle_turns = turn_count - turns;
00977 Int lastcycle_tackles = parsedTackleState.tackleCount - tackles;
00978
00979 change_views = chg_view_count;
00980 says = say_count;
00981 turn_necks = turn_neck_count;
00982 attentionTos = parsedFocusState.focusCount;
00983 pointTos = parsedArmState.count;
00984
00985 catches = catch_count;
00986 dashes = dash_count;
00987 kicks = kick_count;
00988 moves = move_count;
00989 turns = turn_count;
00990 tackles = parsedTackleState.tackleCount;
00991
00992 while (!commandQueue.empty()) {
00993 switch (commandQueue.front()) {
00994 case CMD_ChangeView:
00995 --lastcycle_change_views;
00996 break;
00997 case CMD_TurnNeck:
00998 --lastcycle_turn_necks;
00999 break;
01000 case CMD_Say:
01001 --lastcycle_says;
01002 break;
01003 case CMD_AttentionTo:
01004 --lastcycle_attentionTos;
01005 break;
01006 case CMD_PointTo:
01007 --lastcycle_pointTos;
01008 break;
01009 case CMD_Catch:
01010 --lastcycle_catches;
01011 break;
01012 case CMD_Dash:
01013 --lastcycle_dashes;
01014 break;
01015 case CMD_Kick:
01016 --lastcycle_kicks;
01017 break;
01018 case CMD_Move:
01019 --lastcycle_moves;
01020 break;
01021 case CMD_Turn:
01022 --lastcycle_turns;
01023 break;
01024 case CMD_Tackle:
01025 --lastcycle_tackles;
01026 break;
01027 default:
01028
01029 break;
01030 }
01031 commandQueue.pop();
01032 }
01033
01034 if ( lastcycle_catches < 0 )
01035 RS_WARNING("The server missed the last catch command. " + toString(currentTime));
01036 if ( lastcycle_dashes < 0 )
01037 RS_WARNING("The server missed the last dash command. " + toString(currentTime));
01038 if ( lastcycle_kicks < 0 )
01039 RS_WARNING("The server missed the last kick command. " + toString(currentTime));
01040 if ( lastcycle_moves < 0 )
01041 RS_WARNING("The server missed the last move command. " + toString(currentTime));
01042 if ( lastcycle_turns < 0 )
01043 RS_WARNING("The server missed the last turn command. " + toString(currentTime));
01044 if ( lastcycle_tackles < 0 )
01045 RS_WARNING("The server missed the last tackle command. " + toString(currentTime));
01046
01047 if ( lastcycle_change_views < 0 )
01048 RS_WARNING("The server missed the last change view command. " + toString(currentTime));
01049 if ( lastcycle_turn_necks < 0 )
01050 RS_WARNING("The server missed the last turn neck command. " + toString(currentTime));
01051 if ( lastcycle_says < 0 )
01052 RS_WARNING("The server missed the last say command. " + toString(currentTime));
01053 if ( lastcycle_attentionTos < 0 )
01054 RS_WARNING("The server missed the last attentionTo command. " + toString(currentTime));
01055 if ( lastcycle_pointTos < 0 )
01056 RS_WARNING("The server missed the last pointTo command. " + toString(currentTime));
01057
01058 if ( lastcycle_catches < 0 ||
01059 lastcycle_dashes < 0 ||
01060 lastcycle_kicks < 0 ||
01061 lastcycle_moves < 0 ||
01062 lastcycle_turns < 0 ||
01063 lastcycle_tackles < 0 ||
01064 lastcycle_change_views < 0 ||
01065 lastcycle_turn_necks < 0 ||
01066 lastcycle_says < 0 ||
01067 lastcycle_attentionTos < 0 ||
01068 lastcycle_pointTos < 0)
01069 theController->delayedActions();
01070
01071 if ( lastcycle_catches > 0 ||
01072 lastcycle_dashes > 0 ||
01073 lastcycle_kicks > 0 ||
01074 lastcycle_moves > 0 ||
01075 lastcycle_turns > 0 ||
01076 lastcycle_tackles > 0 ||
01077 lastcycle_change_views > 0 ||
01078 lastcycle_turn_necks > 0 ||
01079 lastcycle_says > 0 ||
01080 lastcycle_attentionTos > 0 ||
01081 lastcycle_pointTos > 0)
01082 theController->missingActions();
01083
01084 updateTime(time);
01085 parsedAgent = ServerAgentObject
01086 (parsedViewQuality,
01087 parsedViewWidth,
01088 stamina,
01089 effort,
01090 FloatUE(ERROR_QUANTIZE, speed_mag, 0.01),
01091 AngleDegUE(ERROR_QUANTIZE, speed_head, facts->SP_angle_qstep),
01092 AngleDegUE(ERROR_QUANTIZE, head_angle, facts->SP_angle_qstep),
01093 catch_count,
01094 chg_view_count,
01095 dash_count,
01096 kick_count,
01097 move_count,
01098 say_count,
01099 turn_count,
01100 turn_neck_count,
01101 parsedArmState,
01102 parsedFocusState,
01103 parsedTackleState);
01104 theSensorInterface->sense(parsedAgent);
01105 parsedViewQuality = VQ_UNKNOWN;
01106 parsedViewWidth = VW_UNKNOWN;
01107 parsedArmState = ServerArmState();
01108 parsedFocusState = ServerFocusState();
01109 parsedTackleState = ServerTackleState();
01110 }
01111
01112 void Sensors::doBuildArmState(int moveable_in, int expires_in,
01113 double target_x, double target_y,
01114 int count) {
01115 RS_LOG ( LA_SENSORS, "BuildArmState " << moveable_in << ", "
01116 << expires_in << ", " << target_x << ", " << target_y
01117 << ", " << count);
01118 parsedArmState = ServerArmState(moveable_in, expires_in,
01119 Point(target_x, target_y),
01120 count);
01121 }
01122
01123 void Sensors::doBuildFocusState(int count) {
01124 RS_LOG ( LA_SENSORS, "BuildFocusState " << count);
01125 parsedFocusState = ServerFocusState(count);
01126 }
01127
01128 void Sensors::doBuildFocusState(int unum, int count) {
01129 RS_LOG ( LA_SENSORS, "BuildFocusState " << unum << ", " << count);
01130 parsedFocusState = ServerFocusState(count, parsedSide, unum);
01131 parsedSide = S_UNKNOWN;
01132 }
01133
01134 void Sensors::doBuildTackleState(int expires_in, int count) {
01135 RS_LOG ( LA_SENSORS, "BuildTackleState " << expires_in << ", " << count);
01136 parsedTackleState = ServerTackleState(expires_in, count);
01137 }
01138
01139
01140
01141
01142
01143 void Sensors::doBuildViewMode() {
01144 RS_LOG ( LA_SENSORS, "BuildViewMode" );
01145 }
01146
01147 void Sensors::doBuildViewQualityHigh() {
01148 RS_LOG ( LA_SENSORS, "BuildViewQualityHigh" );
01149 parsedViewQuality = VQ_HIGH;
01150 }
01151
01152 void Sensors::doBuildViewQualityLow() {
01153 RS_LOG ( LA_SENSORS, "BuildViewQualityLow" );
01154 parsedViewQuality = VQ_LOW;
01155 }
01156
01157 void Sensors::doBuildViewWidthNarrow() {
01158 RS_LOG ( LA_SENSORS, "BuildViewWidthNarrow" );
01159 parsedViewWidth = VW_NARROW;
01160 }
01161
01162 void Sensors::doBuildViewWidthNormal() {
01163 RS_LOG ( LA_SENSORS, "BuildViewWidthNormal" );
01164 parsedViewWidth = VW_NORMAL;
01165 }
01166
01167 void Sensors::doBuildViewWidthWide() {
01168 RS_LOG ( LA_SENSORS, "BuildViewWidthWide" );
01169 parsedViewWidth = VW_WIDE;
01170 }
01171
01172
01173
01174
01175
01176 void Sensors::doBuildParam(const std::string &name, int value) {
01177 RS_LOG ( LA_SENSORS, "BuildParam " << name << ", " << value);
01178 facts->setOption(name, value);
01179 }
01180
01181 void Sensors::doBuildParam(const std::string &name, double value) {
01182 RS_LOG ( LA_SENSORS, "BuildParam " << name << ", " << value);
01183 facts->setOption(name, value);
01184 }
01185
01186 void Sensors::doBuildParam(const std::string &name, const std::string &value) {
01187 RS_LOG ( LA_SENSORS, "BuildParam " << name << ", " << value);
01188 facts->setOption(name, value);
01189 }
01190
01191 void Sensors::doBuildServerParam() {
01192 RS_LOG ( LA_SENSORS, "BuildServerParam");
01193 facts->serverParamsInitialized();
01194 lastSensorType = SENSOR_PARAM;
01195 }
01196
01197 void Sensors::doBuildPlayerParam() {
01198 RS_LOG ( LA_SENSORS, "BuildPlayerParam");
01199 facts->playerParamsInitialized();
01200 lastSensorType = SENSOR_PARAM;
01201 }
01202
01203 void Sensors::doBuildPlayerType() {
01204 RS_LOG ( LA_SENSORS, "BuildPlayerType");
01205 facts->playerTypeComplete();
01206 lastSensorType = SENSOR_PARAM;
01207 }
01208
01209
01210
01211
01212
01213 void Sensors::doBuildVisual( int time ) {
01214 RS_LOG ( LA_SENSORS, "BuildVisual: " << time);
01215 lastSensorType = SENSOR_VISUAL;
01216 updateTime(time);
01217 theSensorInterface->see(parsedLines,
01218 parsedMarkers,
01219 parsedPlayers,
01220 parsedBall);
01221 parsedLines.clear();
01222 parsedMarkers.clear();
01223 parsedPlayers.clear();
01224 parsedBall = ServerBallObject();
01225 parsedAgent = ServerAgentObject();
01226 }
01227
01228 void Sensors::doBuildLine( double dist, double dir ) {
01229 RS_LOG ( LA_SENSORS, "BuildLine: " << dist << ", " << dir);
01230 parsedLines.push_back
01231 (ServerLineObject (locationToLine(),
01232 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01233 FloatUE(ERROR_QUANTIZE, dist, facts->SP_land_qstep)));
01234 parsedLocations.clear();
01235 }
01236
01237 void Sensors::doBuildLine( double dir ) {
01238 RS_LOG ( LA_SENSORS, "BuildLine: " << dir);
01239 parsedLines.push_back
01240 (ServerLineObject (locationToLine(),
01241 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep)));
01242 parsedLocations.clear();
01243 }
01244
01245
01246
01247 void Sensors::doBuildFlag( double dist, double dir,
01248 double dist_chg, double dir_chg ) {
01249 RS_LOG ( LA_SENSORS, "BuildFlag: " << dist
01250 << ", " << dir << ", " << dist_chg << ", " << dir_chg);
01251 parsedMarkers.push_back
01252 (ServerMarkerObject
01253 (locationToMarker(),
01254 false,
01255 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01256 FloatUE(ERROR_QUANTIZE, dist, facts->SP_land_qstep),
01257 FloatUE(ERROR_DISTCHANGE, dist_chg, facts->SP_dist_qstep,
01258 dist, facts->CP_dist_change_qstep),
01259 AngleDegUE(ERROR_QUANTIZE, dir_chg, facts->CP_dir_change_qstep)));
01260 parsedLocations.clear();
01261 parsedFlagOffset = UIntUnknown();
01262 }
01263
01264 void Sensors::doBuildFlag( bool close, double dist, double dir ) {
01265 RS_LOG ( LA_SENSORS, "BuildFlag: " << close << ", " << dist
01266 << ", " << dir);
01267 if (!close) {
01268 parsedMarkers.push_back
01269 (ServerMarkerObject
01270 (locationToMarker(),
01271 close,
01272 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01273 FloatUE(ERROR_QUANTIZE, dist, facts->SP_land_qstep)));
01274 parsedLocations.clear();
01275 parsedFlagOffset = UIntUnknown();
01276 }
01277 }
01278
01279 void Sensors::doBuildFlag( bool close, double dir ) {
01280 RS_LOG ( LA_SENSORS, "BuildFlag: " << close << ", " << dir);
01281 if (!close) {
01282 parsedMarkers.push_back
01283 (ServerMarkerObject
01284 (locationToMarker(),
01285 close,
01286 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep)));
01287 parsedLocations.clear();
01288 parsedFlagOffset = UIntUnknown();
01289 }
01290 }
01291
01292 void Sensors::doBuildGoal( double dist, double dir,
01293 double dist_chg, double dir_chg ) {
01294 RS_LOG ( LA_SENSORS, "BuildGoal:" << dist
01295 << ", " << dir << ", " << dist_chg << ", " << dir_chg);
01296 doBuildFlag( dist, dir, dist_chg, dir_chg);
01297 }
01298
01299 void Sensors::doBuildGoal( bool close, double dist, double dir ) {
01300 RS_LOG ( LA_SENSORS, "BuildGoal: " << close << ", " << dist
01301 << ", " << dir);
01302 if (!close)
01303 doBuildFlag( close, dist, dir);
01304 }
01305
01306 void Sensors::doBuildGoal( bool close, double dir ) {
01307 RS_LOG ( LA_SENSORS, "BuildGoal: " << close << ", " << dir );
01308 if (!close)
01309 doBuildFlag( close, dir);
01310 }
01311
01312 void Sensors::doBuildPlayerVisBall( double dist, double dir,
01313 double dist_chg, double dir_chg ) {
01314 RS_LOG ( LA_SENSORS, "BuildBall: " << dist
01315 << ", " << dir << ", " << dist_chg << ", " << dir_chg);
01316 parsedBall =
01317 ServerBallObject
01318 (false,
01319 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01320 FloatUE(ERROR_QUANTIZE, dist, facts->SP_dist_qstep),
01321 FloatUE(ERROR_DISTCHANGE, dist_chg, facts->SP_dist_qstep,
01322 dist, facts->CP_dist_change_qstep),
01323 AngleDegUE(ERROR_QUANTIZE, dir_chg, facts->CP_dir_change_qstep));
01324 }
01325
01326 void Sensors::doBuildBall( bool close, double dist, double dir ) {
01327 RS_LOG ( LA_SENSORS, "BuildBall: " << close << ", " << dist
01328 << ", " << dir);
01329 parsedBall =
01330 ServerBallObject(close,
01331 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01332 FloatUE(ERROR_QUANTIZE, dist, facts->SP_dist_qstep));
01333 }
01334
01335 void Sensors::doBuildBall( bool close, double dir ) {
01336 RS_LOG ( LA_SENSORS, "BuildBall:" << ", " << close << ", " << dir);
01337 parsedBall =
01338 ServerBallObject(close,
01339 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep));
01340 }
01341
01342
01343
01344
01345 void Sensors::doBuildPlayer( double dist, double dir,
01346 double dist_chg, double dir_chg,
01347 double orientation, double head_orientation,
01348 double point_dir, bool tackling) {
01349 RS_LOG ( LA_SENSORS, "BuildPlayer: " << dist
01350 << ", " << dir << ", " << dist_chg << ", " << dir_chg
01351 << ", " << orientation << ", " << head_orientation
01352 << ", " << point_dir << ", " << tackling);
01353 parsedPlayers.push_back
01354 (ServerPlayerObject
01355 (false,
01356 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01357 parsedGoalie,
01358 parsedTeam,
01359 parsedUniformNumber,
01360 FloatUE(ERROR_QUANTIZE, dist, facts->SP_dist_qstep),
01361 FloatUE(ERROR_DISTCHANGE, dist_chg, facts->SP_dist_qstep,
01362 dist, facts->CP_dist_change_qstep),
01363 AngleDegUE(ERROR_QUANTIZE, dir_chg, facts->CP_dir_change_qstep),
01364 AngleDegUE(ERROR_QUANTIZE, orientation, facts->SP_angle_qstep),
01365 AngleDegUE(ERROR_QUANTIZE, head_orientation, facts->SP_angle_qstep),
01366 tackling,
01367 AngleDegUE(point_dir)));
01368 parsedTeam = T_UNKNOWN;
01369 parsedUniformNumber = UIntUnknown();
01370 parsedGoalie = false;
01371 }
01372
01373
01374
01375 void Sensors::doBuildPlayer( double dist, double dir,
01376 double point_dir, bool tackling) {
01377 RS_LOG ( LA_SENSORS, "BuildPlayer: " << ", " << dist
01378 << ", " << dir << ", " << point_dir << ", " << tackling);
01379 parsedPlayers.push_back
01380 (ServerPlayerObject
01381 (false,
01382 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01383 parsedGoalie,
01384 parsedTeam,
01385 parsedUniformNumber,
01386 FloatUE(ERROR_QUANTIZE, dist, facts->SP_dist_qstep),
01387 FloatUE(),
01388 AngleDegUE(),
01389 AngleDegUE(),
01390 AngleDegUE(),
01391 tackling,
01392 AngleDegUE(point_dir)));
01393 parsedTeam = T_UNKNOWN;
01394 parsedUniformNumber = UIntUnknown();
01395 parsedGoalie = false;
01396 }
01397
01398
01399
01400
01401
01402 void Sensors::doBuildPlayer( double dist, double dir,
01403 double dist_chg, double dir_chg,
01404 double orientation, double head_orientation,
01405 bool tackling) {
01406 RS_LOG ( LA_SENSORS, "BuildPlayer: " << dist
01407 << ", " << dir << ", " << dist_chg << ", " << dir_chg
01408 << ", " << orientation << ", " << head_orientation
01409 << ", " << tackling);
01410 parsedPlayers.push_back
01411 (ServerPlayerObject
01412 (false,
01413 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01414 parsedGoalie,
01415 parsedTeam,
01416 parsedUniformNumber,
01417 FloatUE(ERROR_QUANTIZE, dist, facts->SP_dist_qstep),
01418 FloatUE(ERROR_DISTCHANGE, dist_chg, facts->SP_dist_qstep,
01419 dist, facts->CP_dist_change_qstep),
01420 AngleDegUE(ERROR_QUANTIZE, dir_chg, facts->CP_dir_change_qstep),
01421 AngleDegUE(ERROR_QUANTIZE, orientation, facts->SP_angle_qstep),
01422 AngleDegUE(ERROR_QUANTIZE, head_orientation, facts->SP_angle_qstep),
01423 tackling));
01424 parsedTeam = T_UNKNOWN;
01425 parsedUniformNumber = UIntUnknown();
01426 parsedGoalie = false;
01427 }
01428
01429
01430 void Sensors::doBuildPlayer( bool close,
01431 double dist, double dir,
01432 bool tackling) {
01433 RS_LOG ( LA_SENSORS, "BuildPlayer: " << close << ", " << dist
01434 << ", " << dir << ", " << tackling);
01435 parsedPlayers.push_back
01436 (ServerPlayerObject
01437 (close,
01438 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01439 parsedGoalie,
01440 parsedTeam,
01441 parsedUniformNumber,
01442 FloatUE(ERROR_QUANTIZE, dist, facts->SP_dist_qstep),
01443 FloatUE(),
01444 AngleDegUE(),
01445 AngleDegUE(),
01446 AngleDegUE(),
01447 tackling));
01448
01449 parsedTeam = T_UNKNOWN;
01450 parsedUniformNumber = UIntUnknown();
01451 parsedGoalie = false;
01452 }
01453
01454
01455 void Sensors::doBuildPlayer( bool close, double dir ) {
01456 RS_LOG ( LA_SENSORS, "BuildPlayer:" << close << ", " << dir);
01457 parsedPlayers.push_back
01458 (ServerPlayerObject
01459 (close,
01460 AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep),
01461 parsedGoalie,
01462 parsedTeam,
01463 parsedUniformNumber));
01464 parsedTeam = T_UNKNOWN;
01465 parsedUniformNumber = UIntUnknown();
01466 parsedGoalie = false;
01467 }
01468
01469
01470
01471
01472
01473
01474 void Sensors::doBuildGlobalVisual(int time) {
01475 RS_LOG ( LA_SENSORS, "BuildGlobalVisual: " << time);
01476 lastSensorType = SENSOR_COACH_VISUAL;
01477 updateTime(time);
01478 theSensorInterface->seeGlobal(parsedCoachPlayers,
01479 parsedCoachBall);
01480 parsedCoachPlayers.clear();
01481 parsedCoachBall = CoachBallObject();
01482 }
01483
01484 void Sensors::doBuildGlobalGoal(double x, double y) {
01485 RS_LOG ( LA_SENSORS, "BuildGlobalGoal: " << x << ", " << y);
01486 }
01487
01488 void Sensors::doBuildGlobalBall(double x, double y, double dx, double dy) {
01489 RS_LOG ( LA_SENSORS, "BuildGlobalBall: " << x << ", " << y
01490 << ", " << dx << ", " << dy);
01491 parsedCoachBall = CoachBallObject(x, y, dx, dy);
01492 }
01493
01494 void Sensors::doBuildGlobalPlayer(double x, double y, double dx, double dy,
01495 double bodydir, double neckdir, bool tackle) {
01496 RS_LOG ( LA_SENSORS, "BuildGlobalPlayer: " << x << ", " << y
01497 << ", " << dx << ", " << dy << ", " << bodydir << ", "
01498 << neckdir << ", " << tackle);
01499 parsedCoachPlayers.push_back
01500 (CoachPlayerObject
01501 (x, y, dx, dy,
01502 parsedTeam,
01503 parsedUniformNumber.getValue(),
01504 parsedGoalie,
01505 bodydir,
01506 neckdir,
01507 AngleDegUnknown(),
01508 tackle));
01509 parsedTeam = T_UNKNOWN;
01510 parsedUniformNumber = UIntUnknown();
01511 parsedGoalie = false;
01512 }
01513
01514 void Sensors::doBuildGlobalPlayer(double x, double y, double dx, double dy,
01515 double bodydir, double neckdir,
01516 double point_dir, bool tackle) {
01517 RS_LOG ( LA_SENSORS, "BuildGlobalPlayer: " << x << ", " << y
01518 << ", " << dx << ", " << dy << ", " << bodydir << ", "
01519 << neckdir << ", " << point_dir << ", " << tackle);
01520 parsedCoachPlayers.push_back
01521 (CoachPlayerObject
01522 (x, y, dx, dy,
01523 parsedTeam,
01524 parsedUniformNumber.getValue(),
01525 parsedGoalie,
01526 bodydir,
01527 neckdir,
01528 point_dir,
01529 tackle));
01530 parsedTeam = T_UNKNOWN;
01531 parsedUniformNumber = UIntUnknown();
01532 parsedGoalie = false;
01533 }
01534
01535
01536
01537
01538
01539 void Sensors::doBuildFlagOffset( int offset ) {
01540 RS_LOG ( LA_SENSORS, "BuildFlagOffset" );
01541 parsedFlagOffset = offset;
01542 }
01543
01544 void Sensors::doBuildTopLocation() {
01545 RS_LOG ( LA_SENSORS, "BuildTopLocation" );
01546 parsedLocations.push_back(FL_TOP);
01547 }
01548
01549 void Sensors::doBuildBottomLocation() {
01550 RS_LOG ( LA_SENSORS, "BuildBottomLocation" );
01551 parsedLocations.push_back(FL_BOTTOM);
01552 }
01553
01554 void Sensors::doBuildLeftLocation() {
01555 RS_LOG ( LA_SENSORS, "BuildLeftLocation" );
01556 parsedLocations.push_back(FL_LEFT);
01557 }
01558
01559 void Sensors::doBuildRightLocation() {
01560 RS_LOG ( LA_SENSORS, "BuildRightLocation" );
01561 parsedLocations.push_back(FL_RIGHT);
01562 }
01563
01564 void Sensors::doBuildCenterLocation() {
01565 RS_LOG ( LA_SENSORS, "BuildCenterLocation" );
01566 parsedLocations.push_back(FL_CENTER);
01567 }
01568
01569 void Sensors::doBuildPenaltyLocation() {
01570 RS_LOG ( LA_SENSORS, "BuildPenaltyLocation" );
01571 parsedLocations.push_back(FL_PENALTY);
01572 }
01573
01574 void Sensors::doBuildGoalLocation() {
01575 RS_LOG ( LA_SENSORS, "BuildGoalLocation" );
01576 parsedLocations.push_back(FL_GOAL);
01577 }
01578
01579
01580
01581
01582
01583 void Sensors::doBuildInit( int unum ) {
01584 RS_LOG ( LA_SENSORS, "BuildInit: " << unum);
01585 theSensorInterface->hearReferee(parsedPlayMode);
01586 std::string agentSide;
01587 if (parsedSide == S_LEFT) {
01588 facts->setSides(S_LEFT, S_RIGHT);
01589 agentSide = "left";
01590 }
01591 else {
01592 facts->setSides(S_RIGHT, S_LEFT);
01593 agentSide = "right";
01594 }
01595 facts->setUniformNumber(unum);
01596 std::cerr << "-----------------------------------------------------------"
01597 << "-------------" << std::endl
01598 << "Connected player " << unum << " on team '"
01599 << facts->CP_team_name << "'" << std::endl
01600 << "It's playing on the " << agentSide << " side of the field."
01601 << std::endl << "----------------------------------------------"
01602 << "--------------------------" << std::endl;
01603
01604 parsedSide = S_UNKNOWN;
01605 parsedPlayMode = PM_UNKNOWN;
01606 lastSensorType = SENSOR_INIT;
01607 }
01608
01609 void Sensors::doBuildInit() {
01610 RS_LOG ( LA_SENSORS, "BuildInit" );
01611 RS_WARNING("This doBuildInit isn't implemented!");
01612 lastSensorType = SENSOR_UNKNOWN;
01613 }
01614
01615 void Sensors::doBuildCoachInit() {
01616 RS_LOG ( LA_SENSORS, "BuildCoachInit");
01617 if ( parsedSide == S_UNKNOWN ) {
01618
01619 facts->setSides(S_LEFT, S_RIGHT);
01620
01621 std::cerr << "-----------------------------------------------------------"
01622 << "-------------\n"
01623 << "Connected trainer.\n"
01624 << "----------------------------------------------"
01625 << "--------------------------" << std::endl;
01626 } else {
01627 std::string coachSide;
01628 if (parsedSide == S_LEFT) {
01629 facts->setSides(S_LEFT, S_RIGHT);
01630 coachSide = "left";
01631 } else {
01632 facts->setSides(S_RIGHT, S_LEFT);
01633 coachSide = "right";
01634 }
01635 std::cerr << "-----------------------------------------------------------"
01636 << "-------------\n"
01637 << "Connected coach on team '" << facts->CP_team_name
01638 << "'\n It's coaching the team on the " << coachSide
01639 << " side of the field.\n"
01640 << "----------------------------------------------"
01641 << "--------------------------" << std::endl;
01642 }
01643 parsedSide = S_UNKNOWN;
01644 parsedPlayMode = PM_UNKNOWN;
01645 lastSensorType = SENSOR_INIT;
01646 }
01647
01648
01649
01650
01651
01652 void Sensors::doBuildCoachAudio( int time, const std::string& msg ) {
01653 RS_LOG ( LA_SENSORS, "BuildCoachAudio: " << time << ", " << msg);
01654 lastSensorType = SENSOR_AURAL_COACH;
01655 updateTime(time);
01656 theSensorInterface->hearCoach(msg);
01657 parsedSide = S_UNKNOWN;
01658 }
01659
01660 void Sensors::doBuildRefAudio( int time ) {
01661 RS_LOG ( LA_SENSORS, "BuildRefAudio: " << time );
01662 lastSensorType = SENSOR_AURAL_REFEREE;
01663 updateTime(time);
01664 theSensorInterface->hearReferee(parsedPlayMode);
01665 parsedPlayMode = PM_UNKNOWN;
01666 }
01667
01668
01669 void Sensors::doBuildGoalRefAudio( int time, int score ) {
01670 RS_LOG ( LA_SENSORS, "BuildGoalRefAudio: " << time << ", " << score);
01671 lastSensorType = SENSOR_AURAL_REFEREE;
01672 updateTime(time);
01673 facts->setScore(parsedSide, score);
01674 if (parsedSide == facts->getOurSide())
01675 theSensorInterface->hearReferee(PM_OUR_GOAL);
01676 else
01677 theSensorInterface->hearReferee(PM_THEIR_GOAL);
01678 parsedSide = S_UNKNOWN;
01679 }
01680
01681 void Sensors::doBuildUnknownRefAudio( int time, const std::string& message ) {
01682 RS_LOG ( LA_SENSORS, "BuildUnknownRefAudio: " << time << ", " << message);
01683
01684
01685 lastSensorType = SENSOR_AURAL_REFEREE;
01686 updateTime(time);
01687 parsedSide = S_UNKNOWN;
01688 }
01689
01690
01691 void Sensors::doBuildPlayerAudio( int time, const std::string& msg ) {
01692 RS_LOG ( LA_SENSORS, "BuildPlayerAudio: " << time << ", " << msg);
01693 lastSensorType = SENSOR_COACH_AURAL;
01694 updateTime(time);
01695 theSensorInterface->hearPlayerAsCoach(parsedTeam, parsedUniformNumber, msg);
01696 parsedSide = S_UNKNOWN;
01697 }
01698
01699
01700 void Sensors::doBuildPlayerAudio( int time, double dir,
01701 const std::string& msg ) {
01702 RS_LOG ( LA_SENSORS, "BuildPlayerAudio: " << time << ", "
01703 << dir << ", " << msg);
01704 lastSensorType = SENSOR_AURAL_PLAYER;
01705 updateTime(time);
01706 theSensorInterface->hearOpponent
01707 (AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep), msg);
01708 parsedSide = S_UNKNOWN;
01709 }
01710
01711
01712 void Sensors::doBuildPlayerAudio( int time, double dir,
01713 int unum, const std::string& msg ) {
01714 RS_LOG ( LA_SENSORS, "BuildPlayerAudio: " << time << ", "
01715 << dir << ", " << unum << ", " << msg);
01716 lastSensorType = SENSOR_AURAL_PLAYER;
01717 updateTime(time);
01718 theSensorInterface->hearTeammate
01719 (unum, AngleDegUE(ERROR_QUANTIZE, dir, facts->SP_angle_qstep), msg);
01720 parsedSide = S_UNKNOWN;
01721 }
01722
01723
01724 void Sensors::doBuildPlayerAudio( int time, int unum ) {
01725 RS_LOG ( LA_SENSORS, "BuildPlayerAudio: " << time << ", " << unum);
01726 lastSensorType = SENSOR_AURAL_PLAYER;
01727 updateTime(time);
01728 theSensorInterface->hearAnotherTeammate(unum);
01729 parsedSide = S_UNKNOWN;
01730 }
01731
01732
01733 void Sensors::doBuildPlayerAudio( int time ) {
01734 RS_LOG ( LA_SENSORS, "BuildPlayerAudio: " << time);
01735 lastSensorType = SENSOR_AURAL_PLAYER;
01736 updateTime(time);
01737 theSensorInterface->hearAnotherOpponent();
01738 parsedSide = S_UNKNOWN;
01739 }
01740
01741 void Sensors::doBuildSelfAudio( int time, const std::string& msg ) {
01742 RS_LOG ( LA_SENSORS, "BuildSelfAudio: " << time << ", " << msg);
01743 lastSensorType = SENSOR_AURAL_SELF;
01744 updateTime(time);
01745 theSensorInterface->hearSelf(msg);
01746 parsedSide = S_UNKNOWN;
01747 }
01748
01749
01750
01751
01752
01753 void Sensors::doBuildSubstitution( int unum, int type ) {
01754 RS_LOG ( LA_SENSORS, "BuildSubstitution: " << unum << ", " << type);
01755 facts->setTeammateType(unum, type);
01756 lastSensorType = SENSOR_SUBSTITUTION;
01757 }
01758
01759 void Sensors::doBuildSubstitution( int unum ) {
01760 RS_LOG ( LA_SENSORS, "BuildSubstitution: " << unum);
01761 lastSensorType = SENSOR_SUBSTITUTION;
01762 }
01763
01764
01765
01766
01767
01768
01769
01770 void Sensors::doBuildClangPlayerVersionMsg() {
01771 RS_LOG ( LA_SENSORS, "BuildClangPlayerVersionMsg");
01772
01773 lastSensorType = SENSOR_OK;
01774 }
01775
01776 void Sensors::doBuildClangPlayerVersion(int min, int max) {
01777 RS_LOG ( LA_SENSORS, "BuildClangPlayerVersionMsg: " << min << ", " << max);
01778
01779 lastSensorType = SENSOR_OK;
01780 }
01781
01782
01783
01784
01785
01786 void Sensors::doBuildCantReconnect() {
01787 RS_LOG ( LA_SENSORS, "BuildCantReconnect" );
01788 RS_WARNING ( "BuildCantReconnect" );
01789 lastSensorType = SENSOR_ERROR;
01790 }
01791
01792 void Sensors::doBuildInitError() {
01793 RS_LOG ( LA_SENSORS, "BuildInitError" );
01794 RS_WARNING( "BuildInitError" );
01795 lastSensorType = SENSOR_ERROR;
01796 }
01797
01798 void Sensors::doBuildNoMoreTeamOrPlayerOrGoalieError() {
01799 RS_LOG ( LA_SENSORS, "BuildNoMoreTeamOrPlayerOrGoalieError" );
01800 RS_WARNING ( "BuildNoMoreTeamOrPlayerOrGoalieError" );
01801 lastSensorType = SENSOR_ERROR;
01802 }
01803
01804 void Sensors::doBuildNoSuchTeamOrAlreadyHaveCoachError() {
01805 RS_LOG ( LA_SENSORS, "BuildNoSuchTeamOrAlreadyHaveCoachError" );
01806 RS_WARNING ( "BuildNoSuchTeamOrAlreadyHaveCoachError" );
01807 lastSensorType = SENSOR_ERROR;
01808 }
01809
01810 void Sensors::doBuildTooManyMovesError() {
01811 RS_LOG ( LA_SENSORS, "BuildTooManyMovesError" );
01812 RS_WARNING ( "BuildTooManyMovesError" );
01813 lastSensorType = SENSOR_ERROR;
01814 }
01815
01816 void Sensors::doBuildUnknownCommandError() {
01817 RS_LOG ( LA_SENSORS, "BuildUnknownCommandError" );
01818 RS_WARNING ( "BuildUnknownCommandError" );
01819 lastSensorType = SENSOR_ERROR;
01820 }
01821
01822 void Sensors::doBuildIllegalCommandError() {
01823 RS_LOG ( LA_SENSORS, "BuildIllegalCommandError" );
01824 RS_WARNING ( "BuildIllegalCommandError" );
01825 lastSensorType = SENSOR_ERROR;
01826 }
01827
01828 void Sensors::doBuildSayMessageTooLongError() {
01829 RS_LOG ( LA_SENSORS, "BuildSayMessageTooLongError" );
01830 RS_WARNING ( "BuildSayMessageTooLongError" );
01831 lastSensorType = SENSOR_ERROR;
01832 }
01833
01834 void Sensors::doBuildIllegalModeError() {
01835 RS_LOG ( LA_SENSORS, "BuildIllegalModeError" );
01836 RS_WARNING ( "BuildIllegalModeError" );
01837 lastSensorType = SENSOR_ERROR;
01838 }
01839
01840 void Sensors::doBuildIllegalObjectFormError() {
01841 RS_LOG ( LA_SENSORS, "BuildIllegalObjectFormError" );
01842 RS_WARNING ( "BuildIllegalObjectFormError" );
01843 lastSensorType = SENSOR_ERROR;
01844 }
01845
01846 void Sensors::doBuildSaidTooManyFreeformMessagesError() {
01847 RS_LOG ( LA_SENSORS, "BuildSaidTooManyFreeformMessagesError" );
01848 RS_WARNING ( "BuildSaidTooManyFreeformMessagesError" );
01849 lastSensorType = SENSOR_ERROR;
01850 }
01851
01852 void Sensors::doBuildCannotSayFreeformWhilePlayonError() {
01853 RS_LOG ( LA_SENSORS, "BuildCannotSayFreeformWhilePlayonError" );
01854 RS_WARNING ( "BuildCannotSayFreeformWhilePlayonError" );
01855 lastSensorType = SENSOR_ERROR;
01856 }
01857
01858 void Sensors::doBuildSaidTooManyMetaMessagesError() {
01859 RS_LOG ( LA_SENSORS, "BuildSaidTooManyMetaMessagesError" );
01860 RS_WARNING ( "BuildSaidTooManyMetaMessagesError" );
01861 lastSensorType = SENSOR_ERROR;
01862 }
01863
01864 void Sensors::doBuildSaidTooManyAdviceMessagesError() {
01865 RS_LOG ( LA_SENSORS, "BuildSaidTooManyAdviceMessagesError" );
01866 RS_WARNING ( "BuildSaidTooManyAdviceMessagesError" );
01867 lastSensorType = SENSOR_ERROR;
01868 }
01869
01870 void Sensors::doBuildSaidTooManyInfoMessagesError() {
01871 RS_LOG ( LA_SENSORS, "BuildSaidTooManyInfoMessagesError" );
01872 RS_WARNING ( "BuildSaidTooManyInfoMessagesError" );
01873 lastSensorType = SENSOR_ERROR;
01874 }
01875
01876 void Sensors::doBuildSaidTooManyDefineMessagesError() {
01877 RS_LOG ( LA_SENSORS, "BuildSaidTooManyDefineMessagesError" );
01878 RS_WARNING ( "BuildSaidTooManyDefineMessagesError" );
01879 lastSensorType = SENSOR_ERROR;
01880 }
01881
01882 void Sensors::doBuildCouldNotParseSayError() {
01883 RS_LOG ( LA_SENSORS, "BuildCouldNotParseSayError" );
01884 RS_WARNING ( "BuildCouldNotParseSayError" );
01885 lastSensorType = SENSOR_ERROR;
01886 }
01887
01888 void Sensors::doBuildSaidTooManyMessagesError() {
01889 RS_LOG ( LA_SENSORS, "BuildSaidTooManyMessagesError" );
01890 RS_WARNING ( "BuildSaidTooManyMessagesError" );
01891 lastSensorType = SENSOR_ERROR;
01892 }
01893
01894 void Sensors::doBuildUnknownError( const std::string& error ) {
01895 RS_LOG ( LA_SENSORS, "BuildUnknownError: " << error);
01896 RS_WARNING ( "BuildUnknownError: " << error);
01897 lastSensorType = SENSOR_ERROR;
01898 }
01899
01900
01901
01902
01903
01904 void Sensors::doBuildNoTeamFoundWarning() {
01905 RS_LOG ( LA_SENSORS, "BuildNoTeamFoundWarning" );
01906 RS_WARNING ( "BuildNoTeamFoundWarning" );
01907 lastSensorType = SENSOR_WARNING;
01908 }
01909
01910 void Sensors::doBuildNoSuchPlayerWarning() {
01911 RS_LOG ( LA_SENSORS, "BuildNoSuchPlayerWarning" );
01912 RS_WARNING ( "BuildNoSuchPlayerWarning" );
01913 lastSensorType = SENSOR_WARNING;
01914 }
01915
01916 void Sensors::doBuildCannotSubWhilePlayOnWarning() {
01917 RS_LOG ( LA_SENSORS, "BuildCannotSubWhilePlayOnWarning" );
01918 RS_WARNING ( "BuildCannotSubWhilePlayOnWarning" );
01919 lastSensorType = SENSOR_WARNING;
01920 }
01921
01922 void Sensors::doBuildNoSubsLeftWarning() {
01923 RS_LOG ( LA_SENSORS, "BuildNoSubsLeftWarning" );
01924 RS_WARNING ( "BuildNoSubsLeftWarning" );
01925 lastSensorType = SENSOR_WARNING;
01926 }
01927
01928 void Sensors::doBuildMaxOfThatPlayerTypeOnFieldWarning() {
01929 RS_LOG ( LA_SENSORS, "BuildMaxOfThatPlayerTypeOnFieldWarning" );
01930 RS_WARNING ( "BuildMaxOfThatPlayerTypeOnFieldWarning" );
01931 lastSensorType = SENSOR_WARNING;
01932 }
01933
01934 void Sensors::doBuildCannotChangeGoalieWarning() {
01935 RS_LOG ( LA_SENSORS, "BuildCannotChangeGoalieWarning" );
01936 RS_WARNING ( "BuildCannotChangeGoalieWarning" );
01937 lastSensorType = SENSOR_WARNING;
01938 }
01939
01940 void Sensors::doBuildCompressionWarning() {
01941 RS_LOG ( LA_SENSORS, "BuildCompressionWarning" );
01942 RS_WARNING ( "BuildCompressionWarning" );
01943 lastSensorType = SENSOR_WARNING;
01944 }
01945
01946 void Sensors::doBuildUnknownWarning(const std::string& warning) {
01947 RS_LOG ( LA_SENSORS, "BuildUnknownWarning: " << warning);
01948 RS_WARNING ( "BuildUnknownWarning: " << warning);
01949 lastSensorType = SENSOR_WARNING;
01950 }
01951
01952
01953
01954
01955
01956 void Sensors::doBuildClangVerOK( int min, int max ) {
01957 RS_LOG ( LA_SENSORS, "BuildClangVerOK: " << min << ", " << max );
01958 lastSensorType = SENSOR_OK;
01959 }
01960
01961 void Sensors::doBuildEyeOK(bool on) {
01962 RS_LOG (LA_SENSORS, "BuildEyeOK: " << on);
01963 lastSensorType = SENSOR_OK;
01964 }
01965
01966 void Sensors::doBuildEarOK(bool on) {
01967 RS_LOG (LA_SENSORS, "BuildEarOK: " << on);
01968 lastSensorType = SENSOR_OK;
01969 }
01970
01971 void Sensors::doBuildMoveOK() {
01972 RS_LOG (LA_SENSORS, "BuildMoveOK");
01973 lastSensorType = SENSOR_OK;
01974 }
01975
01976 void Sensors::doBuildSayOK() {
01977 RS_LOG (LA_SENSORS, "BuildSayOK");
01978 lastSensorType = SENSOR_OK;
01979 }
01980
01981 void Sensors::doBuildTeamNamesOK() {
01982 RS_LOG (LA_SENSORS, "BuildTeamNamesOK");
01983 parsedSide = S_UNKNOWN;
01984 lastSensorType = SENSOR_OK;
01985 }
01986
01987 void Sensors::doBuildChangePlayerTypeOK(int unum, int type) {
01988 RS_LOG ( LA_SENSORS, "BuildChangePlayerTypeOK: " << unum << ", " << type);
01989 lastSensorType = SENSOR_OK;
01990 }
01991
01992 void Sensors::doBuildCompressionOK(int level) {
01993 RS_LOG ( LA_SENSORS, "BuildCompressionOK: " << level);
01994 lastSensorType = SENSOR_OK;
01995 }
01996
01997 void Sensors::doBuildUnknownOK(const std::string& msg) {
01998 RS_LOG ( LA_SENSORS, "BuildUnknownOK: " << msg);
01999 lastSensorType = SENSOR_OK;
02000 }
02001
02002
02003
02004
02005
02006 SideLineName Sensors::locationToLine() const {
02007 if (!parsedLocations.empty())
02008 switch (parsedLocations[0]) {
02009 case FL_TOP: {
02010 return SL_TOP;
02011 }
02012 case FL_LEFT: {
02013 return SL_LEFT;
02014 }
02015 case FL_RIGHT: {
02016 return SL_RIGHT;
02017 }
02018 case FL_BOTTOM: {
02019 return SL_BOTTOM;
02020 }
02021 default: {
02022 return SL_UNKNOWN;
02023 }
02024 }
02025 return SL_UNKNOWN;
02026 }
02027
02028 MarkerName Sensors::locationToMarker() const {
02029 switch (parsedLocations.size()) {
02030 case 0: {
02031 return UNKNOWN_MARKER;
02032 }
02033 case 1: {
02034 if (parsedFlagOffset.isKnown()) {
02035 if (parsedFlagOffset.getValue() == 0) {
02036 switch (parsedLocations[0]) {
02037 case FL_LEFT:
02038 return FLAG_L0;
02039 case FL_RIGHT:
02040 return FLAG_R0;
02041 case FL_TOP:
02042 return FLAG_T0;
02043 case FL_BOTTOM:
02044 return FLAG_B0;
02045 default:
02046 return UNKNOWN_MARKER;
02047 }
02048 }
02049 else {
02050 return UNKNOWN_MARKER;
02051 }
02052 }
02053 else {
02054 switch (parsedLocations[0]) {
02055 case FL_CENTER:
02056 return FLAG_C;
02057 case FL_RIGHT:
02058 return GOAL_R;
02059 case FL_LEFT:
02060 return GOAL_L;
02061 default:
02062 return UNKNOWN_MARKER;
02063 }
02064 }
02065 }
02066 case 2: {
02067 switch (parsedLocations[0]) {
02068 case FL_CENTER: {
02069 switch (parsedLocations[1]) {
02070 case FL_TOP:
02071 return FLAG_CT;
02072 case FL_BOTTOM:
02073 return FLAG_CB;
02074 default:
02075 return UNKNOWN_MARKER;
02076 }
02077 }
02078 case FL_LEFT: {
02079 switch (parsedLocations[1]) {
02080 case FL_TOP: {
02081 if (parsedFlagOffset.isKnown()) {
02082 switch (parsedFlagOffset.getValue()) {
02083 case 10:
02084 return FLAG_LT10;
02085 case 20:
02086 return FLAG_LT20;
02087 case 30:
02088 return FLAG_LT30;
02089 default:
02090 return UNKNOWN_MARKER;
02091 }
02092 }
02093 return FLAG_LT;
02094 }
02095 case FL_BOTTOM: {
02096 if (parsedFlagOffset.isKnown()) {
02097 switch (parsedFlagOffset.getValue()) {
02098 case 10:
02099 return FLAG_LB10;
02100 case 20:
02101 return FLAG_LB20;
02102 case 30:
02103 return FLAG_LB30;
02104 default:
02105 return UNKNOWN_MARKER;
02106 }
02107 }
02108 return FLAG_LB;
02109 }
02110 default:
02111 return UNKNOWN_MARKER;
02112 }
02113 }
02114 case FL_RIGHT: {
02115 switch (parsedLocations[1]) {
02116 case FL_TOP: {
02117 if (parsedFlagOffset.isKnown()) {
02118 switch (parsedFlagOffset.getValue()) {
02119 case 10:
02120 return FLAG_RT10;
02121 case 20:
02122 return FLAG_RT20;
02123 case 30:
02124 return FLAG_RT30;
02125 default:
02126 return UNKNOWN_MARKER;
02127 }
02128 }
02129 return FLAG_RT;
02130 }
02131 case FL_BOTTOM: {
02132 if (parsedFlagOffset.isKnown()) {
02133 switch (parsedFlagOffset.getValue()) {
02134 case 10:
02135 return FLAG_RB10;
02136 case 20:
02137 return FLAG_RB20;
02138 case 30:
02139 return FLAG_RB30;
02140 default:
02141 return UNKNOWN_MARKER;
02142 }
02143 }
02144 return FLAG_RB;
02145 }
02146 default:
02147 return UNKNOWN_MARKER;
02148 }
02149 }
02150 case FL_TOP: {
02151 if (parsedFlagOffset.isKnown()) {
02152 switch (parsedLocations[1]) {
02153 case FL_LEFT: {
02154 switch (parsedFlagOffset.getValue()) {
02155 case 10:
02156 return FLAG_TL10;
02157 case 20:
02158 return FLAG_TL20;
02159 case 30:
02160 return FLAG_TL30;
02161 case 40:
02162 return FLAG_TL40;
02163 case 50:
02164 return FLAG_TL50;
02165 default:
02166 return UNKNOWN_MARKER;
02167 }
02168 }
02169 case FL_RIGHT: {
02170 switch (parsedFlagOffset.getValue()) {
02171 case 10:
02172 return FLAG_TR10;
02173 case 20:
02174 return FLAG_TR20;
02175 case 30:
02176 return FLAG_TR30;
02177 case 40:
02178 return FLAG_TR40;
02179 case 50:
02180 return FLAG_TR50;
02181 default:
02182 return UNKNOWN_MARKER;
02183 }
02184 }
02185 default:
02186 return UNKNOWN_MARKER;
02187 }
02188 }
02189 return UNKNOWN_MARKER;
02190 }
02191 case FL_BOTTOM: {
02192 if (parsedFlagOffset.isKnown()) {
02193 switch (parsedLocations[1]) {
02194 case FL_LEFT: {
02195 switch (parsedFlagOffset.getValue()) {
02196 case 10:
02197 return FLAG_BL10;
02198 case 20:
02199 return FLAG_BL20;
02200 case 30:
02201 return FLAG_BL30;
02202 case 40:
02203 return FLAG_BL40;
02204 case 50:
02205 return FLAG_BL50;
02206 default:
02207 return UNKNOWN_MARKER;
02208 }
02209 }
02210 case FL_RIGHT: {
02211 switch (parsedFlagOffset.getValue()) {
02212 case 10:
02213 return FLAG_BR10;
02214 case 20:
02215 return FLAG_BR20;
02216 case 30:
02217 return FLAG_BR30;
02218 case 40:
02219 return FLAG_BR40;
02220 case 50:
02221 return FLAG_BR50;
02222 default:
02223 return UNKNOWN_MARKER;
02224 }
02225 }
02226 default:
02227 return UNKNOWN_MARKER;
02228 }
02229 }
02230 return UNKNOWN_MARKER;
02231 }
02232 default:
02233 return UNKNOWN_MARKER;
02234 }
02235 }
02236 case 3: {
02237 switch (parsedLocations[0]) {
02238 case FL_PENALTY: {
02239 switch (parsedLocations[1]) {
02240 case FL_LEFT: {
02241 switch (parsedLocations[2]) {
02242 case FL_TOP:
02243 return FLAG_PLT;
02244 case FL_CENTER:
02245 return FLAG_PLC;
02246 case FL_BOTTOM:
02247 return FLAG_PLB;
02248 default:
02249 return UNKNOWN_MARKER;
02250 }
02251 }
02252 case FL_RIGHT: {
02253 switch (parsedLocations[2]) {
02254 case FL_TOP:
02255 return FLAG_PRT;
02256 case FL_CENTER:
02257 return FLAG_PRC;
02258 case FL_BOTTOM:
02259 return FLAG_PRB;
02260 default:
02261 return UNKNOWN_MARKER;
02262 }
02263 }
02264 default:
02265 return UNKNOWN_MARKER;
02266 }
02267 }
02268 case FL_GOAL: {
02269 switch (parsedLocations[1]) {
02270 case FL_LEFT: {
02271 switch (parsedLocations[2]) {
02272 case FL_TOP:
02273 return FLAG_GLT;
02274 case FL_BOTTOM:
02275 return FLAG_GLB;
02276 default:
02277 return UNKNOWN_MARKER;
02278 }
02279 }
02280 case FL_RIGHT: {
02281 switch (parsedLocations[2]) {
02282 case FL_TOP:
02283 return FLAG_GRT;
02284 case FL_BOTTOM:
02285 return FLAG_GRB;
02286 default:
02287 return UNKNOWN_MARKER;
02288 }
02289 }
02290 default:
02291 return UNKNOWN_MARKER;
02292 }
02293 }
02294 default:
02295 return UNKNOWN_MARKER;
02296 }
02297 default:
02298 return UNKNOWN_MARKER;
02299 }
02300 }
02301 }
02302
02303 void Sensors::executeControlCommand(ControlCommand* cmd) throw() {
02304 if (SetCyclesSinceIOBeforeShutdown* ccmd =
02305 dynamic_cast<SetCyclesSinceIOBeforeShutdown *>(cmd) ) {
02306 facts->CP_cycles_since_io_before_shutdown = ccmd->getCycles();
02307 } else if (SetMinTicksBeforeSendingCommand* ccmd =
02308 dynamic_cast<SetMinTicksBeforeSendingCommand *>(cmd) ) {
02309 facts->CP_min_ticks_before_sending_command = ccmd->getTicks();
02310 } else if (SetMaxTicksBeforeSendingCommand* ccmd =
02311 dynamic_cast<SetMaxTicksBeforeSendingCommand *>(cmd) ) {
02312 facts->CP_max_ticks_before_sending_command = ccmd->getTicks();
02313 } else if (SetTicksBeforeCommandWarning* ccmd =
02314 dynamic_cast<SetTicksBeforeCommandWarning *>(cmd) ) {
02315 facts->CP_ticks_before_command_warning = ccmd->getTicks();
02316 }
02317 delete cmd;
02318 }
02319
02320 RS_END_NAMESPACE
02321
02322
02323
02324
02325
02326
02327
02328
02329
02330
02331
02332
02333
02334 #ifndef RS_USE_INLINE
02335 # include "Sensors.icc"
02336 #endif
02337
02338