Пример #1
0
        public void KillBoardCard(BoardUnit cardToDestroy)
        {
            if (cardToDestroy == null)
            {
                return;
            }

            if (_lastBoardUntilOnPreview != null && cardToDestroy == _lastBoardUntilOnPreview)
            {
                DestroyCardPreview();
            }

            cardToDestroy.Transform.position = new Vector3(cardToDestroy.Transform.position.x,
                                                           cardToDestroy.Transform.position.y, cardToDestroy.Transform.position.z + 0.2f);

            _timerManager.AddTimer(
                x =>
            {
                cardToDestroy.Transform.DOShakePosition(.7f, 0.25f, 10, 90, false, false);

                string cardDeathSoundName =
                    cardToDestroy.Card.LibraryCard.Name.ToLower() + "_" + Constants.CardSoundDeath;
                float soundLength = 0f;

                if (!cardToDestroy.OwnerPlayer.Equals(_gameplayManager.CurrentTurnPlayer))
                {
                    _soundManager.PlaySound(Enumerators.SoundType.CARDS, cardDeathSoundName,
                                            Constants.ZombieDeathVoDelayBeforeFadeout, Constants.ZombiesSoundVolume,
                                            Enumerators.CardSoundType.DEATH);
                    soundLength = _soundManager.GetSoundLength(Enumerators.SoundType.CARDS, cardDeathSoundName);
                }

                _timerManager.AddTimer(
                    t =>
                {
                    cardToDestroy.OwnerPlayer.BoardCards.Remove(cardToDestroy);
                    cardToDestroy.OwnerPlayer.RemoveCardFromBoard(cardToDestroy.Card);
                    cardToDestroy.OwnerPlayer.AddCardToGraveyard(cardToDestroy.Card);

                    cardToDestroy.InvokeUnitDied();
                    cardToDestroy.Transform.DOKill();
                    Object.Destroy(cardToDestroy.GameObject);

                    _timerManager.AddTimer(
                        f =>
                    {
                        UpdatePositionOfBoardUnitsOfOpponent();
                        UpdatePositionOfBoardUnitsOfPlayer(_gameplayManager.CurrentPlayer.BoardCards);
                    },
                        null,
                        Time.deltaTime);
                },
                    null,
                    soundLength);
            });
        }