public EnemyInfo parseEnemyInfo() throws BotBadBaseException { final BufferedImage image = platform.screenshot(ENEMY_LOOT); final EnemyInfo info = new EnemyInfo(); info.setGold(parseGold(image)); info.setElixir(parseElixir(image)); info.setDarkElixir(parseDarkElixir(image)); info.setTrophyWin(parseTrophyWin(image)); info.setTrophyDefeat(parseTrophyDefeat(image)); return info; }
public FiringDecision getFiringDecision() { Vector3f playerPos = bot.getBotPosition(); EnemyInfo chosen = null; float chosenRisk = Float.MAX_VALUE; float maxDist = -1; float maxError = 0; LinkedList<EnemyInfo> eligible = new LinkedList<EnemyInfo>(); for (EnemyInfo ei : bot.kb.enemyInformation.values()) { if (ei.getBestVisibleEnemyPart(bot) == null) { continue; } if (ei.lastUpdateFrame + bot.cConfig.maxEnemyInfoAge4Firing < bot.getFrameNumber()) { continue; } float dist = CommFun.getDistanceBetweenPositions(playerPos, ei.getObjectPosition()); float error = ei.lastPredictionError; if (dist > maxDist) { maxDist = dist; } if (error > maxError) { maxError = error; } eligible.add(ei); } for (EnemyInfo ei : eligible) { float dist = CommFun.getDistanceBetweenPositions(playerPos, ei.getObjectPosition()); float error = ei.lastPredictionError; float risk = dist / maxDist + error / maxError; if (chosenRisk > risk) { chosenRisk = risk; chosen = ei; } } if (chosen == null) { return null; } actionDistance = CommFun.getDistanceBetweenPositions(playerPos, chosen.getObjectPosition()); return new FiringDecision(chosen, -1); }