public HashSet <Move> GetAvailableMoves() { canAttack = false; var pieces = GetPieces(); var allMoves = new HashSet <Move>(); if (activePiece != null) { return(activePiece.GetAvailableAttacks(board)); } foreach (var piece in pieces) { allMoves.UnionWith(piece.GetMovesOrAttacks(board)); } if (this.canAttack) { allMoves.RemoveWhere((a) => a.attackedPiece == null); } return(allMoves); }