コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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]);
        }