71 lines
2.4 KiB
C#
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);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|