📄 groupworks.cpp
字号:
void GroupWorks::changeInterceptNumByHear(unsigned sender, unsigned uniNum){ if (!getChangeInterceptNumPermission()) { LOG << "Changing interceptNum is not permitted." << endl; return; } bool setFlag = false; LOG << "suggested interceptNum: " << uniNum << endl; if (sender == interceptNum || sender == worldModel->getBody().getUniNum()) setFlag = true; else if (!uniNum) return; // No suggestion. else if (uniNum == worldModel->getBody().getUniNum()) setFlag = true; else if (worldModel->getFullPlayer(TID_TEAMMATE, uniNum - 1).getPosDeviation() > 2 || worldModel->getFullPlayer(TID_TEAMMATE, interceptNum - 1).getPosDeviation() > 2) setFlag = true; if (setFlag) { if (uniNum <= 11) // GoToBall Mode { interceptNum = uniNum; interceptBlock = false; interceptSay = true; } else // Block Mode { interceptNum = uniNum - 11; interceptBlock = true; interceptSay = true; } LOG << "setting interceptNum (Bl, Sy, Pn):" << " " << interceptBlock << " " << interceptSay << " " << interceptNum << endl; }}WithoutBallSelection GroupWorks::getWithoutBallSelection( const Library &library) const{ WithoutBallSelection selection; if (!worldModel->getBall().isValid()) selection = WOBS_LOOKFORBALL; else if (interceptNum == worldModel->getBody().getUniNum()) { if (interceptBlock) selection = WOBS_BLOCK; else selection = WOBS_INTERCEPT; } else selection = WOBS_POSITIONING; if (!getChangeInterceptNumPermission()) { SpecifyOffenseDefense(selection); LOG << "GroupWorks::getWithoutBallSelection > return: " << selection << endl; return selection; } if (lastSRPDribbleTime > worldModel->getCurTime() - 5) selection = WOBS_INTERCEPT; LOG << " Meisam2005 GroupWorks1 : selection = " << selection << endl; if (selection == WOBS_POSITIONING && (worldModel->getBallStatus() == BS_FREE_BALL_BODY /*|| worldModel->getBallStatus() == BS_FREE_BALL_BODY_TMM*/)) selection = WOBS_INTERCEPT; // Be careful of this line. if (selection == WOBS_INTERCEPT) { if (worldModel->getBallStatus() == BS_KICKABLE_OPP || worldModel->getBallStatus() == BS_FREE_BALL_OPP) selection = WOBS_BLOCK; if (worldModel->getBody().getPostNum() <= 5) if (worldModel->getBallStatus() == BS_FREE_BALL_BODY_OPP || worldModel->getBallStatus() == BS_FREE_BALL_TMM_OPP) selection = WOBS_BLOCK; }// LOG << "SALAM man asabaniam : " << (bool)(worldModel->getBallStatus() // == BS_FREE_BALL_TMM_OPP) << endl; if (selection == WOBS_POSITIONING && (worldModel->getBody().getPostNum() <= 5 || (worldModel->getBody().getPostNum() == 8 && worldModel->getBall().getPos().getX() < 5 && worldModel->getBallStatus() != BS_FREE_BALL_BODY_OPP))) { if (worldModel->getBallStatus() == BS_KICKABLE_OPP || worldModel->getBallStatus() == BS_FREE_BALL_OPP || worldModel->getBallStatus() == BS_FREE_BALL_BODY_OPP || worldModel->getBallStatus() == BS_FREE_BALL_TMM_OPP) { float homeDeltaX = worldModel->getBall().getPos().getX() - library.positioning.getHomePoint( worldModel->getBody().getUniNum()).x; LOG << "Meisam2005 : aaaaah : homePoint : " << library.positioning.getHomePoint( worldModel->getBody().getUniNum()) << endl; float homeDeltaY = worldModel->getBall().getPos().getY() - library.positioning.getHomePoint( worldModel->getBody().getUniNum()).y; LOG << "Meisam2005 Intelligent Section of GrourWorks :-----------------------------------" << endl; LOG << "DeltaX : " << homeDeltaX << endl; LOG << "DeltaY : " << homeDeltaY << endl; LOG << "----------------------------------------------------------------------" << endl; if (worldModel->getBody().getPostNum() == 2) if (homeDeltaY < 6 && (homeDeltaX < 8 || worldModel->getBody().getPos().getX() > worldModel->getBall().getPos().getX())) { LOG << "Meisam2005 intelligent su..1 " << endl; selection = WOBS_BLOCK; } if (worldModel->getBody().getPostNum() == 3) { if (worldModel->getBall().getPos().getX() > 0) { if (fabs(homeDeltaY) < 6 && (homeDeltaX < 6 || worldModel->getBody().getPos().getX() > worldModel->getBall().getPos().getX())) { LOG << "Meisam2005 intelligent su..2 " << endl; selection = WOBS_BLOCK; } } else if (abs(homeDeltaY) < 10 && (homeDeltaX < 10 || worldModel->getBody().getPos().getX() > worldModel->getBall().getPos().getX())) { LOG << "Meisam2005 intelligent su..3 " << endl; selection = WOBS_BLOCK; } } if (worldModel->getBody().getPostNum() == 4) { if (worldModel->getBall().getPos().getX() > 0) { if (fabs(homeDeltaY) < 6 && (homeDeltaX < 6 || worldModel->getBody().getPos().getX() > worldModel->getBall().getPos().getX())) { LOG << "Meisam2005 intelligent su..4 " << endl; selection = WOBS_BLOCK; } } else if (abs(homeDeltaY) < 10 && (homeDeltaX < 10 || worldModel->getBody().getPos().getX() > worldModel->getBall().getPos().getX())) { LOG << "Meisam2005 intelligent su..5 " << endl; selection = WOBS_BLOCK; } } if (worldModel->getBody().getPostNum() == 5) if (homeDeltaY > -6 && (homeDeltaX < 8 || worldModel->getBody().getPos().getX() > worldModel->getBall().getPos().getX())) { LOG << "Meisam2005 intelligent su..6 " << endl; selection = WOBS_BLOCK; } if (worldModel->getBody().getPostNum() == 8) if (abs(homeDeltaY) < 12 && (homeDeltaX < 6 || worldModel->getBody().getPos().getX() > worldModel->getBall().getPos().getX())) { LOG << "Meisam2005 intelligent su..7 " << endl; selection = WOBS_BLOCK; } } }//////////////////////////BLOCK FOR 6 & 7 : begin if (selection == WOBS_POSITIONING && (worldModel->getBody().getPostNum() == 6 || worldModel->getBody().getPostNum() == 7)) { if (worldModel->getBallStatus() == BS_KICKABLE_OPP || worldModel->getBallStatus() == BS_FREE_BALL_OPP || worldModel->getBallStatus() == BS_FREE_BALL_BODY_OPP || worldModel->getBallStatus() == BS_FREE_BALL_TMM_OPP) { Point localHomePoint; localHomePoint = library.positioning.getHomePoint( worldModel->getBody().getUniNum()); float homeDeltaX = worldModel->getBall().getPos().getX() - localHomePoint.x; float homeDeltaY = worldModel->getBall().getPos().getY() - localHomePoint.y; /* LOG << "Intelligent Section of GrourWorks :-----------------------------------" << endl; LOG << "DeltaX : " << homeDeltaX << endl; LOG << "DeltaY : " << homeDeltaY << endl; LOG << "----------------------------------------------------------------------" << endl;*/ if (worldModel->getBody().getPostNum() == 6 && worldModel->getBall().getPos().getY() > 4.5 && homeDeltaX > -10 && (localHomePoint.x - worldModel->getBody().getPos().getX()) > -14 && homeDeltaY > -10) { LOG << "Meisam2005 intelligent su..7 " << endl; selection = WOBS_BLOCK; } if (worldModel->getBody().getPostNum() == 7 && worldModel->getBall().getPos().getY() < -4.5 && homeDeltaX > -10 && (localHomePoint.x - worldModel->getBody().getPos().getX()) > -14 && homeDeltaY > -10) { LOG << "Meisam2005 intelligent su..8 " << endl; selection = WOBS_BLOCK; } } }//////////////////////////BLOCK FOR 6 & 7 : end SpecifyOffenseDefense(selection); LOG << "GroupWorks::getWithoutBallSelection > return: " << selection << endl; return selection;}void GroupWorks::signInterceptNum(SayDecisionForm &sayForm){ if (interceptNum == 0) { sayForm.gwInterceptNum = 0; sayForm.gwAttentionNum = 0; return; } else sayForm.gwAttentionNum = interceptNum; if ((interceptNum == worldModel->getBody().getUniNum() || worldModel->getFullPlayer(TID_TEAMMATE, interceptNum - 1). getPosDeviation() < 2) && worldModel->getBall().getPosDeviation() < 2 && interceptSay) { if (interceptBlock) sayForm.gwInterceptNum = interceptNum + 11; // It means Block Mode else sayForm.gwInterceptNum = interceptNum; } else sayForm.gwInterceptNum = 0; // I reset it because I am not sure.}bool GroupWorks::getChangeInterceptNumPermission() const{ if (worldModel->getBall().getSeeTime() > worldModel->getCurTime() - 2 && worldModel->getCurTime() - lastPassHearTime > 2 && (worldModel->getBallStatus() == BS_KICKABLE_TMM || worldModel->getBallStatus() == BS_KICKABLE_OPP || worldModel->getBallStatus() == BS_KICKABLE_BODY || worldModel->getBallStatus() == BS_KICKABLE_BODY_TMM || worldModel->getBallStatus() == BS_KICKABLE_BODY_OPP || worldModel->getBallStatus() == BS_KICKABLE_TMM_OPP)) return true; if (worldModel->getCurTime() - lastPassHearTime > 4 || interceptNum == 0) return true; return false;}/*void GroupWorks::suggestPassSayManager(){ LOG << "GroupWorks::suggestPassSayManager" << endl; turnNeckMode = TNM_LOOK_NORMALLY_TO_BALL; sayFlags.attentionNum = hearedRequestPassSender; if (worldModel->getTimer().now() > ZERO_QUICK_LEVEL_MS || worldModel->getCurTime() - worldModel->getBall().getSeeTime() > 2) { LOG << "Not enough time or informations." << endl; return; // my informations or my time are not enough. } const Player &kickPlayer = worldModel->getNearestTmmToBall(); virtualKickCalc.update(worldModel, kickPlayer); float value = virtualPass.getValue(kickPlayer); if (value <= -50 || value == AD_MIN_VALUE) { LOG << "There is no good pass." << endl; return; } sayFlags.suggestPassSay = true; sayFlags.passDir = virtualPass.getPassInterCalc()-> getFirstBall().getVel().getDirection(); sayFlags.passSpeed = virtualPass.getPassInterCalc()-> getFirstBall().getVel().getMagnitude(); sayFlags.passWeight = value; sayFlags.passPlayerNum = virtualPass.getPassPlayer()->getUniNum(); LOG << "VirtualPass:" << endl << "\tPlayer: " << virtualPass.getPassPlayer()->getTeamId() << " " << virtualPass.getPassPlayer()->getUniNum() << endl << "\tWeight: " << virtualPass.getPassValue() << endl << "\tModel: " << virtualPass.getPassModel() << endl << "\tDir: " << sayFlags.passDir << endl << "\tSpeed: " << sayFlags.passSpeed << endl;}*//*bool GroupWorks::getPassSayRequestPermittion(){ unsigned bodyNum = worldModel->getCurInterCalculate(). getCheckedListNum(worldModel->getBody()); if (bodyNum == NOVALUE || worldModel->getCurInterCalculate(). getCheckedInterPlayer(bodyNum).getInterTime() > 3) return false; return true;}*//*void GroupWorks::requestSuggestPassSayManager(){ LOG << "GroupWorks::requestSuggestPassSayManager" << endl;*//* if (worldModel->getBody().getPostNum() == 6 || worldModel->getBody().getPostNum() == 7) requestNum = Player::postNumToUniNum(8); else*//* if (worldModel->getBody().getPostNum() == 9 || worldModel->getBody().getPostNum() == 10 || worldModel->getBody().getPostNum() == 11) { if (abs(worldModel->getBall().getPos().getY()) > 5) { if (worldModel->getBall().getPos().getY() > 0) requestNum = Player::postNumToUniNum(6); else requestNum = Player::postNumToUniNum(7); } else requestNum = lastRequestNum; } sayFlags.attentionNum = requestNum; sayFlags.requestPassSayNum = requestNum;}*/void GroupWorks::updateAfterSenseBody(){// lastRequestNum = requestNum;}void GroupWorks::decide(){ LOG << "GroupWorks::decide" << endl;/* if (getPassSayRequestPermittion()) requestSuggestPassSayManager(); if (hearedRequestPassTime == worldModel->getCurTime() && hearedRequestPassNum == worldModel->getBody().getUniNum()) suggestPassSayManager();*/}void GroupWorks::SpecifyOffenseDefense(WithoutBallSelection &selection) const{ if (selection == WOBS_POSITIONING) { if (interceptBlock) selection = WOBS_DEFENSE; else selection = WOBS_OFFENSE; } if (selection == WOBS_DEFENSE && (isInPlayers(worldModel->getBody().getUniNum(), "234") || (isInPlayers(worldModel->getBody().getUniNum(), "AB5") && worldModel->getBody().getPos().getX() >= 20))) selection = WOBS_OFFENSE; if (selection == WOBS_OFFENSE && (isInPlayers(worldModel->getBody().getUniNum(), "6789") || (isInPlayers(worldModel->getBody().getUniNum(), "AB5") && worldModel->getBody().getPos().getX() < -20))) selection = WOBS_DEFENSE;}// setting functions/*void GroupWorks::setHearedRequestPassNum(unsigned hearedRequestPassNumArg){ hearedRequestPassNum = hearedRequestPassNumArg;}void GroupWorks::setHearedRequestPassTime(unsigned hearedRequestPassTimeArg){ hearedRequestPassTime = hearedRequestPassTimeArg;}void GroupWorks::setHearedRequestPassSender(unsigned hearedRequestPassSenderArg){ hearedRequestPassSender = hearedRequestPassSenderArg;}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -