/// <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); }