@Override
  public boolean equals(Object obj) {
    if (obj == this) return true;
    if (obj == null || obj.getClass() != this.getClass()) return false;
    return asInt() == ((Direction)obj).asInt();
  }
@Override
  public boolean equals(Object obj)