70 lines
1.2 KiB
C#
70 lines
1.2 KiB
C#
|
using UnityEngine;
|
||
|
|
||
|
namespace TPSBR.UI
|
||
|
{
|
||
|
[RequireComponent(typeof(CanvasGroup))]
|
||
|
public class UIHitDirectionItem : UIBehaviour
|
||
|
{
|
||
|
// PUBLIC MEMBERS
|
||
|
|
||
|
public bool IsActive => ShowCooldown > 0f;
|
||
|
public float ShowCooldown { get; private set; }
|
||
|
public float Angle { get; private set; }
|
||
|
|
||
|
// PRIVATE MEMBERS
|
||
|
|
||
|
[SerializeField]
|
||
|
private float _hideTime = 0.5f;
|
||
|
|
||
|
private float _targetAlpha = 1f;
|
||
|
|
||
|
// PUBLIC METHODS
|
||
|
|
||
|
public void Show(float duration, float angle)
|
||
|
{
|
||
|
ShowCooldown = duration;
|
||
|
Angle = angle;
|
||
|
|
||
|
var rotation = RectTransform.localRotation.eulerAngles;
|
||
|
rotation.z = angle;
|
||
|
|
||
|
RectTransform.localRotation = Quaternion.Euler(rotation);
|
||
|
|
||
|
CanvasGroup.alpha = 0f;
|
||
|
}
|
||
|
|
||
|
// MONOBEHAVIOUR
|
||
|
|
||
|
protected void Awake()
|
||
|
{
|
||
|
_targetAlpha = CanvasGroup.alpha;
|
||
|
CanvasGroup.alpha = 0f;
|
||
|
}
|
||
|
|
||
|
protected void Update()
|
||
|
{
|
||
|
if (IsActive == false)
|
||
|
return;
|
||
|
|
||
|
ShowCooldown -= Time.deltaTime;
|
||
|
|
||
|
if (ShowCooldown <= 0f)
|
||
|
{
|
||
|
ShowCooldown = 0f;
|
||
|
CanvasGroup.alpha = 0f;
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
if (ShowCooldown < _hideTime)
|
||
|
{
|
||
|
float progress = ShowCooldown / _hideTime;
|
||
|
CanvasGroup.alpha = Mathf.Lerp(0f, _targetAlpha, progress);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
CanvasGroup.alpha = 1f;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|