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(); }
public void OnTrackChanged(IPlayerHost player) { using (var sw = File.AppendText(Path.Combine(DIR, PATH))) { sw.WriteLine($"[{DateTime.Now}] {player.Track}\n"); } }
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); }
public void JoinGame(IPlayerHost player) { string reason; if (!TryJoinGame(player, out reason)) { player.WriteWarningMessage("加入游戏 \"{0}\" 失败,原因为: {1}", Game.RoomName, reason); } }
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); }
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); }
/// <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(); } } }
/// <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); } }
/// <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); } }
/// <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(); } } }
/// <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); }
/// <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); }
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); } }
/// <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); } } }
/// <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; } }
/// <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; }
/// <summary> /// 创建 GamePlayerBase 对象 /// </summary> /// <param name="gameHost">游戏宿主</param> /// <param name="playerHost">玩家宿主</param> protected GamePlayerBase(IGameHost gameHost, IPlayerHost playerHost) { PlayerHost = playerHost; GameHost = gameHost; }
public static string CurrentURL(this IPlayerHost playerhost) { return(playerhost.GetConfig(ConfigID.CurrentURL, null) + ""); }
/// <summary> /// 退出游戏 /// </summary> public virtual void QuitGame() { PlayerHost = null; }
protected StandardCardGamePlayer(IGameHost gameHost, IPlayerHost playerHost) : base(gameHost, playerHost) { }
/// <summary> /// 派生类重写此方法尝试将玩家加入游戏 /// </summary> /// <param name="playerHost">玩家宿主,游戏环境通过玩家宿主与玩家进行通信</param> /// <returns>若成功加入游戏,则返回游戏中的玩家</returns> protected virtual GamePlayerBase TryJoinGameCore(IPlayerHost playerHost) { throw new NotImplementedException(); }
/// <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)); }
/// <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)); }
/// <summary> /// 派生类实现此方法完成初始化工作 /// </summary> protected virtual Task InitializeCore(IPlayerHost initializer) { return(Task.CompletedTask); }
protected CardGamePlayer(IGameHost gameHost, IPlayerHost playerHost) : base(gameHost, playerHost) { Game = (CardGame)gameHost.Game; SyncRoot = new object(); }
/// <summary> /// 创建玩家控制台对象 /// </summary> /// <param name="playerHost">控制台所关联的玩家宿主</param> protected PlayerConsoleBase(IPlayerHost playerHost) { PlayerHost = playerHost; }