public PlayerMovePieceUseCase(IGame game, IPlayer player, IValueInputProvider <int> inputProvider, ILogger logger) { this.game = game; this.player = player; this.inputProvider = inputProvider; this.logger = logger; }
public PieceMoveTransaction(IPlayer player, VerifiedMove verifiedMove, PositionArrayAccessor <IPiece> pieces, IFieldEffectChecker fieldEffectChecker, IValueInputProvider <int> valueProvider, bool isTurnEnd) { Assert.IsNotNull(verifiedMove); Assert.IsNotNull(verifiedMove.Player); Assert.IsNotNull(player); Assert.AreEqual(verifiedMove.Player, player); Assert.IsNotNull(pieces); Assert.IsNotNull(fieldEffectChecker); Assert.IsNotNull(valueProvider); this.player = player; this.pieces = pieces; this.valueProvider = valueProvider; startPosition = verifiedMove.MovingPiece.Position; //worldPathに開始地点は含まれないのでこの方法で開始地点を取得 viaPosition = verifiedMove.ViaPositionNode; endPosition = verifiedMove.WorldPath.Last(); this.worldPath = verifiedMove.WorldPath; this.isTurnEnd = isTurnEnd; pieceMover = new Mover(pieces); waterEntryChecker = new WaterEntryChecker(3, fieldEffectChecker, valueProvider); moveFinisher = new MoveFinisher(pieceMover, new Capturer(pieces)); }
public WaterEntryChecker(int threshold, IFieldEffectChecker fieldEffectChecker, IValueInputProvider <int> valueProvider) { this.threshold = threshold; this.fieldEffectChecker = fieldEffectChecker; this.valueProvider = valueProvider; }
public async UniTask <PieceMoveResult> MovePiece(PublicDataType.IntegerVector2 startPosition, PublicDataType.IntegerVector2 viaPosition, PublicDataType.IntegerVector2 endPosition, IPlayer player, IValueInputProvider <int> valueProvider) { if (isLocked) { return(new PieceMoveResult(false, false, null)); } var verifiedMove = moveVerifier.VerifyMove(player, startPosition, viaPosition, endPosition); if (verifiedMove == VerifiedMove.InvalidMove) { return(new PieceMoveResult(false, false, null)); } //1ターンに複数回動作する駒のためのロジック //ターン管理をここでするな! var movingPiece = verifiedMove.MovingPiece; if (movingPiece == operationStatus.PreviousPiece) { operationStatus.AddCount(); } else { if (operationStatus.PreviousPiece != null) { return(new PieceMoveResult(false, false, null)); } else { operationStatus.Reset(movingPiece); } } bool isTurnEnd = operationStatus.Count >= movingPiece.NumberOfMoves; if (isTurnEnd) { operationStatus.Reset(null); } isLocked = true; IPieceMoveTransaction pieceMoveAction = pieceMoveActionFactory.Create(player, verifiedMove, pieces, fieldEffectChecker, valueProvider, isTurnEnd); PieceMoveResult result = await pieceMoveAction.StartMove(); if (result.isSuccess) { onEveryValueChanged.OnNext(Unit.Default); } isLocked = false; return(result); }
public static IMovePieceUseCase Create(FirstOrSecond firstOrSecond, IValueInputProvider <int> valueProvider) { var game = GameController.Instance.Game; if (game == null) { return(null); } var player = game.GetPlayer(firstOrSecond); var logger = GameController.Instance.SystemLogger; return(new PlayerMovePieceUseCase(game, player, valueProvider, logger.ToUseCaseLogger())); }
//PositionArrayAccessor<IPiece> pieces, IFieldEffectChecker fieldEffectCheckerをコンストラクタの引数にすることも検討 public IPieceMoveTransaction Create(IPlayer player, VerifiedMove verifiedMove, PositionArrayAccessor <IPiece> pieces, IFieldEffectChecker fieldEffectChecker, IValueInputProvider <int> valueProvider, bool isTurnEnd) { return(new PieceMoveTransaction(player, verifiedMove, pieces, fieldEffectChecker, valueProvider, isTurnEnd)); }
public UniTask <PieceMoveResult> MovePiece(IntegerVector2 startPosition, IntegerVector2 viaPosition, IntegerVector2 endPosition, IPlayer player, IValueInputProvider <int> valueProvider) { throw new NotImplementedException(); }
protected void Start() { valueProvider = GetComponent <IValueInputProvider <int> >(); GameController.Instance.OnGameReset.TakeUntilDestroy(this).Subscribe(OnGameReset); }
public UniTask <PieceMoveResult> MovePiece(PublicDataType.IntegerVector2 startPosition, PublicDataType.IntegerVector2 lastPosition, IPlayer player, IValueInputProvider <int> valueProvider) => MovePiece(startPosition, lastPosition, lastPosition, player, valueProvider);