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

71 lines
2.4 KiB
C#

using UnityEngine;
using GCGame.Table;
public class WarningRect : ParticleCleaner
{
public float scale = 1.01f;
private int _widthId;
private int _heightId;
private float _animDuration;
private float _enableTime;
private Vector3 _size;
private Transform _innerCircle;
private Transform _outerCircle;
private Material _innerMaterial;
private Material _outerMaterial;
protected override void Awake()
{
base.Awake();
_outerCircle = transform.Find("Outer");
_innerCircle = transform.Find("Inner");
_outerMaterial = _outerCircle.GetComponent<Renderer>().material;
_innerMaterial = _innerCircle.GetComponent<Renderer>().material;
_widthId = Shader.PropertyToID("_Width");
_heightId = Shader.PropertyToID("_Height");
}
private void Update()
{
if (_animDuration > 0)
{
var sizeRatio = Mathf.Clamp01((Time.time - _enableTime) / _animDuration) * _size.y;
_innerMaterial.SetFloat(_heightId, sizeRatio * 0.5f);
_innerCircle.localScale = new Vector3(_size.x, sizeRatio, _size.z);
var localPos = _innerCircle.localPosition;
localPos.z = sizeRatio * 0.5f;
_innerCircle.localPosition = localPos;
}
}
public void SetEffectData(Tab_Effect effectData)
{
var width = effectData.GetParamValuebyIndex(0) * 0.01f * scale;
var height = effectData.GetParamValuebyIndex(1) * 0.01f * scale;
_size = new Vector3(width, height, 1f);
_innerMaterial.SetFloat(_widthId, _size.x * 0.5f);
_innerMaterial.SetFloat(_heightId, 0f);
_outerMaterial.SetFloat(_heightId, _size.y * 0.5f);
_outerMaterial.SetFloat(_widthId, _size.x * 0.5f);
_innerCircle.localScale = new Vector3(_size.x, 0f, _size.z);
_outerCircle.localScale = _size;
var localPos = _innerCircle.localPosition;
localPos.z = _size.y * 0.5f;
_outerCircle.localPosition = localPos;
localPos.z = 0f;
_innerCircle.localPosition = localPos;
var time = effectData.GetParamValuebyIndex(2);
if (time > 0)
{
_animDuration = time.ToClientTime();
_enableTime = Time.time;
_innerCircle.gameObject.SetActive(true);
Update();
}
else
{
_animDuration = -1f;
_innerCircle.gameObject.SetActive(false);
}
}
}