Files
Cielonos/Assets/Scripts/MainGame/UI/PlayerUI/SupportEquipments/SupportEquipmentIcon.cs
SoulliesOfficial 33b1795c1f 更新
2026-01-03 18:19:39 -05:00

94 lines
3.2 KiB
C#

using System.Linq;
using ChocDino.UIFX;
using Cielonos.MainGame.Inventory;
using DG.Tweening;
using SLSFramework.UI;
using UnityEngine;
using UnityEngine.UI;
namespace Cielonos.UI
{
public class SupportEquipmentIcon : UIElementBase
{
public SupportEquipmentBase supportEquipment;
public RuntimeFunctionUnit functionUnit;
public Image frame;
public Image iconImage;
public Image timer;
private Sequence frameOutlineSequence;
public void Initialize(SupportEquipmentBase supportEquipment)
{
if (supportEquipment == null)
{
iconImage.sprite = null;
functionUnit = null;
}
else
{
this.supportEquipment = supportEquipment;
iconImage.sprite = supportEquipment.contentData.squareIcon;
if (supportEquipment.functionSm != null)
{
int functionCount = supportEquipment.functionSm.functionUnits.Count;
if (functionCount == 0)
{
}
else if (functionCount == 1)
{
functionUnit = supportEquipment.functionSm.functionUnits.Values.ToList()[0];
}
else
{
}
}
else
{
}
}
}
public override void UpdateUI()
{
if (functionUnit == null) return;
float fillAmount;
if (functionUnit.maxCooldown <= 0f)
{
fillAmount = 0f;
}
else
{
fillAmount = functionUnit.currentCooldown / functionUnit.maxCooldown;
}
timer.fillAmount = fillAmount;
}
public void UseOutlineAnimation() => SetFrameOutline(0.4f, Color.white);
public void CanNotUseOutlineAnimation() => SetFrameOutline(0.4f, Color.red);
public void SetFrameOutline(float totalDuration, Color color = default, float intensity = 2f)
{
color = color == default ? Color.white : color;
Color hdrColor = color * Mathf.Pow(2f, intensity);
GlowFilter glowFilter = frame.GetComponent<GlowFilter>();
glowFilter.Color = hdrColor;
float fadeDuration = Mathf.Clamp(totalDuration / 2f, 0.2f, totalDuration);
float stayDuration = totalDuration - fadeDuration;
float strengthPeak = 0.5f;
frameOutlineSequence?.Kill(true);
frameOutlineSequence = DOTween.Sequence();
frameOutlineSequence.Append(DOTween.To(() => glowFilter.Strength, x => glowFilter.Strength = x, strengthPeak, fadeDuration).SetEase(Ease.OutQuad));
frameOutlineSequence.AppendInterval(stayDuration);
frameOutlineSequence.Append(DOTween.To(() => glowFilter.Strength, x => glowFilter.Strength = x, 0f, fadeDuration).SetEase(Ease.InQuad));
frameOutlineSequence.Play();
}
}
}