r2mods/ilspy_dump/ror2_csproj/RoR2.UI/ChargeIndicatorController.cs

165 lines
3.6 KiB
C#

using System.Text;
using HG;
using TMPro;
using UnityEngine;
namespace RoR2.UI;
public class ChargeIndicatorController : MonoBehaviour
{
[Header("Cached Values")]
public SpriteRenderer[] iconSprites;
public TextMeshPro chargingText;
public TextMeshPro pingText;
public HoldoutZoneController holdoutZoneController;
public ObjectScaleCurve pingBounceAnimation;
[Header("Color Values")]
public Color spriteBaseColor;
public Color spriteFlashColor;
public Color spriteChargingColor;
public Color spriteChargedColor;
public Color textBaseColor;
public Color textChargingColor;
public Color playerPingColor;
[Header("Options")]
public bool disableTextWhenNotCharging;
public bool disableTextWhenCharged;
public bool flashWhenNotCharging;
public float flashFrequency;
[Header("Control Values - Don't assign via inspector!")]
public bool isCharging;
public bool isCharged;
public bool isDiscovered;
public bool isActivated;
private float flashStopwatch;
public bool isPinged;
private UserProfile cachedUserProfile;
private bool showIndicatorWhenDiscovered;
public uint chargeValue { get; set; }
private void Awake()
{
UserProfile userProfile = LocalUserManager.GetFirstLocalUser()?.userProfile;
if (userProfile != null)
{
cachedUserProfile = userProfile;
}
}
public void TriggerPing(string pingOwnerName, bool triggerAnimation = true)
{
if (!isActivated || isCharged)
{
pingText.SetText(pingOwnerName);
isPinged = true;
if (triggerAnimation)
{
TriggerPingAnimation();
}
}
}
public void TriggerPingAnimation()
{
if (cachedUserProfile != null)
{
showIndicatorWhenDiscovered = cachedUserProfile.useTeleporterDiscoveryIndicator;
}
if ((bool)pingBounceAnimation && (!isActivated || isCharged) && (showIndicatorWhenDiscovered || isPinged))
{
pingBounceAnimation.enabled = true;
pingBounceAnimation.Reset();
}
}
private void Update()
{
if ((bool)holdoutZoneController)
{
chargeValue = (uint)holdoutZoneController.displayChargePercent;
isCharging = holdoutZoneController.isAnyoneCharging;
}
if (cachedUserProfile != null)
{
showIndicatorWhenDiscovered = cachedUserProfile.useTeleporterDiscoveryIndicator;
}
Color color = spriteBaseColor;
Color color2 = textBaseColor;
if (!isActivated && (isPinged || (isDiscovered && showIndicatorWhenDiscovered)))
{
color = (isPinged ? playerPingColor : spriteChargedColor);
chargingText.enabled = false;
pingText.enabled = isPinged;
}
else if (!isCharged)
{
pingText.enabled = false;
if (flashWhenNotCharging)
{
flashStopwatch += Time.deltaTime;
color = (((int)(flashStopwatch * flashFrequency) % 2 == 0) ? spriteFlashColor : spriteBaseColor);
}
if (isCharging)
{
color = spriteChargingColor;
color2 = textChargingColor;
}
if (disableTextWhenNotCharging)
{
chargingText.enabled = isCharging;
}
else
{
chargingText.enabled = true;
}
}
else
{
color = (isPinged ? playerPingColor : spriteChargedColor);
chargingText.enabled = !disableTextWhenCharged && !isPinged;
pingText.enabled = isPinged;
}
if (chargingText.enabled)
{
StringBuilder stringBuilder = HG.StringBuilderPool.RentStringBuilder();
stringBuilder.AppendUint(chargeValue, 1u, 3u).Append("%");
chargingText.SetText(stringBuilder);
HG.StringBuilderPool.ReturnStringBuilder(stringBuilder);
}
if (pingText.enabled)
{
pingText.color = playerPingColor;
}
SpriteRenderer[] array = iconSprites;
for (int i = 0; i < array.Length; i++)
{
array[i].color = color;
}
chargingText.color = color2;
}
}