r2mods/ilspy_dump/ror2_csproj/EntityStates.VoidRaidCrab/EscapeDeath.cs

120 lines
2.8 KiB
C#

using RoR2;
using UnityEngine;
using UnityEngine.Networking;
namespace EntityStates.VoidRaidCrab;
public class EscapeDeath : GenericCharacterDeath
{
[SerializeField]
public float duration;
[SerializeField]
public string animationLayerName;
[SerializeField]
public string animationStateName;
[SerializeField]
public string animationPlaybackRateParam;
[SerializeField]
public bool addPrintController;
[SerializeField]
public float printDuration;
[SerializeField]
public float startingPrintHeight;
[SerializeField]
public float maxPrintHeight;
[SerializeField]
public string gauntletEntranceChildName;
[SerializeField]
public string enterSoundString;
private Vector3 gauntletEntrancePosition;
private Transform gauntletEntranceTransform;
private NetworkInstanceId netId;
protected override bool shouldAutoDestroy => false;
protected override void PlayDeathAnimation(float crossfadeDuration)
{
PlayCrossfade(animationLayerName, animationStateName, animationPlaybackRateParam, duration, crossfadeDuration);
}
public override void OnEnter()
{
base.OnEnter();
netId = NetworkInstanceId.Invalid;
if ((bool)base.characterBody && (bool)base.characterBody.master)
{
netId = base.characterBody.master.netId;
}
Util.PlaySound(enterSoundString, base.gameObject);
if (addPrintController)
{
Transform modelTransform = GetModelTransform();
if ((bool)modelTransform)
{
PrintController printController = modelTransform.gameObject.AddComponent<PrintController>();
printController.printTime = printDuration;
printController.enabled = true;
printController.startingPrintHeight = startingPrintHeight;
printController.maxPrintHeight = maxPrintHeight;
printController.startingPrintBias = 0f;
printController.maxPrintBias = 0f;
printController.disableWhenFinished = false;
printController.printCurve = AnimationCurve.EaseInOut(0f, 0f, 1f, 1f);
}
}
if ((bool)base.rigidbodyMotor)
{
base.rigidbodyMotor.moveVector = Vector3.zero;
}
ChildLocator modelChildLocator = GetModelChildLocator();
if ((bool)modelChildLocator)
{
gauntletEntranceTransform = modelChildLocator.FindChild(gauntletEntranceChildName);
RefreshGauntletEntrancePosition();
}
}
public override void OnExit()
{
if (NetworkServer.active)
{
RefreshGauntletEntrancePosition();
VoidRaidGauntletController.instance.TryOpenGauntlet(gauntletEntrancePosition, netId);
}
base.OnExit();
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (NetworkServer.active)
{
RefreshGauntletEntrancePosition();
}
if (base.isAuthority && base.fixedAge >= duration)
{
EntityState.Destroy(base.gameObject);
}
}
private void RefreshGauntletEntrancePosition()
{
if ((bool)gauntletEntranceTransform)
{
gauntletEntrancePosition = gauntletEntranceTransform.position;
}
}
}