コード例 #1
0
        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();
        }
コード例 #2
0
 public void OnChangeState(IAnimatedGameState to_state)
 {
     Debug.Log("call onchangestate");
     StartCoroutine(this.changeState(to_state));
 }
コード例 #3
0
 // Use this for initialization
 void Start()
 {
     this.current_state = state_access_funcs.getState(AnimatedStateType.START);
 }