63 lines
1.4 KiB
C#
63 lines
1.4 KiB
C#
using System;
|
|
using System.Collections;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace Ingvar.LiveWatch.TowerDefenceDemo
|
|
{
|
|
public class WaveEffect : MonoBehaviour
|
|
{
|
|
[SerializeField] private float _growDuration = 0.1f;
|
|
[SerializeField] private float _stayDuration = 0.1f;
|
|
[SerializeField] private Transform _wave;
|
|
|
|
private float _radius;
|
|
private Coroutine _effectRoutine;
|
|
|
|
private void OnEnable()
|
|
{
|
|
SetSizeRaw(0);
|
|
}
|
|
|
|
public void SetRadius(float radius)
|
|
{
|
|
_radius = radius;
|
|
}
|
|
|
|
public void Play()
|
|
{
|
|
SetSizeRaw(0);
|
|
|
|
if (_effectRoutine != null)
|
|
StopCoroutine(_effectRoutine);
|
|
|
|
_effectRoutine = StartCoroutine(EffectPlaying());
|
|
}
|
|
|
|
private IEnumerator EffectPlaying()
|
|
{
|
|
SetSizeRaw(0);
|
|
|
|
var timer = _growDuration;
|
|
|
|
while (timer >= 0)
|
|
{
|
|
timer -= Time.deltaTime;
|
|
|
|
var progress = 1 - timer / _growDuration;
|
|
SetSizeRaw(_radius * progress);
|
|
|
|
yield return null;
|
|
}
|
|
|
|
yield return new WaitForSeconds(_stayDuration);
|
|
|
|
SetSizeRaw(0);
|
|
}
|
|
|
|
private void SetSizeRaw(float value)
|
|
{
|
|
_wave.localScale = value * Vector3.one;
|
|
}
|
|
}
|
|
} |