コード例 #1
0
 public void Checked(PuzzleModel puzzleModel)
 {
     _puzzleMovementState = PuzzleMovementState.None;
     _movementDisposable.DisposeSafe();
     _movePositions.Clear();
     _gamePageView.ContainPuzzle(this);
 }
コード例 #2
0
        public void Move(PositionModel positionModel)
        {
            if (_movePositions.Contains(positionModel))
            {
                return;
            }
            _movePositions.Enqueue(positionModel);

            if (_puzzleMovementState != PuzzleMovementState.None)
            {
                return;
            }
            SubscribeMovementAction();

            void SubscribeMovementAction()
            {
                _nowPosition         = _movePositions.Peek();
                _puzzleMovementState = PuzzleMovementState.Moving;

                var targetPos = _gamePageView.GetLandElement(_nowPosition).transform.position;

                _movementDisposable.DisposeSafe();
                _movementDisposable = Observable.EveryUpdate()
                                      .TakeWhile(_ => _movePositions.Any())
                                      .Subscribe(_ =>
                {
                    transform.MoveTowards(transform.position, targetPos, Time.deltaTime);

                    if (_puzzleMovementState == PuzzleMovementState.Moving &&
                        Vector2.Distance(transform.position, targetPos) <= GameConstants.PuzzleMovementSpeed)
                    {
                        _puzzleMovementState = PuzzleMovementState.Almost;
                        if (!PuzzleModel.PositionModel.Equals(_nowPosition))
                        {
                            PuzzleModel.PositionModel.Set(_nowPosition);
                        }
                    }

                    if (_puzzleMovementState == PuzzleMovementState.Almost &&
                        Vector2.Distance(transform.position, targetPos) <= float.Epsilon)
                    {
                        if (!_movePositions.Any())
                        {
                            return;
                        }
                        _nowPosition         = _movePositions.Dequeue();
                        _puzzleMovementState = PuzzleMovementState.Moving;
                    }
                }, () =>
                {
                    _puzzleMovementState = PuzzleMovementState.None;
                    _puzzleViewmodel.CompleteAlignedPuzzles(PuzzleModel);
                    _movePositions.Clear();
                });
            }
        }
コード例 #3
0
        /// <summary>
        /// Reset puzzle data.
        /// </summary>
        public void InitializePuzzle()
        {
            _puzzleMovementState = PuzzleMovementState.None;
            _movementDisposable.DisposeSafe();
            gameObject.SetActive(true);
            specialObj.Foreach(x => x.SetActive(false));
            _movePositions.Clear();
            var targetPos = _gamePageView.GetLandElement(PuzzleModel.PositionModel).transform.position;

            transform.position = targetPos;
            ChangeShape(PuzzleModel);
        }
コード例 #4
0
 private void Awake()
 {
     specialObj.Foreach(x => x.SetActive(false));
     _puzzleMovementState = PuzzleMovementState.None;
 }