r2mods/ilspy_dump/ror2_csproj/RoR2/OmniEffect.cs

86 lines
2.0 KiB
C#

using System;
using UnityEngine;
namespace RoR2;
public class OmniEffect : MonoBehaviour
{
[Serializable]
public class OmniEffectElement
{
public string name;
public ParticleSystem particleSystem;
public bool particleSystemEmitParticles;
public Material particleSystemOverrideMaterial;
public float maximumValidRadius = float.PositiveInfinity;
public float bonusEmissionPerBonusRadius;
public void ProcessEffectElement(float radius, float minimumValidRadius)
{
if (!particleSystem)
{
return;
}
if ((bool)particleSystemOverrideMaterial)
{
ParticleSystemRenderer component = particleSystem.GetComponent<ParticleSystemRenderer>();
if ((bool)particleSystemOverrideMaterial)
{
component.material = particleSystemOverrideMaterial;
}
}
ParticleSystem.EmissionModule emission = particleSystem.emission;
if (emission.burstCount > 0)
{
int num = Mathf.Min(emission.GetBurst(0).maxCount + (int)((radius - minimumValidRadius) * bonusEmissionPerBonusRadius), particleSystem.main.maxParticles);
emission.SetBurst(0, new ParticleSystem.Burst(0f, num));
}
if (particleSystemEmitParticles)
{
particleSystem.gameObject.SetActive(value: true);
}
else
{
particleSystem.gameObject.SetActive(value: false);
}
}
}
[Serializable]
public class OmniEffectGroup
{
public string name;
public OmniEffectElement[] omniEffectElements;
}
public OmniEffectGroup[] omniEffectGroups;
private float radius;
private void Start()
{
radius = base.transform.localScale.x;
OmniEffectGroup[] array = omniEffectGroups;
foreach (OmniEffectGroup omniEffectGroup in array)
{
float minimumValidRadius = 0f;
for (int j = 0; j < omniEffectGroup.omniEffectElements.Length; j++)
{
OmniEffectElement omniEffectElement = omniEffectGroup.omniEffectElements[j];
if (omniEffectElement.maximumValidRadius >= radius)
{
omniEffectElement.ProcessEffectElement(radius, minimumValidRadius);
break;
}
minimumValidRadius = omniEffectElement.maximumValidRadius;
}
}
}
}