public void ReShuffle(int[] unShuffleData, Action onFinished) { var shuffleAnimationWaiter = new FinishableGroupWaiter(onFinished); var reShuffledCards = new CardController[unShuffleData.Length]; for (int i = 0, iMax = unShuffleData.Length; i < iMax; ++i) { CardController lastCard = reShuffledCards[i] = _Cards[unShuffleData[i]]; lastCard.ViewFSM.SetTextVisibility(true); AnimateShuffle(lastCard, i); shuffleAnimationWaiter.AddFinishable(lastCard.Holder); } if (_shuffleAnimationCamera != null && _shuffleAnimationOriginPoint != null) { shuffleAnimationWaiter.AddFinishable( _shuffleAnimationCamera.AddPositionPingPongTween(_shuffleAnimationCamera.transform.position + Vector3.up * _CardAnimationData.CameraShuffleTweenUpAmount) .SetDuration(_CardAnimationData.DeckShuffleExplosionDuration)); } _Cards.Clear(); _Cards.AddRange(reShuffledCards); shuffleAnimationWaiter.Ready = true; if (CardFlipAudio != null) { CardFlipAudio.PlayOneShot(_cardShuffleClip); StartCoroutine(PlayCardRuffleClip()); } }
private void SetCardStates(Action onFinished = null) { FinishableGroupWaiter cardStateTransitionWaiter = null; if (onFinished != null) { cardStateTransitionWaiter = new FinishableGroupWaiter(onFinished); } for (int i = 0, iMax = Hand.ReadOnlyCards.Count; i < iMax; ++i) { TweenHolder transitionTweenHolder; if (_selectedCardIndexes.Contains(i)) { transitionTweenHolder = Hand.ReadOnlyCards[i].ViewFSM.SetAnimState(CardController.CardViewFSM.AnimState.SELECTED); } else if (_allowedCardIndexes.Contains(i) && _selectedCardIndexes.IsEmpty()) { transitionTweenHolder = Hand.ReadOnlyCards[i].ViewFSM.SetAnimState(CardController.CardViewFSM.AnimState.ABLE_TO_BE_SELECTED); } else { transitionTweenHolder = Hand.ReadOnlyCards[i].ViewFSM.SetAnimState(CardController.CardViewFSM.AnimState.VISIBLE); } cardStateTransitionWaiter.IfIsNotNullThen(c => c.AddFinishable(transitionTweenHolder)); } _submitCardsButton.SetActive(_allowedCardIndexes.Count <= 0 || (!Hand.ReadOnlyCards.Exists(c => c.Button.IsBeingDragged) && (_MainGameModtroller.OptionalPlayRule || !_selectedCardIndexes.IsEmpty()))); cardStateTransitionWaiter.IfIsNotNullThen(c => c.Ready = true); }
public void SetCardsAnimStates(CardController.CardViewFSM.AnimState newState, Action onFinished) { _cardsAnimState = newState; var animGroupWaiter = new FinishableGroupWaiter(onFinished); for (int i = 0, iMax = _Cards.Count; i < iMax; ++i) { animGroupWaiter.AddFinishable(_Cards[i].ViewFSM.SetAnimState(newState)); } animGroupWaiter.Ready = true; }
private IEnumerator RefillInternal(CardHolder otherHolder, int numCardsToFill, Action onFinished) { var deckRefillTweenWaiter = new FinishableGroupWaiter(onFinished); for (int i = 0; i < numCardsToFill; ++i) { TweenHolder refillTween; MoveCard(ReadOnlyCards.LastIndex(), otherHolder, out refillTween, true, 0); deckRefillTweenWaiter.AddFinishable(refillTween); refillTween.SetDuration(_CardAnimationData.DeckFillDurationPerCard); yield return(new WaitForSeconds(_CardAnimationData.DeckRefillDelayPerCard)); } deckRefillTweenWaiter.Ready = true; }
private IEnumerator RefillWithInternal(CardHolder otherHolder, int numCardsToLeave, Action onFinished) { if (numCardsToLeave < otherHolder.ReadOnlyCards.Count) { var deckRefillTweenWaiter = new FinishableGroupWaiter(onFinished); while (otherHolder.ReadOnlyCards.Count > numCardsToLeave) { TweenHolder refillTween; otherHolder.MoveCard(0, this, out refillTween, true); deckRefillTweenWaiter.AddFinishable(refillTween); refillTween.SetDuration(_CardAnimationData.DeckFillDurationPerCard); yield return(new WaitForSeconds(_CardAnimationData.DeckRefillDelayPerCard)); } deckRefillTweenWaiter.Ready = true; } else { onFinished(); } }
public void Shuffle(out int[] unShuffleData, Action onFinished) { var cardsToShuffleFrom = new List <CardController>(_Cards); var cardsToShuffleTo = new List <CardController>(_Cards.Count); unShuffleData = new int[_Cards.Count]; var shuffleAnimationWaiter = new FinishableGroupWaiter(onFinished); for (int i = 0; cardsToShuffleFrom.Count > 0; ++i) { int index = Mathf.RoundToInt(UnityEngine.Random.value * (cardsToShuffleFrom.Count - 1)); cardsToShuffleTo.Add(cardsToShuffleFrom[index]); cardsToShuffleFrom.RemoveAt(index); unShuffleData[i] = _Cards.IndexOf(cardsToShuffleTo.Last()); CardController lastCard = cardsToShuffleTo.Last(); lastCard.ViewFSM.SetTextVisibility(true); AnimateShuffle(lastCard, i); shuffleAnimationWaiter.AddFinishable(lastCard.Holder); } if (ShuffleAnimationCamera != null && _shuffleAnimationOriginPoint != null) { shuffleAnimationWaiter.AddFinishable( _shuffleAnimationCamera.AddPositionPingPongTween(_shuffleAnimationCamera.transform.position + Vector3.up * _CardAnimationData.CameraShuffleTweenUpAmount) .SetDuration(_CardAnimationData.DeckShuffleExplosionDuration)); } _Cards.Clear(); _Cards.AddRange(cardsToShuffleTo); shuffleAnimationWaiter.Ready = true; if (CardFlipAudio != null) { CardFlipAudio.PlayOneShot(_cardShuffleClip); StartCoroutine(PlayCardRuffleClip()); } }
public IEnumerator RedoPlayerTurn(Action onFinished) { TurnCommandBundle bundle = _redoStack.Pop(); var animationWaiter = new FinishableGroupWaiter(onFinished); for (LinkedListNode <Command> node = bundle.First; node != null; node = node.Next) { if (node.Value is IFinishable) { bool isTweenedCommand = node.Value is TweenedCommand; if (isTweenedCommand) { node.Value.Redo(); } else { yield return(new WaitUntil(() => animationWaiter.NumFinishableToWaitFor <= 0)); } animationWaiter.AddFinishable((IFinishable)node.Value); if (isTweenedCommand) { yield return(new WaitForSeconds(_cardAnimationData.UndoTurnDelay)); } else { bool finished = false; ((IFinishable)node.Value).AddToOnFinished(() => finished = true); node.Value.Redo(); yield return(new WaitUntil(() => finished == true)); } } else { node.Value.Redo(); } } _undoStack.Push(bundle); animationWaiter.Ready = true; }