public ReplayBrowserLogic(Widget widget, ModData modData, Action onExit, Action onStart) { panel = widget; this.onStart = onStart; playerList = panel.Get <ScrollPanelWidget>("PLAYER_LIST"); playerHeader = playerList.Get <ScrollItemWidget>("HEADER"); playerTemplate = playerList.Get <ScrollItemWidget>("TEMPLATE"); playerList.RemoveChildren(); panel.Get <ButtonWidget>("CANCEL_BUTTON").OnClick = () => { cancelLoadingReplays = true; Ui.CloseWindow(); onExit(); }; replayList = panel.Get <ScrollPanelWidget>("REPLAY_LIST"); var template = panel.Get <ScrollItemWidget>("REPLAY_TEMPLATE"); var mod = modData.Manifest.Mod; var dir = Platform.ResolvePath("^", "Replays", mod.Id, mod.Version); if (Directory.Exists(dir)) { ThreadPool.QueueUserWorkItem(_ => LoadReplays(dir, template)); } var watch = panel.Get <ButtonWidget>("WATCH_BUTTON"); watch.IsDisabled = () => selectedReplay == null || selectedReplay.GameInfo.MapPreview.Status != MapStatus.Available; watch.OnClick = () => { WatchReplay(); }; panel.Get("REPLAY_INFO").IsVisible = () => selectedReplay != null; var preview = panel.Get <MapPreviewWidget>("MAP_PREVIEW"); preview.SpawnOccupants = () => selectedSpawns; preview.Preview = () => selectedReplay != null ? selectedReplay.GameInfo.MapPreview : null; var titleLabel = panel.GetOrNull <LabelWidget>("MAP_TITLE"); if (titleLabel != null) { titleLabel.IsVisible = () => selectedReplay != null; var font = Game.Renderer.Fonts[titleLabel.Font]; var title = new CachedTransform <MapPreview, string>(m => WidgetUtils.TruncateText(m.Title, titleLabel.Bounds.Width, font)); titleLabel.GetText = () => title.Update(selectedReplay.GameInfo.MapPreview); } var type = panel.GetOrNull <LabelWidget>("MAP_TYPE"); if (type != null) { var mapType = new CachedTransform <MapPreview, string>(m => m.Categories.FirstOrDefault() ?? ""); type.GetText = () => mapType.Update(selectedReplay.GameInfo.MapPreview); } panel.Get <LabelWidget>("DURATION").GetText = () => WidgetUtils.FormatTimeSeconds((int)selectedReplay.GameInfo.Duration.TotalSeconds); SetupFilters(); SetupManagement(); }
public ReplayBrowserLogic(Widget widget, ModData modData, Action onExit, Action onStart) { map = MapCache.UnknownMap; panel = widget; services = modData.Manifest.Get <WebServices>(); this.modData = modData; this.onStart = onStart; Game.BeforeGameStart += OnGameStart; playerList = panel.Get <ScrollPanelWidget>("PLAYER_LIST"); playerHeader = playerList.Get <ScrollItemWidget>("HEADER"); playerTemplate = playerList.Get <ScrollItemWidget>("TEMPLATE"); playerList.RemoveChildren(); panel.Get <ButtonWidget>("CANCEL_BUTTON").OnClick = () => { cancelLoadingReplays = true; Ui.CloseWindow(); onExit(); }; replayList = panel.Get <ScrollPanelWidget>("REPLAY_LIST"); var template = panel.Get <ScrollItemWidget>("REPLAY_TEMPLATE"); var mod = modData.Manifest; var dir = Platform.ResolvePath(Platform.SupportDirPrefix, "Replays", mod.Id, mod.Metadata.Version); if (Directory.Exists(dir)) { ThreadPool.QueueUserWorkItem(_ => LoadReplays(dir, template)); } var watch = panel.Get <ButtonWidget>("WATCH_BUTTON"); watch.IsDisabled = () => selectedReplay == null || map.Status != MapStatus.Available; watch.OnClick = () => { WatchReplay(); }; var mapPreviewRoot = panel.Get("MAP_PREVIEW_ROOT"); mapPreviewRoot.IsVisible = () => selectedReplay != null; panel.Get("REPLAY_INFO").IsVisible = () => selectedReplay != null; Ui.LoadWidget("MAP_PREVIEW", mapPreviewRoot, new WidgetArgs { { "orderManager", null }, { "getMap", (Func <MapPreview>)(() => map) }, { "onMouseDown", (Action <MapPreviewWidget, MapPreview, MouseInput>)((preview, mapPreview, mi) => { }) }, { "getSpawnOccupants", (Func <MapPreview, Dictionary <CPos, SpawnOccupant> >)(mapPreview => LobbyUtils.GetSpawnOccupants(selectedReplay.GameInfo.Players, mapPreview)) }, { "showUnoccupiedSpawnpoints", false }, }); var replayDuration = new CachedTransform <ReplayMetadata, string>(r => "Duration: {0}".F(WidgetUtils.FormatTimeSeconds((int)selectedReplay.GameInfo.Duration.TotalSeconds))); panel.Get <LabelWidget>("DURATION").GetText = () => replayDuration.Update(selectedReplay); SetupFilters(); SetupManagement(); }
public ReplayBrowserLogic(Widget widget, Action onExit, Action onStart) { panel = widget; playerList = panel.Get <ScrollPanelWidget>("PLAYER_LIST"); playerHeader = playerList.Get <ScrollItemWidget>("HEADER"); playerTemplate = playerList.Get <ScrollItemWidget>("TEMPLATE"); playerList.RemoveChildren(); panel.Get <ButtonWidget>("CANCEL_BUTTON").OnClick = () => { Ui.CloseWindow(); onExit(); }; replayList = panel.Get <ScrollPanelWidget>("REPLAY_LIST"); var template = panel.Get <ScrollItemWidget>("REPLAY_TEMPLATE"); var mod = Game.modData.Manifest.Mod; var dir = Platform.ResolvePath("^", "Replays", mod.Id, mod.Version); replayList.RemoveChildren(); if (Directory.Exists(dir)) { using (new Support.PerfTimer("Load replays")) { replays = Directory .GetFiles(dir, "*.rep") .Select(ReplayMetadata.Read) .Where(r => r != null) .OrderByDescending(r => r.GameInfo.StartTimeUtc) .ToList(); } foreach (var replay in replays) { AddReplay(replay, template); } ApplyFilter(); } else { replays = new List <ReplayMetadata>(); } var watch = panel.Get <ButtonWidget>("WATCH_BUTTON"); watch.IsDisabled = () => selectedReplay == null || selectedReplay.GameInfo.MapPreview.Status != MapStatus.Available; watch.OnClick = () => { WatchReplay(); onStart(); }; panel.Get("REPLAY_INFO").IsVisible = () => selectedReplay != null; var preview = panel.Get <MapPreviewWidget>("MAP_PREVIEW"); preview.SpawnOccupants = () => selectedSpawns; preview.Preview = () => selectedReplay != null ? selectedReplay.GameInfo.MapPreview : null; var title = panel.GetOrNull <LabelWidget>("MAP_TITLE"); if (title != null) { title.GetText = () => selectedReplay != null ? selectedReplay.GameInfo.MapPreview.Title : null; } var type = panel.GetOrNull <LabelWidget>("MAP_TYPE"); if (type != null) { type.GetText = () => selectedReplay.GameInfo.MapPreview.Type; } panel.Get <LabelWidget>("DURATION").GetText = () => WidgetUtils.FormatTimeSeconds((int)selectedReplay.GameInfo.Duration.TotalSeconds); SetupFilters(); SetupManagement(); }
public MusicPlayerLogic(Action onExit) { bg = Ui.Root.Get("MUSIC_MENU"); CurrentSong = GetNextSong(); bg.Get("BUTTON_PAUSE").IsVisible = () => Sound.MusicPlaying; bg.Get("BUTTON_PLAY").IsVisible = () => !Sound.MusicPlaying; bg.Get <ButtonWidget>("BUTTON_CLOSE").OnClick = () => { Game.Settings.Save(); Ui.CloseWindow(); onExit(); }; bg.Get("BUTTON_INSTALL").IsVisible = () => false; bg.Get <ButtonWidget>("BUTTON_PLAY").OnClick = () => Play(CurrentSong); bg.Get <ButtonWidget>("BUTTON_PAUSE").OnClick = Sound.PauseMusic; bg.Get <ButtonWidget>("BUTTON_STOP").OnClick = Sound.StopMusic; bg.Get <ButtonWidget>("BUTTON_NEXT").OnClick = () => Play(GetNextSong()); bg.Get <ButtonWidget>("BUTTON_PREV").OnClick = () => Play(GetPrevSong()); var shuffleCheckbox = bg.Get <CheckboxWidget>("SHUFFLE"); shuffleCheckbox.IsChecked = () => Game.Settings.Sound.Shuffle; shuffleCheckbox.OnClick = () => Game.Settings.Sound.Shuffle ^= true; var repeatCheckbox = bg.Get <CheckboxWidget>("REPEAT"); repeatCheckbox.IsChecked = () => Game.Settings.Sound.Repeat; repeatCheckbox.OnClick = () => Game.Settings.Sound.Repeat ^= true; bg.Get <LabelWidget>("TIME").GetText = () => { if (CurrentSong == null) { return(""); } return("{0} / {1}".F( WidgetUtils.FormatTimeSeconds((int)Sound.MusicSeekPosition), WidgetUtils.FormatTimeSeconds(Rules.Music[CurrentSong].Length))); }; var ml = bg.Get <ScrollPanelWidget>("MUSIC_LIST"); var itemTemplate = ml.Get <ScrollItemWidget>("MUSIC_TEMPLATE"); if (!Rules.InstalledMusic.Any()) { itemTemplate.IsVisible = () => true; itemTemplate.Get <LabelWidget>("TITLE").GetText = () => "No Music Installed"; itemTemplate.Get <LabelWidget>("TITLE").Align = TextAlign.Center; } foreach (var kv in Rules.InstalledMusic) { var song = kv.Key; var item = ScrollItemWidget.Setup(itemTemplate, () => CurrentSong == song, () => Play(song)); item.Get <LabelWidget>("TITLE").GetText = () => Rules.Music[song].Title; item.Get <LabelWidget>("LENGTH").GetText = () => WidgetUtils.FormatTimeSeconds(Rules.Music[song].Length); ml.AddChild(item); } }