62 lines
1.7 KiB
C#
62 lines
1.7 KiB
C#
|
using UnityEngine;
|
||
|
|
||
|
namespace RoR2;
|
||
|
|
||
|
public class LevelUpEffectManager
|
||
|
{
|
||
|
private static float levelUpEffectInterval = 0.25f;
|
||
|
|
||
|
private static float levelUpEffectJitter = 0.25f;
|
||
|
|
||
|
private static int pendingLevelUpEffects = 0;
|
||
|
|
||
|
[RuntimeInitializeOnLoadMethod]
|
||
|
private static void Init()
|
||
|
{
|
||
|
GlobalEventManager.onTeamLevelUp += OnTeamLevelUp;
|
||
|
GlobalEventManager.onCharacterLevelUp += OnCharacterLevelUp;
|
||
|
Run.onRunAmbientLevelUp += OnRunAmbientLevelUp;
|
||
|
}
|
||
|
|
||
|
private static void OnTeamLevelUp(TeamIndex teamIndex)
|
||
|
{
|
||
|
if (TeamComponent.GetTeamMembers(teamIndex).Count > 0)
|
||
|
{
|
||
|
Util.PlaySound(TeamCatalog.GetTeamDef(teamIndex)?.levelUpSound, RoR2Application.instance.gameObject);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private static void OnCharacterLevelUp(CharacterBody characterBody)
|
||
|
{
|
||
|
GameObject levelUpEffect = TeamCatalog.GetTeamDef(characterBody.teamComponent.teamIndex)?.levelUpEffect;
|
||
|
if (!characterBody)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
Transform transform = (characterBody.mainHurtBox ? characterBody.mainHurtBox.transform : characterBody.transform);
|
||
|
EffectData effectData = new EffectData
|
||
|
{
|
||
|
origin = transform.position
|
||
|
};
|
||
|
if ((bool)characterBody.mainHurtBox)
|
||
|
{
|
||
|
effectData.SetHurtBoxReference(characterBody.gameObject);
|
||
|
effectData.scale = characterBody.radius;
|
||
|
}
|
||
|
RoR2Application.fixedTimeTimers.CreateTimer((float)pendingLevelUpEffects * levelUpEffectInterval + Random.value * levelUpEffectJitter, delegate
|
||
|
{
|
||
|
if ((bool)characterBody)
|
||
|
{
|
||
|
EffectManager.SpawnEffect(levelUpEffect, effectData, transmit: false);
|
||
|
}
|
||
|
levelUpEffectInterval -= 1f;
|
||
|
});
|
||
|
levelUpEffectInterval += 1f;
|
||
|
}
|
||
|
|
||
|
private static void OnRunAmbientLevelUp(Run run)
|
||
|
{
|
||
|
Util.PlaySound("Play_UI_levelUp_enemy", RoR2Application.instance.gameObject);
|
||
|
}
|
||
|
}
|