70 lines
2.0 KiB
C#
70 lines
2.0 KiB
C#
using RoR2;
|
|
using UnityEngine;
|
|
using UnityEngine.Networking;
|
|
|
|
namespace EntityStates.ArtifactShell;
|
|
|
|
public class Hurt : ArtifactShellBaseState
|
|
{
|
|
public static float baseDuration = 2f;
|
|
|
|
public static float blastRadius = 50f;
|
|
|
|
public static float knockbackForce = 5000f;
|
|
|
|
public static float knockbackLiftForce = 2000f;
|
|
|
|
public static float blastOriginOffset = -10f;
|
|
|
|
public static GameObject novaEffectPrefab;
|
|
|
|
private float duration;
|
|
|
|
public override void OnEnter()
|
|
{
|
|
base.OnEnter();
|
|
duration = baseDuration;
|
|
Vector3 position = base.transform.position;
|
|
if (NetworkServer.active)
|
|
{
|
|
DamageInfo damageInfo = new DamageInfo();
|
|
damageInfo.position = position;
|
|
damageInfo.attacker = null;
|
|
damageInfo.inflictor = null;
|
|
damageInfo.damage = Mathf.Ceil(base.healthComponent.fullCombinedHealth * 0.25f);
|
|
damageInfo.damageType = DamageType.BypassArmor | DamageType.Silent;
|
|
damageInfo.procCoefficient = 0f;
|
|
base.healthComponent.TakeDamage(damageInfo);
|
|
BlastAttack blastAttack = new BlastAttack();
|
|
blastAttack.position = position + blastOriginOffset * Vector3.up;
|
|
blastAttack.attacker = base.gameObject;
|
|
blastAttack.inflictor = base.gameObject;
|
|
blastAttack.attackerFiltering = AttackerFiltering.NeverHitSelf;
|
|
blastAttack.baseDamage = 0f;
|
|
blastAttack.baseForce = knockbackForce;
|
|
blastAttack.bonusForce = Vector3.up * knockbackLiftForce;
|
|
blastAttack.falloffModel = BlastAttack.FalloffModel.Linear;
|
|
blastAttack.radius = blastRadius;
|
|
blastAttack.procCoefficient = 0f;
|
|
blastAttack.teamIndex = TeamIndex.None;
|
|
blastAttack.Fire();
|
|
ArtifactTrialMissionController.RemoveAllMissionKeys();
|
|
}
|
|
EffectData effectData = new EffectData
|
|
{
|
|
origin = position,
|
|
scale = blastRadius
|
|
};
|
|
EffectManager.SpawnEffect(novaEffectPrefab, effectData, transmit: false);
|
|
}
|
|
|
|
public override void FixedUpdate()
|
|
{
|
|
base.FixedUpdate();
|
|
if (NetworkServer.active && base.fixedAge >= duration)
|
|
{
|
|
outer.SetNextState(new WaitForKey());
|
|
}
|
|
}
|
|
}
|