Пример #1
0
        public Wallpaper(IPlayerHost player, string fontFamily)
        {
            var backgroundImagePathCache = Properties.Settings.Default.BackgroundImagePath;

            if (!string.IsNullOrWhiteSpace(backgroundImagePathCache))
            {
                OriginalBackgroundImagePath = backgroundImagePathCache;
            }
            else
            {
                using RegistryKey desktopKey = Registry.CurrentUser.OpenSubKey(@"Control Panel\Desktop", true);
                var path = (string)desktopKey.GetValue("Wallpaper");
                OriginalBackgroundImagePath = path;
                Properties.Settings.Default.BackgroundImagePath = path;
                Properties.Settings.Default.Save();
            }

            this._player     = player;
            this._fontFamily = fontFamily;

            using var dwmKey         = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Windows\DWM", true);
            this.OriginalAccentColor = DwordConversion((int)dwmKey.GetValue("AccentColor"));//4282927692
            //this.OriginalColorizationAfterglow = DwordConversion((int)dwmKey.GetValue("ColorizationAfterglow")); //3293334088
            //this.OriginalColorizationColor = DwordConversion((int)dwmKey.GetValue("ColorizationColor")); //3293334088
            //this.OriginalStartColorMenu = DwordConversion((int)explorerAccentKey.GetValue("StartColorMenu"));
            //this.OriginalAccentColorMenu = DwordConversion((int)explorerAccentKey.GetValue("AccentColorMenu"));
            //this.OriginalAccentPallete = (byte[])explorerAccentKey.GetValue("AccentPalette");

            //Disable();
        }
Пример #2
0
 public void OnTrackChanged(IPlayerHost player)
 {
     using (var sw = File.AppendText(Path.Combine(DIR, PATH)))
     {
         sw.WriteLine($"[{DateTime.Now}] {player.Track}\n");
     }
 }
Пример #3
0
        private void OnTrackChanged(IPlayerHost playbackContext)
        {
            Dispatcher.InvokeAsync(() =>
            {
                foreach (var plugin in this.plugins)
                {
                    plugin.OnTrackChanged(playbackContext);
                }

                this.Title = $"Listening to {player.Track} by {player.Artist} on {player.ActiveDevice.Name}";

                var albumImageSource      = playbackContext.AlbumArtwork.ToBitmapImage(ImageFormat.Jpeg);
                using var background      = ImageProcessing.CalculateBackgroundSource(playbackContext.AlbumArtwork, (int) this.InitWidth, (int) this.InitHeight, 10);
                var albumBackgroundSource = ImageProcessing.ToSafeMemoryBrush(background as Bitmap);

                this.Icon = albumImageSource;
                this.AlbumImage.Source = albumImageSource;
                this.Background        = albumBackgroundSource;

                this.chroma?.LoadColor(this.player.AlbumArtwork);


                if (Properties.Settings.Default.ArtworkWallpaperEnable)
                {
                    wallpaper.Enable();
                }
                else
                {
                    wallpaper.Disable();
                }
            });
        }
        /// <summary>
        /// 向玩家控制台写入一条消息
        /// </summary>
        /// <param name="playerHost">玩家宿主对象</param>
        /// <param name="message">要写入的消息</param>
        /// <param name="resetDate">是否重置消息发送时间为当前时间</param>
        public static void WriteMessage(this IPlayerHost playerHost, GameMessage message, bool resetDate = false)
        {
            if (resetDate)
            {
                message = message.ResetDate();
            }

            playerHost.Console.WriteMessage(message);
        }
Пример #5
0
        public void JoinGame(IPlayerHost player)
        {
            string reason;

            if (!TryJoinGame(player, out reason))
            {
                player.WriteWarningMessage("加入游戏 \"{0}\" 失败,原因为: {1}", Game.RoomName, reason);
            }
        }
Пример #6
0
        protected override async Task InitializeCore(IPlayerHost initializer)
        {
            var option = await initializer.Console.Choose("请选择玩家数量:", new[] {
                Option.Create(Tuple.Create(3), "三个玩家", "三个玩家的游戏"),
                Option.Create(Tuple.Create(5), "五个玩家", "五个玩家的游戏"),
            }, CancellationToken.None);


            players = option.Item1;

            await base.InitializeCore(initializer);
        }
Пример #7
0
        public static FileType CurrentFileType(this IPlayerHost playerhost)
        {
            string currentfile = playerhost.CurrentURL();
            int    va          = currentfile.LastIndexOf('.');

            if (va >= 0)
            {
                string ex = currentfile.Substring(va);

                FileType type = DataUtil.CheckFileType(ex);

                return(type);
            }

            return(FileType.UnKnow);
        }
