r2mods/ilspy_dump/ror2_csproj/EntityStates.GrandParentBoss/SpawnState.cs

120 lines
3.3 KiB
C#

using RoR2;
using UnityEngine;
namespace EntityStates.GrandParentBoss;
public class SpawnState : GenericCharacterSpawnState
{
public static GameObject preSpawnEffect;
public static string preSpawnEffectMuzzle;
public static float preSpawnDuration;
public static GameObject spawnEffect;
public static string spawnEffectMuzzle;
public static Material spawnOverlayMaterial;
public static float spawnOverlayDuration;
public static float blastAttackRadius;
public static float blastAttackForce;
public static float blastAttackBonusForce;
private bool hasSpawned;
private CharacterModel characterModel;
private HurtBoxGroup hurtboxGroup;
private bool preSpawnIsDone;
private static int Spawn1StateHash = Animator.StringToHash("Spawn1");
private static int Spawn1ParamHash = Animator.StringToHash("Spawn1.playbackRate");
private bool isInvisible;
public override void OnEnter()
{
base.OnEnter();
characterModel = base.modelLocator.modelTransform.GetComponent<CharacterModel>();
hurtboxGroup = base.modelLocator.modelTransform.GetComponent<HurtBoxGroup>();
ToggleInvisibility(newInvisible: true);
if ((bool)preSpawnEffect)
{
EffectManager.SimpleMuzzleFlash(preSpawnEffect, base.gameObject, preSpawnEffectMuzzle, transmit: false);
}
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (!preSpawnIsDone && base.fixedAge > preSpawnDuration)
{
preSpawnIsDone = true;
ToggleInvisibility(newInvisible: false);
PlayAnimation("Body", Spawn1StateHash, Spawn1ParamHash, duration - preSpawnDuration);
if ((bool)spawnEffect)
{
EffectManager.SimpleMuzzleFlash(spawnEffect, base.gameObject, spawnEffectMuzzle, transmit: false);
}
if (base.isAuthority)
{
BlastAttack obj = new BlastAttack
{
attacker = base.gameObject,
inflictor = base.gameObject
};
obj.teamIndex = TeamComponent.GetObjectTeam(obj.attacker);
obj.position = base.characterBody.corePosition;
obj.procCoefficient = 1f;
obj.radius = blastAttackRadius;
obj.baseForce = blastAttackForce;
obj.bonusForce = Vector3.up * blastAttackBonusForce;
obj.baseDamage = 0f;
obj.falloffModel = BlastAttack.FalloffModel.Linear;
obj.damageColorIndex = DamageColorIndex.Item;
obj.attackerFiltering = AttackerFiltering.NeverHitSelf;
obj.Fire();
}
if ((bool)characterModel && (bool)spawnOverlayMaterial)
{
TemporaryOverlayInstance temporaryOverlayInstance = TemporaryOverlayManager.AddOverlay(characterModel.gameObject);
temporaryOverlayInstance.duration = spawnOverlayDuration;
temporaryOverlayInstance.destroyComponentOnEnd = true;
temporaryOverlayInstance.originalMaterial = spawnOverlayMaterial;
temporaryOverlayInstance.inspectorCharacterModel = characterModel;
temporaryOverlayInstance.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
temporaryOverlayInstance.animateShaderAlpha = true;
}
}
}
private void ToggleInvisibility(bool newInvisible)
{
if (isInvisible != newInvisible)
{
isInvisible = newInvisible;
if ((bool)characterModel)
{
characterModel.invisibilityCount += (isInvisible ? 1 : (-1));
}
if ((bool)hurtboxGroup)
{
hurtboxGroup.hurtBoxesDeactivatorCounter += (isInvisible ? 1 : (-1));
}
}
}
public override void OnExit()
{
ToggleInvisibility(newInvisible: false);
base.OnExit();
}
}