public StateChangedEventArgs(Nights2State oldState, Nights2State newState) { OldState = oldState; NewState = newState; }
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)); } }