private void SortSpawnsetFilesButton_Click(object sender, RoutedEventArgs e) { Button button = sender as Button; foreach (Image image in spawnsetSortingImages) { if (image == button.Content as Image) { image.Source = new BitmapImage(ContentUtils.MakeUri(System.IO.Path.Combine("Content", "Images", "Buttons", "SpawnsetSortActive.png"))); image.RenderTransform = new ScaleTransform { ScaleY = -(image.RenderTransform as ScaleTransform).ScaleY }; } else { image.Source = new BitmapImage(ContentUtils.MakeUri(System.IO.Path.Combine("Content", "Images", "Buttons", "SpawnsetSort.png"))); } } SpawnsetListSorting <SpawnsetListEntry> sorting = button.Tag as SpawnsetListSorting <SpawnsetListEntry>; SpawnsetListHandler.Instance.ActiveSpawnsetSorting = sorting; SpawnsetListHandler.Instance.ActiveSpawnsetSorting.Ascending = !SpawnsetListHandler.Instance.ActiveSpawnsetSorting.Ascending; SortSpawnsets(sorting); }
private StackPanel CreateHeaderStackPanel <T>(int index, List <Image> sortingImages, SpawnsetListSorting <T> sorting, SpawnsetListSorting <T> activeSorting, Action <object, RoutedEventArgs> buttonClick) where T : AbstractListEntry { Label label = new Label { FontWeight = FontWeights.Bold, Content = sorting.DisplayName }; Image image = new Image { Source = new BitmapImage(ContentUtils.MakeUri(System.IO.Path.Combine("Content", "Images", "Buttons", sorting == activeSorting ? "SpawnsetSortActive.png" : "SpawnsetSort.png"))), Stretch = Stretch.None, RenderTransformOrigin = new Point(0.5, 0.5), RenderTransform = new ScaleTransform { ScaleY = sorting.IsAscendingDefault ? sorting.Ascending ? 1 : -1 : sorting.Ascending ? -1 : 1 } }; sortingImages.Add(image); Button button = new Button { ToolTip = $"Sort by \"{sorting.FullName}\"", Width = 18, Content = image, Tag = sorting }; button.Click += (sender, e) => buttonClick(sender, e); StackPanel stackPanel = new StackPanel { Orientation = Orientation.Horizontal }; stackPanel.Children.Add(label); stackPanel.Children.Add(button); Grid.SetColumn(stackPanel, index++); return(stackPanel); }
public void Initialize() { for (int i = 0; i < 7; i++) { HeightMap.RowDefinitions.Add(new RowDefinition()); } for (int i = 0; i < 9; i++) { HeightMap.ColumnDefinitions.Add(new ColumnDefinition()); } for (int i = 0; i < 9; i++) { float height = i == 0 ? TileUtils.VoidDefault : -1.25f + i * 0.25f; RadioButton heightRadioButton = height == TileUtils.VoidDefault ? new RadioButton { Margin = new Thickness(), Background = new SolidColorBrush(Color.FromRgb(0, 0, 0)), ToolTip = new TextBlock { Text = "Void", FontWeight = FontWeights.Bold }, Tag = height, IsChecked = true } : new RadioButton { Margin = new Thickness(), Background = new SolidColorBrush(TileUtils.GetColorFromHeight(height)), ToolTip = height.ToString("0.##"), Tag = height }; heightRadioButton.Checked += (sender, e) => { RadioButton r = sender as RadioButton; foreach (RadioButton rb in tileActionRadioButtons) { if (rb != r) { rb.IsChecked = false; } } tileAction = TileAction.Height; heightSelectorValue = float.Parse(r.Tag.ToString()); }; Grid.SetRow(heightRadioButton, 0); Grid.SetColumn(heightRadioButton, i); HeightMap.Children.Add(heightRadioButton); tileActionRadioButtons.Add(heightRadioButton); } for (int i = 0; i < 6; i++) { for (int j = 0; j < 9; j++) { float height = i * 9 + j + 1; RadioButton heightRadioButton = new RadioButton { Margin = new Thickness(), Background = new SolidColorBrush(TileUtils.GetColorFromHeight(height)), ToolTip = height.ToString(), Tag = height }; heightRadioButton.Checked += (sender, e) => { RadioButton r = sender as RadioButton; foreach (RadioButton rb in tileActionRadioButtons) { if (rb != r) { rb.IsChecked = false; } } tileAction = TileAction.Height; heightSelectorValue = float.Parse(r.Tag.ToString()); }; Grid.SetRow(heightRadioButton, i + 1); Grid.SetColumn(heightRadioButton, j); HeightMap.Children.Add(heightRadioButton); tileActionRadioButtons.Add(heightRadioButton); } } foreach (TileAction tileAction in (TileAction[])Enum.GetValues(typeof(TileAction))) { if (tileAction == TileAction.Height) { continue; } RadioButton radioButton = new RadioButton { Content = new Image { Source = new BitmapImage(ContentUtils.MakeUri(System.IO.Path.Combine("Content", "Images", "Buttons", $"ArenaTilesAction{tileAction}.png"))) }, ToolTip = tileAction.ToUserFriendlyString(), IsChecked = tileAction == 0 }; radioButton.Checked += (sender, e) => { RadioButton r = sender as RadioButton; foreach (RadioButton rb in tileActionRadioButtons) { if (rb != r) { rb.IsChecked = false; } } this.tileAction = tileAction; }; tileActionRadioButtons.Add(radioButton); TileActionsStackPanel.Children.Add(radioButton); } foreach (TileSelection tileSelection in (TileSelection[])Enum.GetValues(typeof(TileSelection))) { RadioButton radioButton = new RadioButton { Content = new Image { Source = new BitmapImage(ContentUtils.MakeUri(System.IO.Path.Combine("Content", "Images", "Buttons", $"ArenaTilesSelection{tileSelection}.png"))) }, ToolTip = tileSelection.ToUserFriendlyString(), IsChecked = tileSelection == 0 }; radioButton.Checked += (sender, e) => { this.tileSelection = tileSelection; }; tileSelectionRadioButtons.Add(radioButton); TileSelectionsStackPanel.Children.Add(radioButton); } foreach (Type type in ArenaPresetHandler.Instance.PresetTypes) { string typeName = type.Name.ToString(); ComboBoxItem item = new ComboBoxItem() { Content = typeName.ToUserFriendlyString(), Tag = typeName }; if (typeName == "Default") { ComboBoxArenaPreset.SelectedItem = item; } ComboBoxArenaPreset.Items.Add(item); } for (int i = 0; i < Spawnset.ArenaWidth; i++) { for (int j = 0; j < Spawnset.ArenaHeight; j++) { Rectangle tileRectangle = new Rectangle { Width = TileUtils.TileSize, Height = TileUtils.TileSize }; Canvas.SetLeft(tileRectangle, i * TileUtils.TileSize); Canvas.SetTop(tileRectangle, j * TileUtils.TileSize); ArenaTiles.Children.Add(tileRectangle); tileElements[i, j] = tileRectangle; UpdateTile(new ArenaCoord(i, j)); } } CursorRectangle.Width = TileUtils.TileSize; CursorRectangle.Height = TileUtils.TileSize; CursorRectangle.Stroke = new SolidColorBrush(Color.FromArgb(128, 255, 255, 255)); SetSettingTextBoxes(); }
public LoadingWindow() { InitializeComponent(); Splash.Source = new BitmapImage(ContentUtils.MakeUri(Path.Combine("Content", "Images", "SplashScreens", $"{RandomUtils.RandomInt(37)}.png"))); VersionLabel.Content = $"Version {App.LocalVersion}"; #if DEBUG VersionLabel.Background = new SolidColorBrush(Color.FromRgb(0, 255, 64)); VersionLabel.Content += " DEBUG"; #endif BackgroundWorker checkVersionThread = new BackgroundWorker(); checkVersionThread.DoWork += (object sender, DoWorkEventArgs e) => { VersionHandler.Instance.GetOnlineVersion(App.ApplicationName, App.LocalVersion); }; checkVersionThread.RunWorkerCompleted += (object sender, RunWorkerCompletedEventArgs e) => { Dispatcher.Invoke(() => { VersionResult versionResult = VersionHandler.Instance.VersionResult; if (versionResult.Exception != null) { App.Instance.ShowError($"Error retrieving version number for '{App.ApplicationName}'", versionResult.Exception.Message, versionResult.Exception.InnerException); } TaskResultsStackPanel.Children.Add(new Label { Content = versionResult.IsUpToDate.HasValue ? versionResult.IsUpToDate.Value ? "OK (up to date)" : "OK (update available)" : "Error", Foreground = new SolidColorBrush(versionResult.IsUpToDate.HasValue ? versionResult.IsUpToDate.Value ? Color.FromRgb(0, 128, 0) : Color.FromRgb(255, 96, 0) : Color.FromRgb(255, 0, 0)), FontWeight = FontWeights.Bold }); }); ThreadComplete(); }; bool readUserSettingsSuccess = false; bool userSettingsFileExists = File.Exists(UserSettings.FileName); BackgroundWorker readUserSettingsThread = new BackgroundWorker(); readUserSettingsThread.DoWork += (object sender, DoWorkEventArgs e) => { try { if (userSettingsFileExists) { using (StreamReader sr = new StreamReader(File.OpenRead(UserSettings.FileName))) UserHandler.Instance.settings = JsonConvert.DeserializeObject <UserSettings>(sr.ReadToEnd()); } readUserSettingsSuccess = true; } catch (Exception ex) { App.Instance.ShowError("Error", "Error while trying to read user settings.", ex); } }; readUserSettingsThread.RunWorkerCompleted += (object sender, RunWorkerCompletedEventArgs e) => { Dispatcher.Invoke(() => { TaskResultsStackPanel.Children.Add(new Label { Content = readUserSettingsSuccess ? userSettingsFileExists ? "OK (found user settings)" : "OK (created new user settings)" : "Error", Foreground = new SolidColorBrush(readUserSettingsSuccess ? Color.FromRgb(0, 128, 0) : Color.FromRgb(255, 0, 0)), FontWeight = FontWeights.Bold }); }); ThreadComplete(); }; BackgroundWorker validateSurvivalFileThread = new BackgroundWorker(); validateSurvivalFileThread.DoWork += (object sender, DoWorkEventArgs e) => { Dispatcher.Invoke(() => { TaskResultsStackPanel.Children.Add(new Label { Content = UserHandler.Instance.settings.SurvivalFileExists ? UserHandler.Instance.settings.SurvivalFileIsValid ? "OK" : "Error (could not parse file)" : "Error (file not found)", Foreground = new SolidColorBrush(!UserHandler.Instance.settings.SurvivalFileExists || !UserHandler.Instance.settings.SurvivalFileIsValid ? Color.FromRgb(255, 0, 0) : Color.FromRgb(0, 128, 0)), FontWeight = FontWeights.Bold }); }); }; validateSurvivalFileThread.RunWorkerCompleted += (object sender, RunWorkerCompletedEventArgs e) => { ThreadComplete(); }; bool retrieveSpawnsetsSuccess = false; BackgroundWorker retrieveSpawnsetsThread = new BackgroundWorker(); retrieveSpawnsetsThread.DoWork += (object sender, DoWorkEventArgs e) => { retrieveSpawnsetsSuccess = NetworkHandler.Instance.RetrieveSpawnsetList(); }; retrieveSpawnsetsThread.RunWorkerCompleted += (object sender, RunWorkerCompletedEventArgs e) => { Dispatcher.Invoke(() => { TaskResultsStackPanel.Children.Add(new Label { Content = retrieveSpawnsetsSuccess ? "OK" : "Error", Foreground = new SolidColorBrush(retrieveSpawnsetsSuccess ? Color.FromRgb(0, 128, 0) : Color.FromRgb(255, 0, 0)), FontWeight = FontWeights.Bold }); }); ThreadComplete(); }; bool retrieveCustomLeaderboardsSuccess = false; BackgroundWorker retrieveCustomLeaderboardsThread = new BackgroundWorker(); retrieveCustomLeaderboardsThread.DoWork += (object sender, DoWorkEventArgs e) => { retrieveCustomLeaderboardsSuccess = NetworkHandler.Instance.RetrieveCustomLeaderboardList(); }; retrieveCustomLeaderboardsThread.RunWorkerCompleted += (object sender, RunWorkerCompletedEventArgs e) => { Dispatcher.Invoke(() => { TaskResultsStackPanel.Children.Add(new Label { Content = retrieveCustomLeaderboardsSuccess ? "OK" : "Error", Foreground = new SolidColorBrush(retrieveCustomLeaderboardsSuccess ? Color.FromRgb(0, 128, 0) : Color.FromRgb(255, 0, 0)), FontWeight = FontWeights.Bold }); }); ThreadComplete(); }; BackgroundWorker mainInitThread = new BackgroundWorker(); mainInitThread.DoWork += (object sender, DoWorkEventArgs e) => { Dispatcher.Invoke(() => { MainWindow mainWindow = new MainWindow(); mainWindow.Show(); }); }; mainInitThread.RunWorkerCompleted += (object sender, RunWorkerCompletedEventArgs e) => { Close(); }; threads.Add(checkVersionThread); threads.Add(readUserSettingsThread); threads.Add(validateSurvivalFileThread); threads.Add(retrieveSpawnsetsThread); threads.Add(retrieveCustomLeaderboardsThread); threads.Add(mainInitThread); threadMessages.Add("Checking for updates..."); threadMessages.Add("Reading user settings..."); threadMessages.Add("Validating survival file..."); threadMessages.Add("Retrieving spawnsets..."); threadMessages.Add("Retrieving custom leaderboards..."); threadMessages.Add("Initializing application..."); RunThread(threads[0]); }