Esempio n. 1
0
 public StateChangedEventArgs(Nights2State oldState, Nights2State newState)
 {
     OldState = oldState; NewState = newState;
 }
Esempio n. 2
0
    public void SetState(Nights2State s)
    {
        if (_curState != s)
        {
            Nights2State prevState = _curState;
            _curState = s;

            Debug.Log("STATE CHANGE from '" + prevState.ToString() + "' to '" + _curState.ToString() +"'");

            _stateActivateTime = Time.time;

            //if just starting to seek new beacon, pick one
            if (((prevState == Nights2State.SeekingShamash) || (prevState == Nights2State.NearShamash)) &&
                (_curState == Nights2State.SeekingBeacon))
            {
                LightCurrentPath(true);
            }

            //reset magic state on torch
            if ((_curState == Nights2State.SeekingShamash) || (_curState == Nights2State.GettingReady) || (_curState == Nights2State.BeaconLit))
               _torchHasMagic = false;

            //keep track of when this turn started, so we can display a timer
            if (prevState == Nights2State.GettingReady)
            {
               _turnStartTime = Time.time;
               _turnEndTime = -1.0f;
            }
            else if (_curState == Nights2State.GettingReady)
            {
               _turnEndTime = Time.time;
            }

            if (_curState == Nights2State.AllBeaconsLit)
            {
               if (FinaleEvent != null)
                  FinaleEvent.Play();

               float scrollSpeed = 3.0f;
               FXScrollColors(new ScrollColorParams(38.0f, 1.0f, scrollSpeed, ClockwiseCandleOrder));
               _isFinaleActive = true;

               Nights2AudioMgr.Instance.StopShamashDrones();
            }

            //pick beacon when starting to seek shamash so it can sync up with the color of the new candle
            if(_curState == Nights2State.SeekingShamash)
            {
                PickNextBeacon();
            }

            //turn off path
            if ((_curState != Nights2State.SeekingBeacon) && (_curState != Nights2State.NearBeacon))
                LightCurrentPath(false);

            if ((_curState == Nights2State.NearShamash) && (NumCandlesLit() == 0))
            {
               if (ShamashNarrationEvent != null)
               {
                  ShamashNarrationEvent.Play();
                  _shamashIntroStartTime = Time.time;
               }
            }

            //make sure we cut off previous shamash narration when a turn starts (this is an end case!)
            if (prevState == Nights2State.GettingReady)
               StopShamashNarration();

            //play intro ambience before we reveal shamash
            if (((_curState == Nights2State.GettingReady) || (_curState == Nights2State.SeekingShamash)) && (NumCandlesLit() == 0))
            {
               Nights2AudioMgr.Instance.ActivateBackingLoop(Nights2AudioMgr.BackingLoops.kIntroAmbience);
            }

            //update tracking lists if a beacon is lit
            if (_curState == Nights2State.BeaconLit)
            {
               Debug.Assert(_nextBeacon != null);

               if (Nights2AudioMgr.Instance.BeaconLitOneOff != null)
                   Nights2AudioMgr.Instance.BeaconLitOneOff.Play();

               //start blasting all the beacons the same color
               FXTurnOnAll(new TurnAllOnParams(BeaconLitBlastTime, BeaconLitFadeTime, true, _nextBeacon.CandleColor));

               //update state of next beacon
               _nextBeacon.SetLit(true);
               _nextBeacon.SetIsNext(false);

               //update bookkeeping
               if (_unlitBeacons.Contains(_nextBeacon))
                  _unlitBeacons.Remove(_nextBeacon);
               if (!_litBeacons.Contains(_nextBeacon))
                  _litBeacons.Add(_nextBeacon);

               //pick alt world for next beacon
               _curAltWorldIdx = NumCandlesLit() % AltWorlds.Length;

               SaveProgression();
            }

            if (OnStateChanged != null)
                OnStateChanged(this, new StateChangedEventArgs(prevState, s));
        }
    }