oppositeMoves(m1, m2) {
    return (
      !!m1 &&
      !(ChessRules.PIECES.includes(m2.appear[0].p)) &&
      m2.vanish.length == 1 &&
      !m2.end.released &&
      m1.start.x == m2.end.x &&
      m1.end.x == m2.start.x &&
      m1.start.y == m2.end.y &&
      m1.end.y == m2.start.y
    );
  }
// Does m2 un-do m1 ? (to disallow undoing union moves)
Does m2 un-do m1 . (to disallow undoing union moves)
Does m2 un - do m1 . ( to disallow undoing union moves )
oppositeMoves(m1, m2) {
    return (
      !!m1 &&
      !(ChessRules.PIECES.includes(m2.appear[0].p)) &&
      m2.vanish.length == 1 &&
      !m2.end.released &&
      m1.start.x == m2.end.x &&
      m1.end.x == m2.start.x &&
      m1.start.y == m2.end.y &&
      m1.end.y == m2.start.y
    );
  }
oppositeMoves ( m1 , m2 ) { return ( ! ! m1 && ! ( ChessRules . PIECES . includes ( m2 . appear [ 0 ] . p ) ) && m2 . vanish . length == 1 && ! m2 . end . released && m1 . start . x == m2 . end . x && m1 . end . x == m2 . start . x && m1 . start . y == m2 . end . y && m1 . end . y == m2 . start . y ) ; }
Does m2 un-do m1 ?
Does m2 un - do m1 ?