using UnityEngine; using SanAndreasUnity.Utilities; using SanAndreasUnity.Importing.Animation; namespace SanAndreasUnity.Behaviours.Peds.States { public class WalkAimState : BaseAimMovementState { public override AnimId aimWithArm_LowerAnim { get { return m_ped.CurrentWeapon.WalkAnim; } } public override void OnBecameActive () { base.OnBecameActive (); // m_ped.PlayerModel.PlayAnim (AnimGroup.Gun, AnimIndex.WALK_armed); } protected override AnimationState UpdateAnimsNonAWA () { return WalkAimState.UpdateAnimsNonAWA (m_ped); } public static AnimationState UpdateAnimsNonAWA (Ped ped) { var player = ped; var PlayerModel = ped.PlayerModel; var weapon = ped.CurrentWeapon; float angle = Vector3.Angle (player.Movement, player.transform.forward); if (angle > 110) { // move backward PlayerModel.Play2Anims( weapon.AimAnim, new AnimId(AnimGroup.Gun, AnimIndex.GunMove_BWD) ); } else if (angle > 70) { // strafe - move left/right float rightAngle = Vector3.Angle( player.Movement, player.transform.right ); if (rightAngle > 90) { // left PlayerModel.Play2Anims( weapon.AimAnim, new AnimId(AnimGroup.Gun, AnimIndex.GunMove_L) ); } else { // right PlayerModel.Play2Anims( weapon.AimAnim, new AnimId(AnimGroup.Gun, AnimIndex.GunMove_R) ); } // we have to reset local position of root frame - for some reason, anim is changing position // PlayerModel.RootFrame.transform.localPosition = Vector3.zero; Importing.Conversion.Animation.RemovePositionCurves( PlayerModel.LastSecondaryAnimState.clip, PlayerModel.Frames ); PlayerModel.VelocityAxis = 0; } else { // move forward PlayerModel.Play2Anims( weapon.AimAnim, new AnimId(AnimGroup.Gun, AnimIndex.GunMove_FWD) ); } PlayerModel.LastAnimState.wrapMode = WrapMode.ClampForever; var state = PlayerModel.LastAnimState; return state; } } }