private void fireAt(ScannedRobotEvent event) {
        if (event.getName().equals(Observer.TARGET)) {

            // paint target with a red circle
            Point2D.Double location = MathUtils.getLocation(robot, event.getBearingRadians(), event.getDistance());
            Util.paintCircle(robot, location.getX(), location.getY(), 30, Color.red);

            distanceToTarget = event.getDistance();


            double absoluteBearing = robot.getHeadingRadians()
                    + event.getBearingRadians();

            double BulletFudgeFactor = this.bulletPower * 3;

            robot.setTurnGunRightRadians(
                Utils.normalRelativeAngle(
                    absoluteBearing - robot.getGunHeadingRadians() + (event.getVelocity() * Math.sin(event.getHeadingRadians() - absoluteBearing) / BulletFudgeFactor)
                )
            );

            if (NearestNeighborSelector.disabledBotExists()) {
                this.bulletPower = Rules.MIN_BULLET_POWER; // set bullet power to min, and snipe disabled robot
            } else if (event.getDistance() < this.range) {
                this.bulletPower = Rules.MAX_BULLET_POWER; // set bullet power to max when target is close
            } else {
                //this.bulletPower = Rules.MIN_BULLET_POWER; // set bullet power to min when target is far
                return;
            }

            robot.setFire(this.bulletPower);
        }
    }