Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/vp_DecalManager.cs
2026-02-21 16:45:37 +08:00

133 lines
2.4 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public sealed class vp_DecalManager
{
public static readonly vp_DecalManager instance;
private static List<GameObject> m_Decals;
private static float m_MaxDecals;
private static float m_FadedDecals;
private static float m_NonFadedDecals;
private static float m_FadeAmount;
public static float MaxDecals
{
get
{
return m_MaxDecals;
}
set
{
m_MaxDecals = value;
Refresh();
}
}
public static float FadedDecals
{
get
{
return m_FadedDecals;
}
set
{
if (value > m_MaxDecals)
{
Debug.LogError("FadedDecals can't be larger than MaxDecals");
return;
}
m_FadedDecals = value;
Refresh();
}
}
static vp_DecalManager()
{
instance = new vp_DecalManager();
m_Decals = new List<GameObject>();
m_MaxDecals = 100f;
m_FadedDecals = 20f;
m_NonFadedDecals = 0f;
m_FadeAmount = 0f;
Refresh();
}
private vp_DecalManager()
{
}
public static void Add(GameObject decal)
{
if (m_Decals.Contains(decal))
{
m_Decals.Remove(decal);
}
Color color = decal.GetComponent<Renderer>().material.color;
color.a = 1f;
decal.GetComponent<Renderer>().material.color = color;
m_Decals.Add(decal);
FadeAndRemove();
}
private static void FadeAndRemove()
{
if ((float)m_Decals.Count > m_NonFadedDecals)
{
for (int i = 0; (float)i < (float)m_Decals.Count - m_NonFadedDecals; i++)
{
if (m_Decals[i] != null)
{
Color color = m_Decals[i].GetComponent<Renderer>().material.color;
color.a -= m_FadeAmount;
m_Decals[i].GetComponent<Renderer>().material.color = color;
}
}
}
if (m_Decals[0] != null)
{
if (m_Decals[0].GetComponent<Renderer>().material.color.a <= 0f)
{
vp_Utility.Destroy(m_Decals[0]);
m_Decals.Remove(m_Decals[0]);
}
}
else
{
m_Decals.RemoveAt(0);
}
}
private static void Refresh()
{
if (m_MaxDecals < m_FadedDecals)
{
m_MaxDecals = m_FadedDecals;
}
m_FadeAmount = m_MaxDecals / m_FadedDecals / m_MaxDecals;
m_NonFadedDecals = m_MaxDecals - m_FadedDecals;
}
private static void DebugOutput()
{
int num = 0;
int num2 = 0;
foreach (GameObject decal in m_Decals)
{
if (decal.GetComponent<Renderer>().material.color.a == 1f)
{
num++;
}
else
{
num2++;
}
}
Debug.Log("Decal count: " + m_Decals.Count + ", Full: " + num + ", Faded: " + num2);
}
}