public void MoveCard(int cardIndex, CardHolder other, out TweenHolder outTween, bool?visibleDuringTween, int indexToInsertAt = -1) { CardController cardBeingMoved = _Cards[cardIndex]; _Cards.RemoveAt(cardIndex); if (!other._Cards.InsertionIndexIsValid(indexToInsertAt)) { indexToInsertAt = other._Cards.Count; } other.AddCard(cardBeingMoved, indexToInsertAt); cardBeingMoved.ViewFSM.SetAnimState(other._cardsAnimState, performTweens: false); cardBeingMoved.ViewFSM.SetTextVisibility(visibleDuringTween ?? other._cardsTextVisibility); outTween = cardBeingMoved.AddOffsetHeightTween(_cardAnimationData.GeneralCardMoveHeight, other.GetFinalPositionOfCardAtIndex(indexToInsertAt), true) .AddLocalRotationTween(Vector3.one * 360.0f + cardBeingMoved.ViewFSM.GetAnimRotationOffset()) .AddIncrementalScaleTween(cardBeingMoved.ViewFSM.GetAnimScale()) .SetDuration(_cardAnimationData.GeneralCardMoveDuration) .SetShouldChangeLayer(true) .AddToOnFinishedOnce(() => other.OnCardRecieveTweenFinished(cardBeingMoved)); OnCardSent(cardBeingMoved); other.OnCardRecieveTweenBegan(cardBeingMoved); if (CardFlipAudio != null) { CardFlipAudio.Play(); } }
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()); } }
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 void IntroduceCard(CardController cardToIntroduce, out TweenHolder outTween, bool fancyEntrance = false, float angleOffsetForFancyEntrance = 0.0f) { outTween = null; AddCard(cardToIntroduce); cardToIntroduce.ViewFSM.SetAnimState(_cardsAnimState, performTweens: false); if (fancyEntrance) { float cardCreationRadius = _cardAnimationData.DeckFillFancyIntroCardSpawnDistance; float rightDistance = cardCreationRadius * Mathf.Cos(angleOffsetForFancyEntrance); float forwardDistance = cardCreationRadius * Mathf.Sin(angleOffsetForFancyEntrance); cardToIntroduce.transform.position = transform.position + Vector3.right * rightDistance + Vector3.forward * forwardDistance; outTween = cardToIntroduce.AddOffsetHeightTween(_cardAnimationData.DeckFillFancyIntroTweenHeight, GetCardPositionAtIndex(_Cards.LastIndex()), true) .AddLocalRotationTween(360.0f * Vector3.one + cardToIntroduce.ViewFSM.GetAnimRotationOffset()) .SetDuration(_cardAnimationData.DeckFillDurationPerCard) .SetShouldChangeLayer(true) .AddToOnFinishedOnce(() => OnCardRecieveTweenFinished(cardToIntroduce)); OnCardRecieveTweenBegan(cardToIntroduce); } else { cardToIntroduce.transform.ResetLocal(); } if (CardFlipAudio != null) { CardFlipAudio.Play(); } }
private IEnumerator PlayCardRuffleClip() { yield return(new WaitForSeconds(Mathf.Max(0.0f, _CardAnimationData.DeckShuffleExplosionDuration - _cardRuffleClip.length))); CardFlipAudio.PlayOneShot(_cardRuffleClip); }