Untitled

 avatar
unknown
csharp
2 years ago
4.5 kB
3
Indexable
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)
        {