public void Update(FMPInfo info) { try { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); if (_work.Open(info, 1) == false) { return; } if (sw.ElapsedMilliseconds > 500) { UnityEngine.Debug.Log(sw.Elapsed.ToString()); } try { _gwork = _work.GetGlobalWork(); _work.CopyPartWork(0, _partworks, 0, _partworks.Length); } finally { _work.Close(); } UpdateEvery(); if (_musicStartCounter.HasValue) { if (_musicStartCounter.Value != _gwork.StartCounter) { UpdateOnMusicStart(); _musicStartCounter = _gwork.StartCounter; } } else { if ((_gwork.Status & FMPStat.Play) != 0) { UpdateOnMusicStart(); _musicStartCounter = _gwork.StartCounter; } } } catch { } }
public void Awake() { _fmpInfo = null; var handle = GetActiveWindow(); if (handle != System.IntPtr.Zero) { _fmpListener = new FMPMessageListener(); _fmpListener.FMPMessageEvent += (s, e) => { switch (e.Message) { case FMPMessage.StartFMP: { _fmpInfo = FMPControl.GetFMPInfo(); } break; case FMPMessage.EndFMP: { _fmpInfo = null; } break; } }; _fmpListener.AssignHandle(handle); } _fmpInfo = FMPControl.GetFMPInfo(); _currentSceneType = SceneType.Unspecified; this.UpdateAsObservable().Subscribe(_ => FMPWork.Update(_fmpInfo)).AddTo(this); FMPWork.MusicTitle.SubscribeToText(_musicTitle).AddTo(this); FMPWork.MusicCreator.SubscribeToText(_musicCreator).AddTo(this); FMPWork.Status .Select(value => (value != FMPStat.None && (value & FMPStat.Play) != 0) ? "Pause" : "Play") .SubscribeToText(_playOrPauseButton.GetComponentInChildren <UnityEngine.UI.Text>()) .AddTo(this); try { var musics = System.IO.Directory.GetFiles(Application.streamingAssetsPath, "*.owi"); if (musics != null && musics.Length > 0) { int index = 0; _nextMusicButton.OnClickAsObservable().Select(_ => musics[(index++) % musics.Length]) .ObserveOn(Scheduler.ThreadPool) .Subscribe(value => { FMPControl.MusicLoadAndPlay(value); }).AddTo(this); } } catch { } _playOrPauseButton.OnClickAsObservable().Subscribe(_ => { if ((FMPWork.Status.Value & (FMPStat.Pause | FMPStat.Play)) != 0) { FMPControl.MusicPause(); } else { FMPControl.MusicPlay(); } }).AddTo(this); FMPWork.Progress.Subscribe(value => _playProgress.value = value).AddTo(this); FMPWork.PlayTime .Select(value => (new System.DateTime(value.Ticks)).ToString(_timeFormat)) .SubscribeToText(_playTime).AddTo(this); FMPWork.MusicStartEvent.Subscribe(_ => { var sb = new System.Text.StringBuilder(); if (FMPWork.FMChannelCount.Value > 0) { sb.AppendFormat("FM: {0}ch\n", FMPWork.FMChannelCount.Value); } if (FMPWork.SSGChannelCount.Value > 0) { sb.AppendFormat("SSG: {0}ch\n", FMPWork.SSGChannelCount.Value); } if (FMPWork.PCMChannelCount.Value > 0) { sb.AppendFormat("PCM: {0}ch\n", FMPWork.PCMChannelCount.Value); } sb.AppendFormat("Total: {0}ch", FMPWork.ActiveChannelCount); _channelCountInfo.text = sb.ToString(); }).AddTo(this); Observable.Create <Tuple <int, int> >(observer => { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); return(FMPWork.AverageCalorie.Zip( FMPWork.InstantCalorie, (value1, value2) => { return new Tuple <int, int>(value1, value2); }).Subscribe(value => { if (sw.ElapsedMilliseconds > 1000) { observer.OnNext(value); sw.Reset(); sw.Start(); } })); }) .Select(value => { return(string.Format("Calorie\nAvg {0}\nInstant {1}", value.Item1, value.Item2)); }) .SubscribeToText(_calorieInfo) .AddTo(this); ChangeSubScene(SceneType.LevelMeter2011); }