Пример #8
0
        /// <summary>
        /// 进入影院模式
        /// </summary>
        /// <param name="isCinema">是否为影院模式</param>
        public void PlayVideoCinema(bool isCinema)
        {
            IPlayerHost hostPage = App._isTabletMode ? TabletMainPage.Current as IPlayerHost : DesktopMainPage.Current as IPlayerHost;
            IPlayerHost host     = App._isTabletMode ? GetCurrentPlayerBlock() : GetCurrentPlayerPage();

            if (isCinema)
            {
                host.RemovePlayer();
                hostPage.InsertPlayer();
            }
            else
            {
                if (!CurrentVideoPlayer.MTC.IsFullWindow)
                {
                    hostPage.RemovePlayer();
                    host.InsertPlayer();
                }
            }
        }
Пример #9
0
        /// <summary>
        /// 尝试加入游戏
        /// </summary>
        /// <param name="playerHost"></param>
        /// <param name="reason"></param>
        /// <returns></returns>
        public virtual bool TryJoinGame(IPlayerHost playerHost, out string reason)
        {
            var player = playerHost.Player;

            reason = null;

            if (player != null)
            {
                if (player.GameHost == this)
                {
                    return(true);
                }

                else
                {
                    reason = "玩家已经加入其他游戏";
                    return(false);
                }
            }
            else
            {
                if (Game == null || Game.GameState == GameState.NotInitialized || Game.GameState == GameState.Initializing)
                {
                    reason = "游戏尚未初始化";
                    return(false);
                }
                else if (Game.GameState != GameState.Initialized)
                {
                    reason = "游戏已经开始或结束";
                    return(false);
                }

                player = Game.TryJoinGame(playerHost);
                if (player == null)
                {
                    reason = "未知原因";
                    return(false);
                }

                return(true);
            }
        }
Пример #10
0
        /// <summary>
        /// 尝试加入游戏
        /// </summary>
        /// <param name="playerHost">玩家宿主</param>
        /// <returns>若加入游戏成功,则返回一个 Player 对象</returns>
        public virtual GamePlayerBase TryJoinGame(IPlayerHost playerHost)
        {
            lock ( SyncRoot )
            {
                if (GameState != GameState.Initialized)
                {
                    return(null);
                }


                var player = TryJoinGameCore(playerHost);
                if (player != null)
                {
                    player.PlayerHost.WriteSystemMessage(string.Format("恭喜您已经加入 {0} 游戏。", RoomName, player.PlayerName));
                    AnnounceSystemMessage("玩家 {0} 已经加入游戏", player.PlayerName);
                }

                playerHost.OnJoinedGame(player);
                return(player);
            }
        }
Пример #11
0
        /// <summary>
        /// 进入全屏模式
        /// </summary>
        /// <param name="isFull">是否为全屏模式</param>
        public void PlayVideoFullScreen(bool isFull)
        {
            IPlayerHost hostPage = App._isTabletMode ? TabletMainPage.Current as IPlayerHost : DesktopMainPage.Current as IPlayerHost;
            IPlayerHost host     = App._isTabletMode ? GetCurrentPlayerBlock() : GetCurrentPlayerPage();

            if (isFull)
            {
                host.RemovePlayer();
                hostPage.InsertPlayer();
                ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
            }
            else
            {
                ApplicationView.GetForCurrentView().ExitFullScreenMode();
                if (!CurrentVideoPlayer.MTC.IsCinema)
                {
                    hostPage.RemovePlayer();
                    host.InsertPlayer();
                }
            }
        }
Пример #12
0
        /// <summary>
        /// 获取当前的播放容器
        /// </summary>
        /// <returns></returns>
        public IPlayerHost GetCurrentPlayerBlock()
        {
            IPlayerHost host = null;

            switch (CurrentPlayerType)
            {
            case PlayerType.Video:
                host = CurrentVideoDetailBlock;
                break;

            case PlayerType.Bangumi:
                host = CurrentBangumiDetailBlock;
                break;

            case PlayerType.Live:
                break;

            default:
                break;
            }
            return(host);
        }
Пример #13
0
        /// <summary>
        /// 获取当前的播放页
        /// </summary>
        /// <returns></returns>
        public IPlayerHost GetCurrentPlayerPage()
        {
            IPlayerHost page = null;

            switch (CurrentPlayerType)
            {
            case PlayerType.Video:
                page = VideoPage.Current;
                break;

            case PlayerType.Bangumi:
                page = BangumiPage.Current;
                break;

            case PlayerType.Live:
                break;

            default:
                break;
            }
            return(page);
        }
Пример #14
0
        protected override GamePlayerBase TryJoinGameCore(IPlayerHost playerHost)
        {
            lock ( SyncRoot )
            {
                if (PlayerCollection.Count == players)
                {
                    return(null);
                }


                var player = new SimpleGamePlayer(GameHost, playerHost);

                PlayerCollection.Add(player);

                if (PlayerCollection.Count == players)
                {
                    GameHost.Run();
                }

                return(player);
            }
        }
