public void Checked(PuzzleModel puzzleModel) { _puzzleMovementState = PuzzleMovementState.None; _movementDisposable.DisposeSafe(); _movePositions.Clear(); _gamePageView.ContainPuzzle(this); }
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(); }); } }
/// <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); }
private void Awake() { specialObj.Foreach(x => x.SetActive(false)); _puzzleMovementState = PuzzleMovementState.None; }