/// <summary> /// 返却されるPathには開始地点は含まれない。 /// </summary> /// <param name="startPosition"></param> /// <param name="viaPosition"></param> /// <param name="endPosition"></param> /// <param name="pieces"></param> /// <param name="start2ViaPieceMovement"></param> /// <param name="via2EndPieceMovement"></param> /// <returns></returns> public static IEnumerable <IntegerVector2> CalculatePath(IntegerVector2 startPosition, IntegerVector2 viaPosition, IntegerVector2 endPosition, IReadOnlyPositionArrayAccessor <IReadOnlyPiece> pieces, PieceMovement start2ViaPieceMovement, PieceMovement via2EndPieceMovement) { //startPositionは各直線ではなく全体の開始地点でなければならない //インスタンス変数化? bool isFrontPlayersPiece = IsFrontPlayersPiece(pieces, startPosition); if (viaPosition == endPosition) { return(CalculateStraightPath(startPosition, endPosition, start2ViaPieceMovement, isFrontPlayersPiece)); } return(CalculateBrockenPath(startPosition, viaPosition, endPosition, start2ViaPieceMovement, via2EndPieceMovement, isFrontPlayersPiece)); }
static bool IsFrontPlayersPiece(IReadOnlyPositionArrayAccessor <IReadOnlyPiece> pieces, IntegerVector2 startPosition) => pieces.Read(startPosition).Owner != null && pieces.Read(startPosition).Owner.Encampment == Encampment.Front;
public PieceMoveVerifier(IReadOnlyPositionArrayAccessor <IReadOnlyPiece> pieces) { Assert.IsNotNull(pieces); this.pieces = pieces; }