65 lines
1.9 KiB
C#
65 lines
1.9 KiB
C#
using UnityEngine;
|
|
using GCGame.Table;
|
|
|
|
public class WarningCircle : ParticleCleaner
|
|
{
|
|
public float scale = 1.06f;
|
|
private int _propertyId;
|
|
private int _scaleId;
|
|
private float _animDuration;
|
|
private float _enableTime;
|
|
private Material _innerMaterial;
|
|
private Material _outerMaterial;
|
|
private Transform _innerCircle;
|
|
private Transform _outerCircle;
|
|
|
|
public void SetEffectData(Tab_Effect effectData)
|
|
{
|
|
var radius = effectData.GetParamValuebyIndex(0) * 0.01f * 2f * scale;
|
|
_innerCircle.localScale = Vector3.one * radius;
|
|
_outerCircle.localScale = Vector3.one * radius;
|
|
_outerMaterial.SetFloat(_scaleId, radius * 0.25f);
|
|
var time = effectData.GetParamValuebyIndex(2);
|
|
if (time > 0)
|
|
{
|
|
_animDuration = time.ToClientTime();
|
|
_enableTime = Time.time;
|
|
_innerCircle.gameObject.SetActive(true);
|
|
_innerMaterial.SetFloat(_scaleId, radius * 0.25f);
|
|
Update();
|
|
}
|
|
else
|
|
{
|
|
_animDuration = -1f;
|
|
_innerCircle.gameObject.SetActive(false);
|
|
}
|
|
}
|
|
|
|
protected override void Awake()
|
|
{
|
|
base.Awake();
|
|
_outerCircle = transform.Find("Outer");
|
|
_innerCircle = transform.Find("Inner");
|
|
_innerMaterial = _innerCircle.GetComponent<Renderer>().material;
|
|
_outerMaterial = _outerCircle.GetComponent<Renderer>().material;
|
|
_propertyId = Shader.PropertyToID("_Size");
|
|
_scaleId = Shader.PropertyToID("_Scale");
|
|
}
|
|
|
|
private void OnDestroy()
|
|
{
|
|
if (_innerMaterial != null)
|
|
Destroy(_innerMaterial);
|
|
if (_outerMaterial != null)
|
|
Destroy(_outerMaterial);
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
if (_animDuration > 0)
|
|
{
|
|
var ratio = Mathf.Clamp01((Time.time - _enableTime) / _animDuration);
|
|
_innerMaterial.SetFloat(_propertyId, ratio);
|
|
}
|
|
}
|
|
} |