private static Direction directionToNextPoint(Trooper forTrooper) {
        PathHelper pathHelper = pathesToCurrentPosition.get(forTrooper.getTeammateIndex());
        if (pathHelper == null && !calculated.contains(forTrooper.getTeammateIndex())) {

            if (freeCliches.isEmpty()) {
                freeCliches = freeLocations(pathToTarget.getCurrentLocation());
                troopsToReach = isInit ? INITIAL_TROOPER_SIZE : aliveTroopers.size();
                isInit = false;
            }

            List<LocationVertex> path = movementHelper.pathTo(forTrooper.getX(), forTrooper.getY(),
                    retriveLocation());
            pathHelper = new PathHelper(path);
            pathesToCurrentPosition.put(forTrooper.getTeammateIndex(), pathHelper);
            calculated.add(forTrooper.getTeammateIndex());
        }
        if (pathHelper == null) {
            return Direction.CURRENT_POINT;
        }

        if (pathHelper.isTargetLocationAchieved()) {
            pathesToCurrentPosition.remove(forTrooper.getTeammateIndex());
            --troopsToReach;
            if (troopsToReach < 2) { //TODO:temprorary changed from 1 to 2... think what positions should be returned
                pathToTarget.moveCurrentPosition();
                calculated.clear();
                freeCliches.clear();
                pathesToCurrentPosition.clear();
            }
            return Direction.CURRENT_POINT;
        }

        return pathHelper.getDirection();
    }