?? positioning.cpp
字號:
if (basicPos[i].x > offsideLine && (worldModel->getPlayMode() == PM_PLAY_ON)) basicPos[i].x = offsideLine; }}Command *Positioning::getPositioningCommand(Point homePoint) const{ float maxDashPower = 100; // Stamina Manager/* if (worldModel->getBody().getPostNum() == 5 || worldModel->getBody().getPostNum() == 2) { maxDashPower = 100; if (worldModel->getBody().getPos().getX() < homePoint.x && homePoint.x > -36) { maxDashPower = 50; if (worldModel->getBody().getStamina() < 2300) maxDashPower = worldModel->getBody().getStaminaIncMax(); } if (worldModel->getBall().getPos().getX() > 0 && !((worldModel->getBody().getPos().getX() - homePoint.x) > 4) && worldModel->getBody().getStamina() < 3000) maxDashPower = worldModel->getBody().getStaminaIncMax() / 2; if (worldModel->getBall().getPos().getX() > 15 && !((worldModel->getBody().getPos().getX() - homePoint.x) > 6) && worldModel->getBody().getStamina() < 3000) maxDashPower = worldModel->getBody().getStaminaIncMax() / 3; }*/ if (worldModel->getBody().getPostNum() == 4 || worldModel->getBody().getPostNum() == 3 || worldModel->getBody().getPostNum() == 2 || worldModel->getBody().getPostNum() == 5) { maxDashPower = 100; if (worldModel->getBody().getPos().getX() < homePoint.x && homePoint.x > -36 && worldModel->getBall().getPos().getX() < 0) { maxDashPower = 60; if (worldModel->getBody().getStamina() < 2300) maxDashPower = worldModel->getBody().getStaminaIncMax(); } if (worldModel->getBall().getPos().getX() > 0 && !((worldModel->getBody().getPos().getX() - homePoint.x) > 4) && worldModel->getBody().getStamina() < 2800) maxDashPower = worldModel->getBody().getStaminaIncMax() / 2; if (worldModel->getBall().getPos().getX() > 15 && !((worldModel->getBody().getPos().getX() - homePoint.x) > 6) && worldModel->getBody().getStamina() < 2800) maxDashPower = worldModel->getBody().getStaminaIncMax() / 3; } if (worldModel->getBody().getPostNum() == 8 || worldModel->getBody().getPostNum() == 7) { maxDashPower = 85; if (worldModel->getBody().getStamina() < 2300) maxDashPower = worldModel->getBody().getStaminaIncMax(); if (worldModel->getBody().getStamina() < 2000) maxDashPower = worldModel->getBody().getStaminaIncMax() / 2; } if (worldModel->getBody().getPostNum() == 11 || worldModel->getBody().getPostNum() == 9 || worldModel->getBody().getPostNum() == 10 || worldModel->getBody().getPostNum() == 6) { maxDashPower = 100; if (worldModel->getBody().getPos().getX() > homePoint.x) { if (worldModel->getBall().getPos().getX() < 20) { maxDashPower = 80; if (worldModel->getBody().getStamina() < 1700) maxDashPower = worldModel->getBody().getStaminaIncMax(); if (worldModel->getBody().getStamina() < 1600) maxDashPower = worldModel->getBody().getStaminaIncMax() / 2; } if (worldModel->getBall().getPos().getX() < 5) { maxDashPower = 65; if (worldModel->getBody().getStamina() < 2300) maxDashPower = worldModel->getBody().getStaminaIncMax(); if (worldModel->getBody().getStamina() < 2000) maxDashPower = worldModel->getBody().getStaminaIncMax() / 2; } if (worldModel->getBall().getPos().getX() < -10) { maxDashPower = 40; if (worldModel->getBody().getStamina() < 2700) maxDashPower = worldModel->getBody().getStaminaIncMax(); if (worldModel->getBody().getStamina() < 2300) maxDashPower = worldModel->getBody().getStaminaIncMax() / 3; } if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, worldModel->getBody().getPos().getY() - homePoint.y) < 7) maxDashPower = worldModel->getBody().getStaminaIncMax() / 2; if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, worldModel->getBody().getPos().getY() - homePoint.y) < 3) maxDashPower = 0; } else { if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, worldModel->getBody().getPos().getY() - homePoint.y) < 5) maxDashPower = 80; if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, worldModel->getBody().getPos().getY() - homePoint.y) < 3) maxDashPower = 50; if (hypot(worldModel->getBody().getPos().getX() - homePoint.x, worldModel->getBody().getPos().getY() - homePoint.y) < 1.5) maxDashPower = 0; } } float idealBodyDir = 0; if (worldModel->getPlayMode() != PM_PLAY_ON) { LOG << "Positioning NPO " << endl; if (worldModel->getPlayMode() == PM_OFFSIDE) { LOG << "Positioning NPO Offside NPOX" << endl; ForbiddenAreaGotoPoint doGotoPoint(AT_POSITIONING, homePoint, worldModel->getBall().getPos(), 9.15, worldModel->getBody(), true); if (doGotoPoint.getStatus() == 0) { if (doGotoPoint.getCommand()) delete doGotoPoint.getCommand(); return TurnToPoint(AT_POSITIONING, worldModel->getBall().getPos(), worldModel->getBody(), 5).getCommand(); } else return doGotoPoint.getCommand(); } else if (worldModel->getPlayMode() == PM_GOAL_KICK_OPP) { LOG << "Positioning NPO GoalKickOpp NPOX" << endl; ForbiddenAreaGotoPoint doGotoPoint(AT_POSITIONING, getOppGoalieKickHome(homePoint), 36, -20, 20, worldModel->getBody()); if (doGotoPoint.getStatus() == 0) { if (doGotoPoint.getCommand()) delete doGotoPoint.getCommand(); return TurnToPoint(AT_POSITIONING, worldModel->getBall().getPos(), worldModel->getBody(), 5).getCommand(); } else return doGotoPoint.getCommand(); } else if (worldModel->getPlayMode() == PM_FREE_KICK_OPP && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL_OPP) { LOG << "Positioning NPO GoalieCatchOpp NPOX" << endl; ForbiddenAreaGotoPoint doGotoPoint(AT_POSITIONING, getOppGoalieKickHome(homePoint), worldModel->getBall().getPos(), 9.15, worldModel->getBody()); if (doGotoPoint.getStatus() == 0) { if (doGotoPoint.getCommand()) delete doGotoPoint.getCommand(); return TurnToPoint(AT_POSITIONING, worldModel->getBall().getPos(), worldModel->getBody(), 5).getCommand(); } else return doGotoPoint.getCommand(); } else { LOG << "Positioning NPO Other NPOX" << endl; ForbiddenAreaGotoPoint doGotoPoint(AT_POSITIONING, homePoint, worldModel->getBall(). getPos(), 9.15, worldModel->getBody()); if (doGotoPoint.getStatus() == 0) { if (doGotoPoint.getCommand()) delete doGotoPoint.getCommand(); return TurnToPoint(AT_POSITIONING, worldModel->getBall().getPos(), worldModel->getBody(), 5).getCommand(); } else return doGotoPoint.getCommand(); } } if (worldModel->getBody().getPostNum() >= 9) { idealBodyDir = 0; return DashNormalGotoPoint(AT_POSITIONING, homePoint, 1.5, worldModel->getBody(), idealBodyDir, maxDashPower).getCommand(); } if ((worldModel->getBody().getPostNum() <= 5 || (worldModel->getBody().getPostNum() == 8 && worldModel->getBall().getPos().getX() < 10)) && worldModel->getBall().getPos().getX() > -32) { if (worldModel->getBall().getPos().getY() > homePoint.y) idealBodyDir = 90; else idealBodyDir = -90; if (worldModel->getBody().getPostNum() == 8) { if (fabs(worldModel->getBall().getPos().getY()) > 12) idealBodyDir = 180; } if (worldModel->getBody().getPostNum() == 4) { if (worldModel->getBall().getPos().getY() < 0) idealBodyDir = 180; if (worldModel->getBall().getPos().getY() > 15) idealBodyDir = 135; } if (worldModel->getBody().getPostNum() == 3) { if (worldModel->getBall().getPos().getY() > 0) idealBodyDir = 180; if (worldModel->getBall().getPos().getY() < -15) idealBodyDir = -135; } if (worldModel->getBody().getPostNum() == 5) { if (worldModel->getBall().getPos().getY() < 12) idealBodyDir = 180; } if (worldModel->getBody().getPostNum() == 2) { if (worldModel->getBall().getPos().getY() > -12) idealBodyDir = 180; } return DashNormalGotoPoint(AT_POSITIONING, homePoint, 1.5, worldModel->getBody(), idealBodyDir, maxDashPower).getCommand(); } return DashNormalGotoPoint(AT_POSITIONING, homePoint, 1.5, worldModel->getBody(), maxDashPower).getCommand(); }float Positioning::getMaxXFor34(){ float maxXFor34 = 0; unsigned i; float xTmmFullPlayer[FULL_PLAYERS_NUM]; float xTmmHalfPlayer[HALF_PLAYERS_NUM]; for (int i = 0; i < FULL_PLAYERS_NUM; i++) xTmmFullPlayer[i] = 0; for (int i = 0; i < HALF_PLAYERS_NUM; i++) xTmmHalfPlayer[i] = 0; if (worldModel->getBody().getPostNum() == 3) { xTmmFullPlayer[7] = 0; if (worldModel->getFullPlayer(TID_TEAMMATE, 6).isValid()) xTmmFullPlayer[6] = worldModel->getFullPlayer(TID_TEAMMATE, 6).getPos(). getX() + 15; else xTmmFullPlayer[6] = 0; } if (worldModel->getBody().getPostNum() == 4) { if (worldModel->getFullPlayer(TID_TEAMMATE, 7).isValid()) xTmmFullPlayer[7] = worldModel->getFullPlayer(TID_TEAMMATE, 7).getPos(). getX() + 15; else xTmmFullPlayer[7] = 0; xTmmFullPlayer[6] = 0; } for (int i = 0; i < FULL_PLAYERS_NUM; i++) if (i != 6 && i != 7) if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() && !worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie()) xTmmFullPlayer[i] = worldModel->getFullPlayer(TID_TEAMMATE,i). getPos().getX(); xTmmFullPlayer[4] = 0; for (int i = 0; i < HALF_PLAYERS_NUM; i++) if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() && !worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie()) xTmmHalfPlayer[i] = worldModel->getHalfPlayer(TID_TEAMMATE,i). getPos().getX(); bool isGoalieInList = false; for (int i = 0; i < FULL_PLAYERS_NUM; i++) if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() && worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie()) isGoalieInList = true; for (int i = 0; i < HALF_PLAYERS_NUM; i++) if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() && worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie()) isGoalieInList = true; if (isGoalieInList) { maxXFor34 = 0xFFFF; for (i = 0; i < FULL_PLAYERS_NUM; i++) if (xTmmFullPlayer[i] < maxXFor34) maxXFor34 = xTmmFullPlayer[i]; for (i = 0; i < HALF_PLAYERS_NUM; i++) if (xTmmHalfPlayer[i] < maxXFor34) maxXFor34 = xTmmHalfPlayer[i]; } else { float firstMinX = 0xFFFF, secMinX = 0xFFFF; for (i = 0; i < FULL_PLAYERS_NUM; i++) if (xTmmFullPlayer[i] < secMinX) { secMinX = xTmmFullPlayer[i]; if (secMinX < firstMinX) swap(firstMinX, secMinX); } for (i = 0; i < HALF_PLAYERS_NUM; i++) if (xTmmHalfPlayer[i] < secMinX) { secMinX = xTmmHalfPlayer[i]; if (secMinX < firstMinX) swap(firstMinX, secMinX); } maxXFor34 = secMinX; } if (maxXFor34 > 0) maxXFor34 = 0; return maxXFor34;}float Positioning::getMaxXFor7(){ float maxXFor7 = 0; unsigned i; float xTmmFullPlayer[FULL_PLAYERS_NUM]; float xTmmHalfPlayer[HALF_PLAYERS_NUM]; for (int i = 0; i < FULL_PLAYERS_NUM; i++) xTmmFullPlayer[i] = 0; for (int i = 0; i < HALF_PLAYERS_NUM; i++) xTmmHalfPlayer[i] = 0; /////. xTmmFullPlayer[4] = 0; ////. for (int i = 0; i < FULL_PLAYERS_NUM; i++) if (i != 4) if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() && !worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie()) xTmmFullPlayer[i] = worldModel->getFullPlayer(TID_TEAMMATE,i). getPos().getX(); for (int i = 0; i < HALF_PLAYERS_NUM; i++) if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() && !worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie()) xTmmHalfPlayer[i] = worldModel->getHalfPlayer(TID_TEAMMATE,i). getPos().getX(); bool isGoalieInList = false; for (int i = 0; i < FULL_PLAYERS_NUM; i++) if (worldModel->getFullPlayer(TID_TEAMMATE,i).isValid() && worldModel->getFullPlayer(TID_TEAMMATE,i).isGoalie()) isGoalieInList = true; for (int i = 0; i < HALF_PLAYERS_NUM; i++) if (worldModel->getHalfPlayer(TID_TEAMMATE,i).isValid() && worldModel->getHalfPlayer(TID_TEAMMATE,i).isGoalie()) isGoalieInList = true; if (isGoalieInList) { maxXFor7 = 0xFFFF; for (i = 0; i < FULL_PLAYERS_NUM; i++) if (xTmmFullPlayer[i] < maxXFor7) maxXFor7 = xTmmFullPlayer[i]; for (i = 0; i < HALF_PLAYERS_NUM; i++) if (xTmmHalfPlayer[i] < maxXFor7) maxXFor7 = xTmmHalfPlayer[i]; } else { float firstMinX = 0xFFFF, secMinX = 0xFFFF; for (i = 0; i < FULL_PLAYERS_NUM; i++) if (xTmmFullPlayer[i] < secMinX) { secMinX = xTmmFullPlayer[i]; if (secMinX < firstMinX) swap(firstMinX, secMinX); } for (i = 0; i < HALF_PLAYERS_NUM; i++) if (xTmmHalfPlayer[i] < secMinX) { secMinX = xTmmHalfPlayer[i]; if (secMinX < firstMinX) swap(firstMinX, secMinX); } maxXFor7 = secMinX; } if (maxXFor7 > 0) maxXFor7 = 0; return maxXFor7;}Point Positioning::getBasicPos(unsigned num) const{ return basicPos[num];}Point Positioning::getHomePoint(unsigned playerUniNum) const{ return basicPos[Player::uniNumToPostNum(playerUniNum) - 1];}Point Positioning::getOppGoalieKickHome(Point homePoint) const{ Point newHomePoint; newHomePoint = homePoint; if (worldModel->getPlayMode() == PM_FREE_KICK_OPP && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL_OPP) { LOG << "Positioning GoalieCatchOppHome model=catch" << endl; if (worldModel->getBody().getPostNum() == 6) newHomePoint = Point(18, 10); if (worldModel->getBody().getPostNum() == 7) newHomePoint = Point(18, -10); if (worldModel->getBody().getPostNum() == 9) newHomePoint = Point(25, 0); if (worldModel->getBody().getPostNum() == 10) newHomePoint = Point(30, -20); if (worldModel->getBody().getPostNum() == 11) newHomePoint = Point(30, 20); newHomePoint.y += worldModel->getBall().getPos().getY() * .15; } if (worldModel->getPlayMode() == PM_GOAL_KICK_OPP) { LOG << "Positioning GoalieCatchOppHome model=goalkick" << endl; if (worldModel->getBody().getPostNum() == 6) newHomePoint = Point(28, 10); if (worldModel->getBody().getPostNum() == 7) newHomePoint = Point(28, -10); if (worldModel->getBody().getPostNum() == 9) newHomePoint = Point(35, 0); if (worldModel->getBody().getPostNum() == 10) newHomePoint = Point(35, -20); if (worldModel->getBody().getPostNum() == 11) newHomePoint = Point(35, 20); newHomePoint.y += worldModel->getBall().getPos().getY() * .15; } return newHomePoint;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -