private void AddStatusButton_Click(object sender, RoutedEventArgs e)
        {
            Status     newStatus = new Status("New Status", Colors.Black);
            EditStatus window    = new EditStatus(_statusList, newStatus);

            window.ShowDialog();

            bool succeeded = _statusList.Add(newStatus);

            while (!succeeded)
            {
                MessageBox.Show("The description or color of the new status is duplicated!");
                window = new EditStatus(_statusList, newStatus);
                window.ShowDialog();
                succeeded = _statusList.Add(newStatus);
            }

            RefreshStatusPanel();
        }
Beispiel #2
0
        private void LoadButton_Click(object sender, RoutedEventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter = "Cellular Automaton Game File (*.cag)|*.cag";
            _rules  = new List <Rule>();
            _status = new StatusList(false);
            if (openFileDialog.ShowDialog() == true)
            {
                string[] allLines    = File.ReadAllLines(openFileDialog.FileName);
                int      mapLineLeft = 0;
                foreach (var line in allLines)
                {
                    string trim = line.Trim(' ', '\t');
                    if (trim.StartsWith("$"))
                    {
                        continue;
                    }
                    if (trim.Length == 0)
                    {
                        continue;
                    }

                    if (mapLineLeft > 0)
                    {
                        string[] split = trim.Split('#');
                        for (int j = 0; j < _map.Height; ++j)
                        {
                            _map[_map.Width - mapLineLeft, j] = int.Parse(split[j]);
                        }
                        --mapLineLeft;
                        if (mapLineLeft == 0)
                        {
                            ReconstructGrid();
                        }
                        continue;
                    }

                    if (trim.StartsWith("s"))
                    {
                        // Status Line
                        string[] split = trim.Split('#');

                        Status newStatus = new Status(split[1], Color.FromRgb(byte.Parse(split[2]), byte.Parse(split[3]), byte.Parse(split[4])));
                        _status.Add(newStatus);
                    }
                    else if (trim.StartsWith("r"))
                    {
                        // Rule Line
                        string[] split = trim.Split('#');

                        Rule newRule = new Rule(split[1], int.Parse(split[2]), int.Parse(split[3]), int.Parse(split[4]), int.Parse(split[5]), short.Parse(split[7]));
                        newRule.Result = int.Parse(split[6]);
                        int s = 8;
                        for (int i = -newRule.Left; i <= newRule.Right; ++i)
                        {
                            for (int j = -newRule.Top; j <= newRule.Bottom; ++j)
                            {
                                newRule[i, j] = int.Parse(split[s]);
                                ++s;
                            }
                        }

                        _rules.Add(newRule);
                    }
                    else if (trim.StartsWith("m"))
                    {
                        string[] split = trim.Split('#');

                        _map        = new Map(int.Parse(split[1]), int.Parse(split[2]), (Map.EdgeType) int.Parse(split[3]));
                        mapLineLeft = _map.Width;
                    }
                }
            }
            CalculateFitTransform();
            SetFixedTransforms();
            ResetTransforms();
        }