68 lines
1.6 KiB
C#
68 lines
1.6 KiB
C#
|
using RoR2;
|
||
|
using UnityEngine;
|
||
|
using UnityEngine.Networking;
|
||
|
|
||
|
namespace EntityStates.Gup;
|
||
|
|
||
|
public class BaseSplitDeath : GenericCharacterDeath
|
||
|
{
|
||
|
[SerializeField]
|
||
|
public CharacterSpawnCard characterSpawnCard;
|
||
|
|
||
|
[SerializeField]
|
||
|
public int spawnCount;
|
||
|
|
||
|
[SerializeField]
|
||
|
public float deathDelay;
|
||
|
|
||
|
[SerializeField]
|
||
|
public float moneyMultiplier;
|
||
|
|
||
|
public static float spawnRadiusCoefficient = 0.5f;
|
||
|
|
||
|
public static GameObject deathEffectPrefab;
|
||
|
|
||
|
private bool hasDied;
|
||
|
|
||
|
public override void OnEnter()
|
||
|
{
|
||
|
base.OnEnter();
|
||
|
}
|
||
|
|
||
|
public override void FixedUpdate()
|
||
|
{
|
||
|
base.FixedUpdate();
|
||
|
if (!(base.fixedAge > deathDelay) || hasDied)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
hasDied = true;
|
||
|
if (NetworkServer.active)
|
||
|
{
|
||
|
EffectManager.SpawnEffect(deathEffectPrefab, new EffectData
|
||
|
{
|
||
|
origin = base.characterBody.corePosition,
|
||
|
scale = base.characterBody.radius
|
||
|
}, transmit: true);
|
||
|
if ((bool)characterSpawnCard && spawnCount > 0 && (ulong)(base.healthComponent.killingDamageType & (DamageType.VoidDeath | DamageType.OutOfBounds)) == 0L)
|
||
|
{
|
||
|
BodySplitter bodySplitter = new BodySplitter();
|
||
|
bodySplitter.body = base.characterBody;
|
||
|
bodySplitter.masterSummon.masterPrefab = characterSpawnCard.prefab;
|
||
|
bodySplitter.count = spawnCount;
|
||
|
bodySplitter.splinterInitialVelocityLocal = new Vector3(0f, 20f, 10f);
|
||
|
bodySplitter.minSpawnCircleRadius = base.characterBody.radius * spawnRadiusCoefficient;
|
||
|
bodySplitter.moneyMultiplier = moneyMultiplier;
|
||
|
bodySplitter.Perform();
|
||
|
}
|
||
|
DestroyBodyAsapServer();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public override void OnExit()
|
||
|
{
|
||
|
DestroyModel();
|
||
|
base.OnExit();
|
||
|
}
|
||
|
}
|