Пример #1
0
        /// <summary>
        /// Провести анимацию получения урона
        /// </summary>
        /// <param name="onComplete">Метод, вызываемый по завершению</param>
        private void AnimateTakeDamage(Action onComplete = null)
        {
            if (ZoomController.IsZoomed)
            {
                Info.RefreshData();
            }

            onComplete ??= () => { };

            var hpTransform = Info.Defense.transform;
            var oldPosition = hpTransform.position;
            var oldScale    = hpTransform.localScale;
            var oldColor    = Info.Defense.color;

            Info.ChangeDefenseColor(Color.red);
            Observable
            // двигаем текст и масштабируем
            .WhenAll(GetMoveAndScaleHpObservable(transform.position, new Vector3(5, 5, 1)))

            // обновляем данные и ждем
            .DoOnCompleted(Info.RefreshData)
            .Delay(new TimeSpan(0, 0, 1))

            // возвращаем позицию и масштаб текста
            .ContinueWith(GetMoveAndScaleHpObservable(oldPosition, oldScale).WhenAll())

            // возвращаем цвет текста
            .DoOnCompleted(() => Info.ChangeDefenseColor(oldColor))
            .Subscribe(_ => {}, onComplete);
        }