r2mods/ilspy_dump/ror2_csproj/EntityStates.AI.Walker/LookBusy.cs

95 lines
1.9 KiB
C#

using RoR2;
using RoR2.CharacterAI;
using UnityEngine;
namespace EntityStates.AI.Walker;
public class LookBusy : BaseAIState
{
private const float minDuration = 2f;
private const float maxDuration = 7f;
private Vector3 targetPosition;
private float duration;
private float lookTimer;
private const float minLookDuration = 0.5f;
private const float maxLookDuration = 4f;
private const int lookTries = 4;
private const float lookRaycastLength = 25f;
protected virtual void PickNewTargetLookDirection()
{
if ((bool)base.bodyInputBank)
{
float num = 0f;
Vector3 aimOrigin = base.bodyInputBank.aimOrigin;
for (int i = 0; i < 4; i++)
{
Vector3 onUnitSphere = Random.onUnitSphere;
float num2 = 25f;
if (Physics.Raycast(new Ray(aimOrigin, onUnitSphere), out var hitInfo, 25f, LayerIndex.world.mask, QueryTriggerInteraction.Ignore))
{
num2 = hitInfo.distance;
}
if (num2 > num)
{
num = num2;
bodyInputs.desiredAimDirection = onUnitSphere;
}
}
}
lookTimer = Random.Range(0.5f, 4f);
}
public override void OnEnter()
{
base.OnEnter();
duration = Random.Range(2f, 7f);
base.bodyInputBank.moveVector = Vector3.zero;
base.bodyInputBank.jump.PushState(newState: false);
PickNewTargetLookDirection();
}
public override void OnExit()
{
base.OnExit();
}
public override void FixedUpdate()
{
base.FixedUpdate();
if (!base.ai || !base.body)
{
return;
}
if ((bool)base.ai.skillDriverEvaluation.dominantSkillDriver)
{
outer.SetNextState(new Combat());
}
if (base.ai.hasAimConfirmation)
{
lookTimer -= GetDeltaTime();
if (lookTimer <= 0f)
{
PickNewTargetLookDirection();
}
}
if (base.fixedAge >= duration)
{
outer.SetNextState(new Wander());
}
}
public override BaseAI.BodyInputs GenerateBodyInputs(in BaseAI.BodyInputs previousBodyInputs)
{
return bodyInputs;
}
}