@Override
    public boolean equals(Object obj) {
        if (obj == null) return false;
        if (getClass() != obj.getClass()) return false;
        final Location other = (Location) obj;

        if (this.level != other.level && (this.level == null || !this.level.equals(other.level))) return false;
        if (this.x != other.x) return false;
        if (this.y != other.y) return false;
        if (!this.direction.equals(other.direction)) return false;
        return true;
    }