private void LateUpdate()
{
if (stopAI)
return;
if (AIConfidence == PolygonAIEnums.AIConfidence.Coward && (EquippedWeapon && UseEquipSystem) && Combating)
{
anim.SetBool("Combating", false);
Combating = false;
DisableIK();
}
if (AIConfidence == PolygonAIEnums.AIConfidence.Coward && !WeightDown && BodyWeight <= 0.15f)
{
WeightDown = true;
}
else if (AIConfidence == PolygonAIEnums.AIConfidence.Coward && WeightDown)
{
BodyWeight = 0;
if (!Combating)
{
UseIK = false;
elapsedTime = 0;
}
}
if (AIConfidence == PolygonAIEnums.AIConfidence.Coward)
{
UseIK = false;
elapsedTime = 0;
}
if (GetTarget() == null)
{
FirstIKDetect = true;
}
CheckIK();
if (Reloading || GettingHit)
{
BodyWeight = 0;
return;
}
DistanceFixLerp = Mathf.Lerp(DistanceFixLerp, 0, Time.deltaTime * 6);
if (WeaponType == PolygonAIEnums.WeaponType.Shooter && GetTarget() != null && UseAimIK && !Reloading &&
!GettingHit)
{
for (int i = 0; i < iterations; i++)
{
for (int j = 0; j < boneTransforms.Length; j++)
{
Transform bone = boneTransforms[j];
if (CheckAngle(GetTargetPosition()))
{
if (FirstIKDetect)
{
FixedLookPosition = GetTargetPosition();
FirstIKDetect = false;
}
FixedLookPosition = Vector3.SmoothDamp(FixedLookPosition, GetTargetPosition(), ref TheVel,
AimSmoothAmount, 20);
AimAtTarget(bone, FixedLookPosition, BodyWeight);
}
}
}
}
else if (WeaponType == PolygonAIEnums.WeaponType.Shooter && GetTarget() == null && UseAimIK && !Reloading &&
!GettingHit)
{
for (int i = 0; i < iterations; i++)
{
for (int j = 0; j < boneTransforms.Length; j++)
{
Transform bone = boneTransforms[j];
AimAtTarget(bone, FixedLookPosition, BodyWeight);
}
}
}
}
Vector3 GetTargetPosition()
{
Vector3 targetdir = Vector3.zero;
if (PlayerScript != null && PlayerScript.AimPosition != null)
{
targetdir = PlayerScript.AimPosition.position - AimTransform.position;
}
else
{
targetdir = GetTarget().transform.position - AimTransform.position;
}
Vector3 aimdirection = AimTransform.forward;
YOffset = 0;
targetdir.Set(targetdir.x, targetdir.y + YOffset, targetdir.z);
Vector3 dir = Vector3.Slerp(targetdir, aimdirection, 0);
// if (GetTargetDistance() <= 1.7f && lastone != Vector3.zero)
// {
// return lastone;
// }
lastone = AimTransform.position + dir + AimOffset;
return lastone;
}
private void AimAtTarget(Transform bone, Vector3 TargetPos, float weight)
{
Vector3 RifleDirection = Vector3.Lerp(AimTransform.forward, HeadTransform.forward, DistanceFixLerp);
Vector3 AimTransf = (Vector3.Lerp(AimTransform.position, HeadTransform.position, DistanceFixLerp)) +
RifleDirection * -3;
Vector3 TargetDirection = TargetPos - AimTransf;
Quaternion AimDirect = Quaternion.FromToRotation(RifleDirection * 4, TargetDirection);
Quaternion BlendAmount = Quaternion.Slerp(Quaternion.identity, AimDirect, weight);
bone.rotation = BlendAmount * bone.rotation;
}
private bool CheckAngle(Vector3 pos)
{