r2mods/ilspy_dump/ror2_csproj/EntityStates.Duplicator/Duplicating.cs

118 lines
2.6 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using RoR2;
using UnityEngine;
namespace EntityStates.Duplicator;
public class Duplicating : BaseState
{
public static float initialDelayDuration = 1f;
public static float timeBetweenStartAndDropDroplet = 3f;
public static string muzzleString;
public static GameObject bakeEffectPrefab;
public static GameObject releaseEffectPrefab;
private GameObject bakeEffectInstance;
private bool hasStartedCooking;
private bool hasDroppedDroplet;
private Transform muzzleTransform;
private EffectManagerHelper _emh_bakeEffectInstance;
private static int CookStateHash = Animator.StringToHash("Cook");
public override void Reset()
{
base.Reset();
bakeEffectInstance = null;
hasStartedCooking = false;
hasDroppedDroplet = false;
muzzleTransform = null;
_emh_bakeEffectInstance = null;
}
public override void OnEnter()
{
base.OnEnter();
ChildLocator component = GetModelTransform().GetComponent<ChildLocator>();
if ((bool)component)
{
muzzleTransform = component.FindChild(muzzleString);
}
}
private void BeginCooking()
{
if (hasStartedCooking)
{
return;
}
hasStartedCooking = true;
PlayAnimation("Body", CookStateHash);
if ((bool)base.sfxLocator)
{
Util.PlaySound(base.sfxLocator.openSound, base.gameObject);
}
if ((bool)muzzleTransform)
{
if (!EffectManager.ShouldUsePooledEffect(bakeEffectPrefab))
{
bakeEffectInstance = Object.Instantiate(bakeEffectPrefab, muzzleTransform.position, muzzleTransform.rotation);
return;
}
_emh_bakeEffectInstance = EffectManager.GetAndActivatePooledEffect(bakeEffectPrefab, muzzleTransform.position, muzzleTransform.rotation);
bakeEffectInstance = _emh_bakeEffectInstance.gameObject;
}
}
private void DropDroplet()
{
if (hasDroppedDroplet)
{
return;
}
hasDroppedDroplet = true;
GetComponent<ShopTerminalBehavior>().DropPickup();
if (!muzzleTransform)
{
return;
}
if ((bool)bakeEffectInstance)
{
if (_emh_bakeEffectInstance != null && _emh_bakeEffectInstance.OwningPool != null)
{
_emh_bakeEffectInstance.OwningPool.ReturnObject(_emh_bakeEffectInstance);
}
else
{
EntityState.Destroy(bakeEffectInstance);
}
_emh_bakeEffectInstance = null;
bakeEffectInstance = null;
}
if ((bool)releaseEffectPrefab)
{
EffectManager.SimpleMuzzleFlash(releaseEffectPrefab, base.gameObject, muzzleString, transmit: false);
}
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (base.fixedAge >= initialDelayDuration)
{
BeginCooking();
}
if (base.fixedAge >= initialDelayDuration + timeBetweenStartAndDropDroplet)
{
DropDroplet();
}
}
}