?? nonplayon.cpp
字號:
/* * Copyright 2002-2005, Mersad Team, Allameh Helli High School (NODET). * * This program is free software, you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Library General Public License for more details. * * This file is created by: Mohammad Salehe * * Released on Monday 1 August 2005, 10 Mordad 1384 by Mersad RoboCup Team. * For more information please read README file.*/#include <iostream>#include <cassert>#include <Logger.h>#include <NonPlayOn.h>#include <BasicTurn.h>#include <BasicDash.h>#include <BasicKick.h>using namespace std;// NonPlayOnBackBallNonPlayOnBackBall::NonPlayOnBackBall(const WorldModel *worldModel): AdvancedAction(worldModel){}float NonPlayOnBackBall::getValue(const Library &library){ command = NULL; return 100;}void NonPlayOnBackBall::execute(Form &form, const Library &library){ Point movePoint; movePoint.x = -40; movePoint.y = -10; if (worldModel->getPlayMode() == PM_FREE_KICK && worldModel->getVirtualPlayMode() == VPM_GOALIE_CATCH_BALL && (worldModel->getBody().getPos() - movePoint).getMagnitude() > 3.1 && worldModel->getPlayModeRemainCycle() > 198) { command = new MoveCommand(AT_MOVE, movePoint); status = 0; } else { command = TurnToPoint(AT_NON_PLAY_ON_BACK_BALL, Point(52.5, 0), worldModel->getBody()).getCommand(); status = 0; }}int NonPlayOnBackBall::getStatus(){ return status;}// NonPlayOnGotoKickNonPlayOnGotoKick::NonPlayOnGotoKick(const WorldModel *worldModel): AdvancedAction(worldModel){}float NonPlayOnGotoKick::getValue(const Library &library){ Vector playerGoal; command = NULL; playerGoal.setByPoints(worldModel->getBody().getPos(), Point(50, 0)); if (worldModel->getPlayMode() == PM_KICK_OFF || worldModel->getPlayMode() == PM_FREE_KICK || worldModel->getPlayMode() == PM_KICK_IN || worldModel->getPlayMode() == PM_OFFSIDE_OPP || worldModel->getPlayMode() == PM_GOAL_KICK || worldModel->getPlayMode() == PM_CORNER_KICK || worldModel->getPlayMode() == PM_FREE_KICK_FAULT_OPP || worldModel->getPlayMode() == PM_CATCH_FAULT_OPP || worldModel->getPlayMode() == PM_BACK_PASS_OPP || worldModel->getPlayMode() == PM_PENALTY_READY || worldModel->getPlayMode() == PM_PENALTY_READY_OPP || worldModel->getPlayMode() == PM_PENALTY_SETUP || worldModel->getPlayMode() == PM_PENALTY_SETUP_OPP) { LOG << "GOTOKICK OK" << endl; FreeKickGotoPoint doGotoPoint(AT_NON_PLAY_ON_GOTO_KICK, worldModel->getBall().getPos(), playerGoal.getDirection(), worldModel->getBall().getSize(), worldModel->getBody()); if (doGotoPoint.getCommand()) delete doGotoPoint.getCommand(); status = doGotoPoint.getStatus(); } else { LOG << "GOTOKICK WHAT?(CHECK IT)" << endl; ForbiddenAreaGotoPoint doGotoPoint(AT_NON_PLAY_ON_GOTO_KICK, worldModel->getBall().getPos(), playerGoal.getDirection(), worldModel->getBall().getSize(), worldModel->getBody()); if (doGotoPoint.getCommand()) delete doGotoPoint.getCommand(); status = doGotoPoint.getStatus(); } return 100;}int NonPlayOnGotoKick::getStatus(){ return status;}void NonPlayOnGotoKick::execute(Form &form, const Library &library){ Vector playerGoal; command = NULL; playerGoal.setByPoints(worldModel->getBody().getPos(), Point(50, 0)); if (worldModel->getPlayMode() == PM_KICK_OFF || worldModel->getPlayMode() == PM_FREE_KICK || worldModel->getPlayMode() == PM_KICK_IN || worldModel->getPlayMode() == PM_OFFSIDE_OPP || worldModel->getPlayMode() == PM_GOAL_KICK || worldModel->getPlayMode() == PM_CORNER_KICK || worldModel->getPlayMode() == PM_FREE_KICK_FAULT_OPP || worldModel->getPlayMode() == PM_CATCH_FAULT_OPP || worldModel->getPlayMode() == PM_BACK_PASS_OPP || worldModel->getPlayMode() == PM_PENALTY_READY || worldModel->getPlayMode() == PM_PENALTY_READY_OPP || worldModel->getPlayMode() == PM_PENALTY_SETUP || worldModel->getPlayMode() == PM_PENALTY_SETUP_OPP) { FreeKickGotoPoint doGotoPoint(AT_NON_PLAY_ON_GOTO_KICK, worldModel->getBall().getPos(), playerGoal.getDirection(), worldModel->getBall().getSize(), worldModel->getBody()); command = doGotoPoint.getCommand(); if (command == NULL) command =new EmptyCommand(AT_NON_PLAY_ON_GOTO_KICK); status = doGotoPoint.getStatus(); } else { ForbiddenAreaGotoPoint doGotoPoint(AT_NON_PLAY_ON_GOTO_KICK, worldModel->getBall().getPos(), playerGoal.getDirection(), worldModel->getBall().getSize(), worldModel->getBody()); command = doGotoPoint.getCommand(); if (command == NULL) command = new EmptyCommand(AT_NON_PLAY_ON_GOTO_KICK); status = doGotoPoint.getStatus(); }}// NonPlayOnBeforeKickOffNonPlayOnBeforeKickOff::NonPlayOnBeforeKickOff(const WorldModel *worldModel): AdvancedAction(worldModel){}float NonPlayOnBeforeKickOff::getValue(const Library &library){ command = NULL; return 100;}void NonPlayOnBeforeKickOff::execute(Form &form, const Library &library){ //TODO : check distance if you are near and don't move and turn Point movePoint; command = NULL; movePoint = getMovePoint(); LOG << "NONPLAYON(BKO) movePoint : " << movePoint << endl; if (worldModel->getPlayMode() == PM_BEFORE_KICK_OFF && (movePoint - Point(0, 0)).getMagnitude() < 9.15) //FIXME :: 9 = serverparam { Vector moveVector; moveVector.setByPoints(Point(0, 0), movePoint); moveVector.setAsPolar(9.15 + 0.1, moveVector.getDirection()); movePoint = Point(0, 0) + moveVector; } if ((movePoint - worldModel->getBody().getPos()).getMagnitude() < 0.2 || (worldModel->getPlayMode() != PM_BEFORE_KICK_OFF && worldModel->getPlayMode() != PM_GOAL && worldModel->getPlayMode() != PM_GOAL_OPP)) { if (kickerFlag) command = TurnToPoint(AT_NON_PLAY_ON_BEFORE_KICK_OFF, Point(-52.5, 0), worldModel->getBody()).getCommand(); else command = TurnToPoint(AT_NON_PLAY_ON_BEFORE_KICK_OFF, Point(0, 0), worldModel->getBody()).getCommand(); } else { command = new MoveCommand(AT_MOVE, getMovePoint()); }}Point NonPlayOnBeforeKickOff::getMovePoint(unsigned uniNum){ switch (Player::uniNumToPostNum(uniNum)) { case 1: return Point(-47, 0); case 2: return Point(-13, -16); case 3: return Point(-16, -5); case 4: return Point(-16, 5); case 5: return Point(-13, 16); case 6: return Point(-4, 7.5); case 7: return Point(-4, -7.5); case 8: return Point(-12, 0); case 9: return Point(-0.5, 0); case 10: return Point(-.8, -15); case 11: return Point(-.8, 15); } assert(0); return Point(0, 0);}Point NonPlayOnBeforeKickOff::getMovePoint(){ return getMovePoint(worldModel->getBody().getUniNum()); }void NonPlayOnBeforeKickOff::setIsKicker(bool kickerFlagArg){ kickerFlag = kickerFlagArg;}// GoalieCatchOffenseGoalieCatchOffense::GoalieCatchOffense(const WorldModel *worldModel): AdvancedAction(worldModel){}float GoalieCatchOffense::getValue(const Library &library){ command = NULL; return 100;}void GoalieCatchOffense::execute(Form &form, const Library &library){ Point homePoint; Point movePoint; command = NULL; homePoint = getHomePoint(); LOG << "GoalieCatchOffense(BKO) homePoint : " << homePoint << endl; DashNormalGotoPoint doGotoPoint(AT_GOALIE_CATCH_OFFENSE, homePoint, 1.6, worldModel->getBody()); if (worldModel->getBody().isGoalie()) { movePoint.x = -40; movePoint.y = 18; if ((worldModel->getBody().getPos() - movePoint).getMagnitude() > 1.8) { LOG << "GoalieCatchOffense goalie stat=1" << endl; command = new MoveCommand(AT_GOALIE_CATCH_OFFENSE, movePoint); status = 1; } else { LOG << "GoalieCatchOffense goalie stat=0" << endl; command = new EmptyCommand(AT_GOALIE_CATCH_OFFENSE); status = 0; } return; } if (doGotoPoint.getMode() == CT_EMPTY) { if (doGotoPoint.getCommand()) delete doGotoPoint.getCommand(); LOG << "GoalieCatchOffense player stat=turntoball" << endl; command = TurnToPoint(AT_GOALIE_CATCH_OFFENSE, worldModel->getBall().getPos(), worldModel->getBody() ,5). getCommand(); } else { command = doGotoPoint.getCommand(); }}Point GoalieCatchOffense::getHomePoint(unsigned uniNum){ if (worldModel->getPlayMode() == PM_GOAL_KICK) { switch (Player::uniNumToPostNum(uniNum)) { case 1: return Point(-47, 0); case 2: return Point(-30, -20); case 3: if (worldModel->getBall().getPos().getY() > 0) return Point(-33, -2); else return Point(-39, -11); case 4: if (worldModel->getBall().getPos().getY() > 0) return Point(-39, 11); else return Point(-33, 2); case 5: return Point(-30, 20); case 6: return Point(-18, 15); case 7: return Point(-10, -15); case 8: if (worldModel->getBall().getPos().getY() > 0) return Point(-33, 11); else return Point(-33, -11); case 9: return Point(-1, 0); case 10: return Point(-1, -20); case 11: return Point(-1, 20); } } else { switch (Player::uniNumToPostNum(uniNum)) { case 1: return Point(-47, 0); case 2: return Point(-33, -22); case 3: return Point(-33, 0); case 4: return Point(-33, 8); case 5: return Point(-33, 28); case 6: return Point(-18, 28); case 7: return Point(-18, -18); case 8: return Point(-30, 7); case 9: return Point(-2, 7); case 10: return Point(-2, -15); case 11: return Point(-2, 28); } } assert(0); return Point(0, 0);}Point GoalieCatchOffense::getHomePoint(){ return getHomePoint(worldModel->getBody().getUniNum()); }int GoalieCatchOffense::getStatus(){ return status;}// HoldBallHoldBall::HoldBall(const WorldModel *worldModel): AdvancedAction(worldModel){}float HoldBall::getValue(const Library &library){ if (worldModel->getPlayModeRemainCycle() > 120) { // wait LOG << "HoldBall::getValue (wait/value = 67)" << endl; command = NULL; return 67; } else { // ready to pass LOG << "HoldBall::getValue (pass/value = 35)" << endl; command = NULL; return 35; }}void HoldBall::execute(Form &form, const Library &library){ LOG << "HoldBall::execute" << endl; command = KickToPointArriveVelocity(AT_HOLD_BALL, worldModel->getBall().getPos(), 0, worldModel->getBall(), worldModel->getBody()).getCommand();}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -