using System; using UnityEngine; namespace MalbersAnimations.Weapons { /// Ability that it will Manage the Bow Combat System while Riding [CreateAssetMenu(menuName = "Malbers Animations/Weapons/Bow Profile")] public class BowCombat : OldIKProfile { [Space, Header("Right Handed Bow Offsets")] public Vector3 ChestRight = new Vector3(25, 0, 0); public Vector3 ShoulderRight = new Vector3(5, 0, 0); public Vector3 HandRight; [Header("Left Handed Bow Offsets")] public Vector3 ChestLeft = new Vector3(-25, 0, 0); public Vector3 ShoulderLeft = new Vector3(-5, 0, 0); public Vector3 HandLeft; //public override void OnAnimator_IK(IMWeaponOwner RC) //{ // FixAimPoseBow2(RC); // m_IKProfile?.ApplyOffsets(RC.Anim, RC.Aimer.AimDirection); //} public override void LateUpdate_IK(IMWeaponOwner RC) { FixAimPoseBow1(RC); } //protected virtual void FixAimPoseBow2(IMWeaponOwner RC) //{ // if (RC.Aim) // { // RC.Anim.SetLookAtWeight(1, 1, 1, 1, 0.1f); // RC.Anim.SetLookAtPosition(RC.Aimer.AimPoint); // } //} /// This will rotate the bones of the character to match the AIM direction protected virtual void FixAimPoseBow1(IMWeaponOwner RC) { var Bow = RC.Weapon as MShootable; if (RC.Aim) { RC.Anim.Update(0); var UpVector = Vector3.up; float Weight = Bow.IsRightHanded ? Bow.AimLimit.Evaluate(RC.HorizontalAngle) : Bow.AimLimit.Evaluate(-RC.HorizontalAngle); //The Weight evaluated on the AnimCurve Vector3 AimDirection = RC.AimDirection; Quaternion AimLookAt = Quaternion.LookRotation(AimDirection, UpVector); var angle = RC.Aimer.VerticalAngle * Weight; Vector3 ShoulderRotationAxis = Vector3.Cross(UpVector, AimDirection).normalized; Debug.DrawRay(RC.Chest.position, ShoulderRotationAxis, Color.yellow); RC.Chest.RotateAround(RC.Chest.position, ShoulderRotationAxis, angle/2); //Nicely Done!! if (Bow.IsRightHanded) { RC.Chest.rotation *= Quaternion.Euler(ChestRight); RC.RightHand.rotation *= Quaternion.Euler(HandRight); RC.RightShoulder.rotation = Quaternion.Lerp(RC.RightShoulder.rotation, AimLookAt * Quaternion.Euler(ShoulderRight), Weight); // MakeDamage the boy always look to t } else { RC.Chest.rotation *= Quaternion.Euler(ChestLeft); RC.LeftHand.rotation *= Quaternion.Euler(HandLeft); RC.LeftShoulder.rotation = Quaternion.Lerp(RC.LeftShoulder.rotation, AimLookAt * Quaternion.Euler(ShoulderLeft), Weight); // MakeDamage the boy always look to t } } } } }