예제 #1
0
        public static void PlayStoryboard(BeatmapFolderInfoEx info)
        {
            //init audio
            if (!(MusicPlayerManager.ActivityPlayer is MusicPlayer player))
            {
                throw new Exception("Player must be MusicPlayer if you want to call PlayStoryboard()");
            }

            player.Load(info.audio_file_path);

            MusicPlayerManager.ActivityPlayer?.Stop();
            MusicPlayerManager.ApplyPlayer(player);

            //load Storyboard objects
            var instance = StoryboardInstance.Load(info);

            var auto_trigger = ToolManager.GetOrCreateTool <AutoTrigger>();

            auto_trigger.Load(info);
            auto_trigger.Trim();

            ExecutorSync.PostTask(() =>
            {
                StoryboardWindow.CurrentWindow.LoadStoryboardInstance(instance);
                MusicPlayerManager.ActivityPlayer?.Play();
            }
                                  );
        }
        private void OnLoad(PluginEvents.LoadCompleteEvent @event)
        {
            thread = new Thread(() =>
            {
                ExecutorSync.PostTask(() => listener.RegisterFinishEvent());
                ReOsuStoryBoardPlayer.MainProgram.Main(((string)Setting.Instance.StoryboardPlayerOptions).Split(' '));
            });

            thread.Start();
        }
예제 #3
0
        public static void Update()
        {
            ExecutorSync.ClearTask();

            if (Instance == null)
            {
                return;
            }

            _update_stopwatch.Restart();

            var time = GetSyncTime();

            Instance.Updater.Update((float)time);

            ToolManager.FrameUpdate();

            _update_stopwatch.Stop();
        }
예제 #4
0
        public void ExecuteCommand(string command)
        {
            //考虑到还有其他玩意用CLI接口
            lock (this)
            {
                if (string.IsNullOrWhiteSpace(command))
                {
                    return;
                }

                var cmd = parser.Parse(command, out var cmdName)
                          ?? new Parameters();//default empty

                switch (cmdName)
                {
                /*
                 *  播放指定的文件夹的sb
                 *  >file "G:\osu!\Songs\747313 Shimotsuki Haruka - Liblume"
                 */
                case "file":
                    var folder_path = cmd.FreeArgs.FirstOrDefault();
                    if ((!string.IsNullOrWhiteSpace(folder_path)) && Directory.Exists(folder_path))
                    {
                        var info = BeatmapFolderInfoEx.Parse(folder_path, null);
                        StoryboardPlayerHelper.PlayStoryboard(info);
                    }
                    break;

                /*
                 * 开始/恢复播放
                 * >play
                 */
                case "play":
                    MusicPlayerManager.ActivityPlayer.Play();
                    break;

                /*
                 * 暂停播放
                 * >pause
                 */
                case "pause":
                    MusicPlayerManager.ActivityPlayer.Pause();
                    break;

                /*
                 * 跳到15000ms处的画面
                 * >jump 15000
                 */
                case "jump":
                    var str = cmd.FreeArgs.FirstOrDefault();
                    if (str == null)
                    {
                        break;
                    }
                    var num = uint.Parse(str);

                    ExecutorSync.PostTask(() => MusicPlayerManager.ActivityPlayer.Jump(num, true)).Wait();
                    break;

                /*
                 * QUITZERA,关闭播放器
                 * >exit
                 * 或者
                 * >quit
                 */
                case "exit":
                case "quit":
                    StoryboardWindow.CurrentWindow.Close();
                    break;

                case "moveTo":     //x,y坐标
                    throw new NotImplementedException();

                case "scale":     //1.0为基准这样
                                  //case "sizeTo": //或者具体到分辨率
                    throw new NotImplementedException();

                /*
                 * 改变窗口分辨率(不是渲染大小)
                 * >window_resize 1600x900
                 * 或者
                 * >window_resize 1600*900
                 */
                case "window_resize":
                    var rstr = cmd.FreeArgs.FirstOrDefault();
                    if (rstr == null || !rstr.Any(x => size_split.Contains(x)))
                    {
                        break;
                    }
                    var d  = rstr.Split(size_split);
                    var nw = d[0].ToInt();
                    var nh = d[1].ToInt();
                    StoryboardWindow.CurrentWindow.Size = new Vector2i(nw, nh);
                    break;

                /*
                 * 改变播放音乐音量(0~1)
                 * >volume 0.5
                 */
                case "volume":
                    MusicPlayerManager.ActivityPlayer.Volume = cmd.FreeArgs.FirstOrDefault()?.ToSigle() ?? MusicPlayerManager.ActivityPlayer.Volume;
                    break;

                /*
                 * 改变 音乐/画面 播放速率
                 * >playback_speed 2
                 * >playback_speed 0.5
                 */
                case "playback_speed":
                    MusicPlayerManager.ActivityPlayer.PlaybackSpeed = cmd.FreeArgs.FirstOrDefault()?.ToSigle() ?? MusicPlayerManager.ActivityPlayer.PlaybackSpeed;
                    break;

                /*
                 * 切换全屏播放
                 * >fullscreen
                 * >fullscreen true
                 * >fullscreen false
                 */
                case "fullscreen":
                    var fsw    = cmd.FreeArgs.FirstOrDefault() ?? string.Empty;
                    var window = StoryboardWindow.CurrentWindow;
                    if (string.IsNullOrWhiteSpace(fsw))
                    {
                        window.SwitchFullscreen(!window.IsFullScreen);
                    }
                    else
                    {
                        window.SwitchFullscreen(bool.Parse(fsw));
                    }
                    break;

                /*
                 * 切换无边窗播放
                 * >borderless
                 * >borderless true
                 * >borderless false
                 */
                case "borderless":
                    var bsw = cmd.FreeArgs.FirstOrDefault() ?? string.Empty;
                    window = StoryboardWindow.CurrentWindow;
                    if (string.IsNullOrWhiteSpace(bsw))
                    {
                        window.ApplyBorderless(!window.IsBorderless);
                    }
                    else
                    {
                        window.ApplyBorderless(bool.Parse(bsw));
                    }
                    break;

                default:
                    break;
                }
            }
        }