Пример #1
0
        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
            {
            }
        }
Пример #2
0
    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);
    }