Пример #15
0
        /// <summary>
        /// 进入小窗模式
        /// </summary>
        /// <param name="isCompact">是否为影院模式</param>
        public async void PlayVideoCompactOverlay(bool isCompact)
        {
            IPlayerHost hostPage = App._isTabletMode ? TabletMainPage.Current as IPlayerHost : DesktopMainPage.Current as IPlayerHost;
            IPlayerHost host     = App._isTabletMode ? GetCurrentPlayerBlock() : GetCurrentPlayerPage();

            if (isCompact)
            {
                host.RemovePlayer();
                hostPage.InsertPlayer();
                await ApplicationView.GetForCurrentView().TryEnterViewModeAsync(ApplicationViewMode.CompactOverlay);
            }
            else
            {
                if (!CurrentVideoPlayer.MTC.IsCompactOverlay)
                {
                    hostPage.RemovePlayer();
                    host.InsertPlayer();
                    CurrentVideoPlayer.DanmakuBarVisibility = Visibility.Visible;
                    await ApplicationView.GetForCurrentView().TryEnterViewModeAsync(ApplicationViewMode.Default);
                }
            }
        }
Пример #16
0
        /// <summary>
        /// 对游戏进行初始化
        /// </summary>
        /// <param name="host">游戏宿主</param>
        /// <param name="initializer">初始化游戏的用户宿主</param>
        public async Task Initialize(IGameHost host, IPlayerHost initializer)
        {
            lock ( SyncRoot )
            {
                if (GameState != GameState.NotInitialized)
                {
                    return;
                }

                GameState = GameState.Initializing;
            }
            try
            {
                GameHost = host;
                await InitializeCore(initializer);

                GameState = GameState.Initialized;
            }
            catch
            {
                GameState = GameState.End;
                throw;
            }
        }
Пример #17
0
 /// <summary>
 /// 创建 SimpleGamePlayer 对象
 /// </summary>
 /// <param name="gameHost">游戏宿主</param>
 /// <param name="playerHost">玩家宿主</param>
 public SimpleGamePlayer(IGameHost gameHost, IPlayerHost playerHost)
     : base(gameHost, playerHost)
 {
     Game        = (SimpleGame)gameHost.Game;
     HealthPoint = 15;
 }
Пример #18
0
 /// <summary>
 /// 创建 GamePlayerBase 对象
 /// </summary>
 /// <param name="gameHost">游戏宿主</param>
 /// <param name="playerHost">玩家宿主</param>
 protected GamePlayerBase(IGameHost gameHost, IPlayerHost playerHost)
 {
     PlayerHost = playerHost;
     GameHost   = gameHost;
 }
Пример #19
0
 public static string CurrentURL(this IPlayerHost playerhost)
 {
     return(playerhost.GetConfig(ConfigID.CurrentURL, null) + "");
 }
Пример #20
0
 /// <summary>
 /// 退出游戏
 /// </summary>
 public virtual void QuitGame()
 {
     PlayerHost = null;
 }
 protected StandardCardGamePlayer(IGameHost gameHost, IPlayerHost playerHost) :
     base(gameHost, playerHost)
 {
 }
Пример #22
0
 /// <summary>
 /// 派生类重写此方法尝试将玩家加入游戏
 /// </summary>
 /// <param name="playerHost">玩家宿主,游戏环境通过玩家宿主与玩家进行通信</param>
 /// <returns>若成功加入游戏,则返回游戏中的玩家</returns>
 protected virtual GamePlayerBase TryJoinGameCore(IPlayerHost playerHost)
 {
     throw new NotImplementedException();
 }
Пример #23
0
 /// <summary>
 /// 向玩家控制台写入一条警告消息
 /// </summary>
 /// <param name="playerHost">玩家宿主对象</param>
 /// <param name="format">消息格式字符串</param>
 /// <param name="args">要替换的参数内容</param>
 public static void WriteWarningMessage(this IPlayerHost playerHost, string format, params object[] args)
 {
     WriteWarningMessage(playerHost, string.Format(CultureInfo.InvariantCulture, format, args));
 }
Пример #24
0
 /// <summary>
 /// 向玩家控制台写入一条警告消息
 /// </summary>
 /// <param name="playerHost">玩家宿主对象</param>
 /// <param name="message">消息内容</param>
 public static void WriteWarningMessage(this IPlayerHost playerHost, string message)
 {
     playerHost.Console.WriteMessage(new GenericMessage(GameMessageType.Warning, message));
 }
Пример #25
0
 /// <summary>
 /// 派生类实现此方法完成初始化工作
 /// </summary>
 protected virtual Task InitializeCore(IPlayerHost initializer)
 {
     return(Task.CompletedTask);
 }
Пример #26
0
 protected CardGamePlayer(IGameHost gameHost, IPlayerHost playerHost)
     : base(gameHost, playerHost)
 {
     Game     = (CardGame)gameHost.Game;
     SyncRoot = new object();
 }
Пример #27
0
 /// <summary>
 /// 创建玩家控制台对象
 /// </summary>
 /// <param name="playerHost">控制台所关联的玩家宿主</param>
 protected PlayerConsoleBase(IPlayerHost playerHost)
 {
     PlayerHost = playerHost;
 }