Exemplo n.º 1
0
        protected IEnumerator ChangingWindowState(EntranceState newTargetState)
        {
            mChangingWindowState = true;
            State.TargetState    = newTargetState;
            mStateLastFrame      = State.CurrentState;
            while (State.CurrentState != State.TargetState)
            {
                switch (State.CurrentState)
                {
                case EntranceState.Closed:
                default:
                    if (mStateLastFrame != EntranceState.Closed)                                //if we weren't closed last frame, we just finished the trigger
                    {
                        MasterAudio.PlaySound(State.SoundType, transform, State.SoundOnClose);
                    }
                    if (State.TargetState == EntranceState.Open)
                    {
                        var onOpen = dynamic.ParentStructure.OnWindowOpen(this);
                        while (onOpen.MoveNext())
                        {
                            yield return(onOpen.Current);
                        }
                        State.CurrentState = EntranceState.Opening;
                        PivotObject.GetComponent <Animation>().Play(State.AnimationOpening);
                        MasterAudio.PlaySound(State.SoundType, transform, State.SoundOnOpen);
                    }
                    break;

                case EntranceState.Open:
                    if (State.TargetState == EntranceState.Closed)
                    {
                        PivotObject.GetComponent <Animation>().Play(State.AnimationClosing);
                        State.CurrentState = EntranceState.Closing;
                    }
                    break;

                case EntranceState.Opening:
                    if (PivotObject.GetComponent <Animation>()[State.AnimationOpening].normalizedTime > 1f)
                    {
                        State.CurrentState = EntranceState.Open;
                    }
                    break;

                case EntranceState.Closing:
                    if (PivotObject.GetComponent <Animation>()[State.AnimationClosing].normalizedTime > 1f)
                    {
                        State.CurrentState = EntranceState.Closed;
                    }
                    break;
                }
                yield return(null);
            }
            if (State.TargetState == EntranceState.Closed)
            {
                dynamic.ParentStructure.OnWindowClose(this);
            }
            mChangingWindowState = false;
            yield break;
        }
Exemplo n.º 2
0
 protected IEnumerator WaitToChangeState(EntranceState newTargetState)
 {
     while (mChangingState)
     {
         yield return(null);
     }
     StartCoroutine(ChangingState(newTargetState));
     yield break;
 }
Exemplo n.º 3
0
        protected IEnumerator ChangingState(EntranceState newTargetState)
        {
            mChangingState    = true;
            State.TargetState = newTargetState;
            mStateLastFrame   = State.CurrentState;
            ////Debug.Log ("Going for state " + newTargetState.ToString () + " from state " + State.CurrentState.ToString ());
            while (State.CurrentState != State.TargetState)
            {
                switch (State.CurrentState)
                {
                case EntranceState.Closed:
                default:
                    if (mStateLastFrame != EntranceState.Closed)                        //if we weren't closed last frame, we just finished the trigger
                    {
                        MasterAudio.PlaySound(State.SoundType, transform, State.SoundOnClose);
                    }
                    if (State.TargetState == EntranceState.Open)
                    {
                        State.CurrentState = EntranceState.Opening;
                        PivotObject.GetComponent <Animation>().Play(State.AnimationOpening);
                        MasterAudio.PlaySound(State.SoundType, transform, State.SoundOnOpen);
                    }
                    break;

                case EntranceState.Open:
                    if (State.TargetState == EntranceState.Closed)
                    {
                        PivotObject.GetComponent <Animation>().Play(State.AnimationClosing);
                        State.CurrentState = EntranceState.Closing;
                    }
                    break;

                case EntranceState.Opening:
                    if (PivotObject.GetComponent <Animation>() [State.AnimationOpening].normalizedTime > 1f)
                    {
                        State.CurrentState = EntranceState.Open;
                    }
                    break;

                case EntranceState.Closing:
                    if (PivotObject.GetComponent <Animation>() [State.AnimationClosing].normalizedTime > 1f)
                    {
                        State.CurrentState = EntranceState.Closed;
                    }
                    break;
                }
                yield return(null);
            }
            mChangingState = false;
            yield break;
        }
Exemplo n.º 4
0
        public void OnTriggerStart(Trigger source)
        {
            EntranceState newState = EntranceState.Closed;

            switch (State.CurrentState)
            {
            case EntranceState.Open:
            case EntranceState.Opening:
                newState = EntranceState.Closed;
                break;

            case EntranceState.Closed:
            case EntranceState.Closing:
                newState = EntranceState.Open;
                break;
            }
            if (!mChangingDoorState)
            {
                StartCoroutine(ChangingDoorState(newState));
            }
        }
Exemplo n.º 5
0
        public void OpenCompartment( )
        {
            EntranceState newState = EntranceState.Open;

            switch (State.CurrentState)
            {
            case EntranceState.Open:
            case EntranceState.Opening:
                break;

            case EntranceState.Closed:
            case EntranceState.Closing:
                if (!mChangingState)
                {
                    StartCoroutine(ChangingState(EntranceState.Open));
                }
                else
                {
                    StartCoroutine(WaitToChangeState(EntranceState.Open));
                }
                break;
            }
        }
Exemplo n.º 6
0
 /// <summary>
 /// Creates entrance with given state.
 /// </summary>
 /// <param name="state">State of the entrance.</param>
 public Entrance(EntranceState state)
 {
     EntranceLock = null;
     State        = state;
 }