2024-08-23 15:49:34 +08:00

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