// reset after Add MoveGenState Reset() { From = Position; To = null; _move = MoveModel.Create(TurnPlayer, Position, Piece); _changes.Clear(); _captures.Clear(); return(this); }
// generate actual moves if not done already during condition checking // assumes CurrentPlayer set already internal void GenerateMoves() { if (!_donemovegen) { LegalMoves.AddRange(_game.CreateDrops(this)); LegalMoves.AddRange(_game.CreateMoves(this)); var passoption = _game.Def.GetProperty("pass turn") ?? OptionValue.False; var allowpass = passoption.Equals(OptionValue.True) || (LegalMoves.Count == 0 && passoption.Equals(OptionValue.Forced)); if (allowpass) { LegalMoves.Insert(0, MoveModel.Create(Turn.TurnPlayer, PositionValue.None, PieceValue.None)); } _donemovegen = true; } }