60 lines
1.4 KiB
C#
60 lines
1.4 KiB
C#
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
|
||
|
namespace RoR2;
|
||
|
|
||
|
[ExecuteAlways]
|
||
|
public class DamageNumberManager : MonoBehaviour
|
||
|
{
|
||
|
private List<Vector4> customData = new List<Vector4>();
|
||
|
|
||
|
private ParticleSystem ps;
|
||
|
|
||
|
private const int maxDamageNums = int.MaxValue;
|
||
|
|
||
|
public static DamageNumberManager instance { get; private set; }
|
||
|
|
||
|
private void OnEnable()
|
||
|
{
|
||
|
instance = SingletonHelper.Assign(instance, this);
|
||
|
}
|
||
|
|
||
|
private void OnDisable()
|
||
|
{
|
||
|
instance = SingletonHelper.Unassign(instance, this);
|
||
|
}
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
ps = GetComponent<ParticleSystem>();
|
||
|
}
|
||
|
|
||
|
private void Update()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
public void SpawnDamageNumber(float amount, Vector3 position, bool crit, TeamIndex teamIndex, DamageColorIndex damageColorIndex)
|
||
|
{
|
||
|
Color color = DamageColor.FindColor(damageColorIndex);
|
||
|
Color color2 = Color.white;
|
||
|
switch (teamIndex)
|
||
|
{
|
||
|
case TeamIndex.None:
|
||
|
color2 = Color.gray;
|
||
|
break;
|
||
|
case TeamIndex.Monster:
|
||
|
color2 = new Color(0.5568628f, 0.29411766f, 0.6039216f);
|
||
|
break;
|
||
|
}
|
||
|
ps.Emit(new ParticleSystem.EmitParams
|
||
|
{
|
||
|
position = position,
|
||
|
startColor = color * color2,
|
||
|
applyShapeToPosition = true
|
||
|
}, 1);
|
||
|
ps.GetCustomParticleData(customData, ParticleSystemCustomData.Custom1);
|
||
|
customData[customData.Count - 1] = new Vector4(1f, 0f, amount, crit ? 1f : 0f);
|
||
|
ps.SetCustomParticleData(customData, ParticleSystemCustomData.Custom1);
|
||
|
}
|
||
|
}
|