protected IEnumerator waitForValidLocomotionModeToInteract() { if (locomotionTracker != null && locomotionTracker.GetCurrentController() is RunController) { Animator anim = GetComponent <Animator>(); RunController runController = (RunController)locomotionTracker.GetCurrentController(); RunController.ControllerBehaviour oldBehaviour = runController.Behaviour; runController.Behaviour = new RunController.ControllerBehaviour { IgnoreCollisions = false, IgnoreGravity = false, IgnoreRotation = false, IgnoreTranslation = false, IgnoreJumpRequests = true, IgnoreStickInput = true, LastModifier = this }; AnimatorStateInfo animStateInfo = LocomotionUtils.GetAnimatorStateInfo(anim); while (!LocomotionUtils.IsLocomoting(animStateInfo) && !LocomotionUtils.IsLanding(animStateInfo) && !LocomotionUtils.IsIdling(animStateInfo)) { yield return(null); animStateInfo = LocomotionUtils.GetAnimatorStateInfo(anim); } runController.ResetMomentum(); if (runController.Behaviour.LastModifier == this) { runController.Behaviour = oldBehaviour; } } }
public void MoveToTarget(Transform target, float distanceThreshold = 0.15f, PlayerLocoStyle.Style locomotionStyle = PlayerLocoStyle.Style.Walk, float timeoutTime = 15f, bool autoDestroy = true) { targetDestination = target; actorRadius = 0f; actorHalfHeight = 0.1f; this.timeoutTime = timeoutTime; this.autoDestroy = autoDestroy; CharacterController component = GetComponent <CharacterController>(); if (component != null) { actorRadius = component.radius; actorHalfHeight = component.height / 2f; } LocomotionTracker component2 = GetComponent <LocomotionTracker>(); if (component2.SetCurrentController <RunController>()) { runController = GetComponent <RunController>(); if (!runControllerBehaviourWasSet) { oldRunBehaviour = runController.Behaviour; runController.Behaviour = new RunController.ControllerBehaviour { IgnoreCollisions = false, IgnoreGravity = false, IgnoreRotation = false, IgnoreTranslation = false, IgnoreJumpRequests = true, IgnoreStickInput = true, Style = locomotionStyle }; runControllerBehaviourWasSet = true; } runController.ResetMomentum(); dest = targetDestination.transform.position; Vector3 vector = dest - base.transform.position; if (vector == Vector3.zero) { vector = base.transform.forward; } distThresholdSq = distanceThreshold * distanceThreshold; vector.y = 0f; elapsedTime = 0f; done = false; } if (!CanReachWaypoint()) { if (this.OnComplete != null) { this.OnComplete(); } runController.Steer(Vector3.zero); runController.SnapToPosition(dest); runController.SnapToFacing(targetDestination.transform.forward); if (autoDestroy) { UnityEngine.Object.Destroy(this); } } }