private void move() {
        if (!arrived) {
            if (Point2D.distance(tileX, tileY, path.peek().getX(), path.peek().getY()) < speed) {
                nextTile();
                if (arrived) {
                    return;
                }
            }
            if (angle != targetAngle) {
                turnTowardsTargetAngle();
            } else if (path.peek().getEnemy() == null || path.peek().getEnemy() == this) {
                tileX += speed * Math.cos(angle);
                tileY += speed * Math.sin(angle);
            } else if (Point2D.distance(path.peek().getEnemy().getTileX(), path.peek().getEnemy().getTileY(), path.peek().getX(), path.peek().getY()) > 1) {
                // UGLY WORKAROUND FOR A BUG, compensates for insufficient tile occupation removal
                path.peek().setEnemy(this);
            }
        }
    }