@Override
    public Command planNextMove(Info info) {
        try{
            this.enemies = info.getEnemies();
            this.bullets = info.getGrenades();

            this.position.x = info.getX();
            this.position.y = info.getY();
            this.direction_vector = this.getVectorFromAngle(info.getDirection());
            
            if(this.position.x - GameData.TANK_SIZE/2 < 50 || this.position.y - GameData.TANK_SIZE/2 < 50
                    || this.position.x + GameData.TANK_SIZE/2 > GameData.GAME_WIDTH - 50 || this.position.y + GameData.TANK_SIZE/2 > GameData.GAME_HEIGTH - 50) {
                this.direction_vector.x *= -1;
                this.direction_vector.y *= -1;
                angle = 360 - this.getAngleFromVector(this.direction_vector);
                return new Command(CommandType.MOVE_FORWARD, CommandType.TURN_LEFT, angle, CommandType.NONE);
            }
            
            if(this.evading) {
                this.timer.start();
                if(this.adjust_evading){
                    this.adjust_evading = false;
                    return new Command(CommandType.MOVE_FORWARD, CommandType.TURN_LEFT, angle, CommandType.NONE);
                }
                
                return new Command(CommandType.MOVE_FORWARD, CommandType.NONE, angle, CommandType.NONE);
            }
            
            this.findDangerousBullets();
            
            if(!this.bullets_in_radius.isEmpty()) {
                this.avoidBullet();
            } else {
                this.closest_tank = this.findClosestTank();
                if(this.closest_tank != null) {
                    Point2D.Float dir_vec = this.pursuitVector(this.closest_tank);
                    angle = 360 + this.getAngleFromVector(direction_vector) - this.getAngleFromVector(dir_vec);
                    return new Command(CommandType.MOVE_FORWARD, CommandType.TURN_LEFT, angle, CommandType.SHOOT);
                }
            }
        }catch(Exception e) {
            System.err.println(e.getMessage());
        }
               
        return new Command(CommandType.MOVE_FORWARD, CommandType.NONE, 0, CommandType.NONE);
    }