r2mods/ilspy_dump/ror2_csproj/EntityStates.Chef/YesChef.cs

174 lines
5.0 KiB
C#
Raw Normal View History

2024-10-04 07:26:37 +00:00
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.Networking;
namespace EntityStates.Chef;
public class YesChef : BaseState
{
[SerializeField]
public float duration = 1f;
[SerializeField]
public GameObject playerRespawnEffectPrefab;
[SerializeField]
public string startSoundString;
[SerializeField]
public int buffStockToAdd = 3;
[SerializeField]
public float heatDamageCo = 1f;
[SerializeField]
public GameObject projectilePrefab;
[SerializeField]
public GameObject blastEffectPrefab;
[SerializeField]
public float blastDamageCoefficient;
[SerializeField]
public float blastRadius;
[SerializeField]
public float blastProcCoefficient;
[SerializeField]
public float blastForce;
[SerializeField]
[Tooltip("Set This to the child transform you want the blast effect to parent to")]
public string blastEffectTransformChild;
[SerializeField]
public float exitDelay;
[SerializeField]
public SkillDef primarySkillOverrideDef;
[SerializeField]
public SkillDef secondarySkillOverrideDef;
[SerializeField]
public SkillDef utilitySkillOverrideDef;
[SerializeField]
public SkillDef specialSkillOverrideDef;
private bool alreadyRan;
private ChildLocator childLocator;
private ChefController chefController;
private bool playedYesChefSFX;
public override void OnEnter()
{
base.OnEnter();
chefController = base.characterBody.GetComponent<ChefController>();
if ((bool)chefController)
{
chefController.SetYesChefHeatState(newYesChefHeatState: true);
}
if (base.isAuthority && (bool)chefController)
{
chefController.ClearSkillOverrides();
SkillStateOverrideData skillStateOverrideData = new SkillStateOverrideData(base.characterBody, _duplicateStock: true);
skillStateOverrideData.simulateRestockForOverridenSkills = false;
skillStateOverrideData.primarySkillOverride = primarySkillOverrideDef;
skillStateOverrideData.secondarySkillOverride = secondarySkillOverrideDef;
skillStateOverrideData.utilitySkillOverride = utilitySkillOverrideDef;
skillStateOverrideData.specialSkillOverride = specialSkillOverrideDef;
skillStateOverrideData.OverrideSkills(base.skillLocator);
EnsureMinStock(ref base.skillLocator.primary);
EnsureMinStock(ref base.skillLocator.secondary);
EnsureMinStock(ref base.skillLocator.utility);
chefController.TransferSkillOverrides(skillStateOverrideData);
}
childLocator = GetModelChildLocator();
PlayAnimation("Gesture, Additive", "FireYesChef", "FireYesChef.playbackRate", duration);
PlayAnimation("Gesture, Override", "FireYesChef", "FireYesChef.playbackRate", duration);
EffectData effectData = new EffectData
{
origin = base.transform.position,
scale = blastRadius
};
if ((bool)childLocator)
{
int num = childLocator.FindChildIndex(blastEffectTransformChild);
if (num != -1)
{
effectData.SetChildLocatorTransformReference(base.gameObject, num);
}
}
EffectManager.SpawnEffect(blastEffectPrefab, effectData, transmit: true);
chefController.ActivateServoStrainSfxForDuration(3f);
static void EnsureMinStock(ref GenericSkill skill)
{
if (skill.stock < 1)
{
skill.stock = 1;
skill.rechargeStopwatch = 0f;
}
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return InterruptPriority.PrioritySkill;
}
public override void OnExit()
{
base.OnExit();
if (NetworkServer.active)
{
if (!base.characterBody.HasBuff(DLC2Content.Buffs.Boosted))
{
base.characterBody.AddBuff(DLC2Content.Buffs.Boosted);
}
if (!base.characterBody.HasBuff(DLC2Content.Buffs.boostedFireEffect))
{
base.characterBody.AddBuff(DLC2Content.Buffs.boostedFireEffect);
}
}
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (base.fixedAge > 0.5f && !playedYesChefSFX)
{
Util.PlaySound(startSoundString, base.gameObject);
playedYesChefSFX = true;
}
if ((bool)chefController && base.fixedAge > duration && base.isAuthority)
{
ProjectileManager.instance.FireProjectile(projectilePrefab, base.gameObject.transform.position, Quaternion.identity, base.gameObject, base.characterBody.damage * heatDamageCo, 0f, Util.CheckRoll(critStat, base.characterBody.master));
Util.PlaySound("Play_chef_skill4_flame_aoe_on", base.gameObject);
BlastAttack blastAttack = new BlastAttack();
blastAttack.attacker = base.characterBody.gameObject;
blastAttack.baseDamage = blastDamageCoefficient * base.characterBody.damage;
blastAttack.baseForce = blastForce;
blastAttack.attackerFiltering = AttackerFiltering.NeverHitSelf;
blastAttack.crit = base.characterBody.RollCrit();
blastAttack.damageColorIndex = DamageColorIndex.Item;
blastAttack.inflictor = base.gameObject;
blastAttack.position = base.characterBody.corePosition;
blastAttack.procChainMask = default(ProcChainMask);
blastAttack.procCoefficient = blastProcCoefficient;
blastAttack.radius = blastRadius;
blastAttack.falloffModel = BlastAttack.FalloffModel.None;
blastAttack.teamIndex = base.teamComponent.teamIndex;
blastAttack.Fire();
outer.SetNextStateToMain();
}
}
}