public IEnumerator changeState(IAnimatedGameState to_state) { current_state.prepareEndState(); /** * Start and wait Animation and wait until **/ List <Animator> state_using_animatores = new List <Animator>(); List <Animator> current_state_animator = current_state.getAnimatorList(); int end_animation_hash = Animator.StringToHash(getAnimationName(StateInnnerState.END, current_state.getStateType())); foreach (Animator animator in current_state_animator) { if (animator.HasState(0, end_animation_hash)) { animator.enabled = true; state_using_animatores.Add(animator); animator.Play(end_animation_hash); } } var first_wait_routine = WaitForAnimationEnd(state_using_animatores.ToArray(), end_animation_hash); yield return(StartCoroutine(first_wait_routine)); foreach (Animator animator in state_using_animatores) { animator.enabled = false; } current_state.endState(); current_state = to_state; current_state.prepareBeginState(); int start_animation_hash = Animator.StringToHash(getAnimationName(StateInnnerState.START, current_state.getStateType())); current_state_animator = current_state.getAnimatorList(); state_using_animatores.Clear(); foreach (Animator animator in current_state_animator) { if (animator.HasState(0, start_animation_hash)) { state_using_animatores.Add(animator); animator.enabled = true; animator.Play(start_animation_hash); } } var second_wait_coroutine = WaitForAnimationEnd(state_using_animatores.ToArray(), start_animation_hash); yield return(StartCoroutine(second_wait_coroutine)); foreach (Animator animator in state_using_animatores) { animator.enabled = false; } current_state.beginState(); }
public void OnChangeState(IAnimatedGameState to_state) { Debug.Log("call onchangestate"); StartCoroutine(this.changeState(to_state)); }
// Use this for initialization void Start() { this.current_state = state_access_funcs.getState(AnimatedStateType.START); }