📄 nonplayondecision.cpp
字号:
break; case PM_OFFSIDE: case PM_FREE_KICK_FAULT: case PM_CATCH_FAULT: case PM_BACK_PASS:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE6" << endl;#endif if (worldModel->getBody().isGoalie()) { advancedActions[GOALIE_POSITIONING_NUM]->getValue(library); advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library); command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand(); return; } else { advancedActions[DEFENSE_NUM]->getValue(library); advancedActions[DEFENSE_NUM]->execute(form, library); command = advancedActions[DEFENSE_NUM]->getCommand(); return; } break; case PM_OFFSIDE_OPP: case PM_FREE_KICK_FAULT_OPP: case PM_CATCH_FAULT_OPP: case PM_BACK_PASS_OPP:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7" << endl;#endif selectBallKickerSay(positions, form); if (selectBallKicker(positions) == 1) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 1" << endl;#endif if (worldModel->getBody().isGoalie()) { advancedActions[GOALIE_POSITIONING_NUM]->getValue(library); advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library); command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand(); return; } else { advancedActions[OFFENSE_NUM]->getValue(library); advancedActions[OFFENSE_NUM]->execute(form, library); command = advancedActions[OFFENSE_NUM]->getCommand(); return; } } else { form.headForm.tnMode = TNM_LOOK_CAREFULLY;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 2" << endl;#endif advancedActions[GOTOKICK_NUM]->getValue(library); if (dynamic_cast<NonPlayOnGotoKick *>(advancedActions[GOTOKICK_NUM]) ->getStatus() == 1) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 3" << endl;#endif advancedActions[GOTOKICK_NUM]->execute(form, library); command = advancedActions[GOTOKICK_NUM]->getCommand(); return; } else if (backBallChoice() == 1) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 4" << endl;#endif // No need to the following line if (advancedActions[GOTOKICK_NUM]->getCommand()) delete advancedActions[GOTOKICK_NUM]->getCommand(); command = new EmptyCommand(AT_NONE); return; } else {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE7 5" << endl;#endif // No need to the following line if (advancedActions[GOTOKICK_NUM]->getCommand()) delete advancedActions[GOTOKICK_NUM]->getCommand(); advancedActions[BACKBALL_NUM]->getValue(library); advancedActions[BACKBALL_NUM]->execute(form, library); return; } } break; case PM_GOAL_KICK:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8" << endl;#endif if (worldModel->getBody().isGoalie()) { form.headForm.tnMode = TNM_LOOK_CAREFULLY; if (worldModel->getBall().getPos().getY() > 0) form.sayForm.attentionNum = 7; else form.sayForm.attentionNum = 8;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1" << endl;#endif if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 0,5" << endl;#endif advancedActions[GOALIE_POSITIONING_NUM]->getValue(library); advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library); command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand(); return; } advancedActions[GOTOKICK_NUM]->getValue(library); if (dynamic_cast<NonPlayOnGotoKick *>(advancedActions[GOTOKICK_NUM]) ->getStatus() == 1) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 1" << endl;#endif advancedActions[GOTOKICK_NUM]->execute(form, library); command = advancedActions[GOTOKICK_NUM]->getCommand(); return; } else if (backBallChoice() == 1) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 2" << endl;#endif // No need to the following line if (advancedActions[GOTOKICK_NUM]->getCommand()) delete advancedActions[GOTOKICK_NUM]->getCommand(); quickLevels[PASS_NUM] = 1; quickLevels[SHOOT_NUM] = 1; form.sayForm.reset(); BodyDecision::decide(quickLevel, form, library); return; } else {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE8 1 3" << endl;#endif // No need to the following line if (advancedActions[GOTOKICK_NUM]->getCommand()) delete advancedActions[GOTOKICK_NUM]->getCommand(); advancedActions[BACKBALL_NUM]->getValue(library); advancedActions[BACKBALL_NUM]->execute(form, library); command = advancedActions[BACKBALL_NUM]->getCommand(); return; } } else { if (worldModel->getBall().getPos().getY() > 0) { if (worldModel->getBody().getUniNum() == 7) { if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN) ;// form.sayForm.reset(); else form.sayForm.attentionNum = 1; } else { if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN) ;// form.sayForm.reset(); else form.sayForm.attentionNum = 1; } } else { if (worldModel->getBody().getUniNum() == 8) { if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN) ;// form.sayForm.reset(); else form.sayForm.attentionNum = 1; } else { if (worldModel->getVirtualPlayMode() == VPM_GOAL_KICK_TAKEN) ;// form.sayForm.reset(); else form.sayForm.attentionNum = 1; } } advancedActions[GOALIE_CATCH_OFFENSE_NUM]->getValue(library); advancedActions[GOALIE_CATCH_OFFENSE_NUM]-> execute(form, library); command = advancedActions[GOALIE_CATCH_OFFENSE_NUM]-> getCommand(); return; } break; case PM_GOAL_KICK_OPP:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE9" << endl;#endif if (worldModel->getBall().getVel().getMagnitude() < 0.1) {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE9 1" << endl;#endif if (worldModel->getBody().isGoalie()) { advancedActions[GOALIE_POSITIONING_NUM]->getValue(library); advancedActions[GOALIE_POSITIONING_NUM]->execute(form, library); command = advancedActions[GOALIE_POSITIONING_NUM]->getCommand(); return; } else { advancedActions[DEFENSE_NUM]->getValue(library); advancedActions[DEFENSE_NUM]->execute(form, library); command = advancedActions[DEFENSE_NUM]->getCommand(); return; } } else {#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE9 2" << endl;#endif if (worldModel->getCurInterCalculate().existFastestTmmPlayer() && worldModel->getCurInterCalculate().getFastestTmmPlayer().isBody()) { Point interceptStandPoint; if (abs(worldModel->getBall().getVel().getX()) <= EPS) { if (worldModel->getBall().getVel().getY() >= 0) interceptStandPoint = Point(worldModel->getBall().getPos().getX(), 20); else interceptStandPoint = Point(worldModel->getBall().getPos().getX(), -20); } else if (abs(worldModel->getBall().getVel().getY()) <= EPS) { interceptStandPoint = Point(35.5, worldModel->getBall().getPos().getY()); } else { float m, b, t; m = worldModel->getBall().getVel().getY() / worldModel->getBall().getVel().getX(); b = worldModel->getBall().getPos().getY() - worldModel->getBall().getPos().getX() * m; t = m * 35.5 + b; if (abs(t) <= 20.5) { interceptStandPoint = Point(35.5, t); } else { if (worldModel->getBall().getVel().getY() >= 0) { t = (20.5 - b) / m; if (t > 52) t = 52; interceptStandPoint = Point(t, 20.5); } else { t = (-20.5 - b) / m; if (t > 52) t = 52; interceptStandPoint = Point(t, -20.5); } } } command = ForbiddenAreaGotoPoint(AT_INTERCEPT, interceptStandPoint, 36, -20, 20, worldModel->getBody()).getCommand(); return;/*//TODO: advancedActions[INTERCEPT_NUM].setForbiddenArea(OPPPENALTYAREA); advancedActions[INTERCEPT_NUM]->getValue(); advancedActions[INTERCEPT_NUM]->execute(sayFlags); command = advancedActions[INTERCEPT_NUM]->getCommand(); return advancedActions[INTERCEPT_NUM]->getType();*/ } } break; case PM_TIME_UP: case PM_TIME_UP_WITHOUT_A_TEAM:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE-1 TIMEOVER(CHECK IT)" << endl;#endif command = new EmptyCommand(AT_NONE); return; break; default:#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "NONPLAYON: MODE0 default(CHECK IT)" << endl;#endif command = new EmptyCommand(AT_NONE); return; } return;}int NonPlayOnDecision::selectBallKicker(Point positions[11]){ float nearestDistance; unsigned i; unsigned actualPlayModeStayCycles,actualPlayModeRemainCycles; Point myHome; Vector meBall; Vector homeBall;#ifdef NON_PLAY_ON_DECISION_LOG1LOG << "selectKicker : start" << endl;#endif if (worldModel->getBody().isGoalie() && worldModel->getPlayMode() == PM_FREE_KICK && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL) return 2; if (!worldModel->getBody().isGoalie() && worldModel->getPlayMode() == PM_FREE_KICK && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL) return 1; if (worldModel->getBody().isGoalie() && worldModel->getPlayMode() == PM_GOAL_KICK && worldModel->getVirtualPlayMode() != VPM_GOAL_KICK_TAKEN) return 2; if (!worldModel->getBody().isGoalie() && worldModel->getPlayMode() == PM_GOAL_KICK && worldModel->getVirtualPlayMode() != VPM_GOAL_KICK_TAKEN) return 1; if (worldModel->getBody().isGoalie()) return 1; if (worldModel->getPlayMode() == PM_CORNER_KICK) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : corner kick" << endl;#endif if (worldModel->getBall().getPos().getY() > 0) { if (worldModel->getBody().getUniNum() == 10) return 2; else return 1; } else { if (worldModel->getBody().getUniNum() == 11) return 2; else return 1; } } if (worldModel->getPlayMode() == PM_BEFORE_KICK_OFF || worldModel->getPlayMode() == PM_GOAL || worldModel->getPlayMode() == PM_GOAL_OPP || worldModel->getPlayMode() == PM_KICK_OFF || worldModel->getPlayMode() == PM_KICK_OFF_OPP) {#ifdef NON_PLAY_ON_DECISION_LOG2LOG << "selectKicker : simple" << endl;#endif nearestDistance = 10000; for (i = 0; i < FULL_PLAYERS_NUM; i++) { if (i + 1 == GOALIE_UNIFORM_NUM) continue; // Goalie
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -