r2mods/ilspy_dump/ror2_csproj/EntityStates.NullifierMonster/AimPortalBomb.cs

94 lines
2.3 KiB
C#

using System.Linq;
using RoR2;
using UnityEngine;
namespace EntityStates.NullifierMonster;
public class AimPortalBomb : BaseState
{
private HurtBox target;
public static float baseDuration;
public static float arcMultiplier;
private float duration;
private Vector3? pointA;
private Vector3? pointB;
public override InterruptPriority GetMinimumInterruptPriority()
{
return InterruptPriority.PrioritySkill;
}
public override void OnEnter()
{
base.OnEnter();
if (base.isAuthority)
{
BullseyeSearch bullseyeSearch = new BullseyeSearch();
bullseyeSearch.viewer = base.characterBody;
bullseyeSearch.searchOrigin = base.characterBody.corePosition;
bullseyeSearch.searchDirection = base.characterBody.corePosition;
bullseyeSearch.maxDistanceFilter = FirePortalBomb.maxDistance;
bullseyeSearch.teamMaskFilter = TeamMask.GetEnemyTeams(GetTeam());
bullseyeSearch.sortMode = BullseyeSearch.SortMode.DistanceAndAngle;
bullseyeSearch.RefreshCandidates();
target = bullseyeSearch.GetResults().FirstOrDefault();
if ((bool)target)
{
pointA = RaycastToFloor(target.transform.position);
}
}
duration = baseDuration;
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (!base.isAuthority || !(base.fixedAge >= duration))
{
return;
}
EntityState entityState = null;
if ((bool)target)
{
pointB = RaycastToFloor(target.transform.position);
if (pointA.HasValue && pointB.HasValue)
{
Ray aimRay = GetAimRay();
Vector3 forward = pointA.Value - aimRay.origin;
Vector3 forward2 = pointB.Value - aimRay.origin;
Quaternion a = Quaternion.LookRotation(forward);
Quaternion quaternion = Quaternion.LookRotation(forward2);
Quaternion value = quaternion;
Quaternion value2 = Quaternion.SlerpUnclamped(a, quaternion, 1f + arcMultiplier);
entityState = new FirePortalBomb
{
startRotation = value,
endRotation = value2
};
}
}
if (entityState != null)
{
outer.SetNextState(entityState);
}
else
{
outer.SetNextStateToMain();
}
}
private Vector3? RaycastToFloor(Vector3 position)
{
if (Physics.Raycast(new Ray(position, Vector3.down), out var hitInfo, 10f, LayerIndex.world.mask, QueryTriggerInteraction.Ignore))
{
return hitInfo.point;
}
return null;
}
}