Exemplo n.º 1
0
        private void openFileButton_Click(object sender, EventArgs e)
        {
            OpenFileDialog fileDialog = new OpenFileDialog();

            fileDialog.Title            = "Select Save File to Open";
            fileDialog.Filter           = "RWM files|*.rwm";
            fileDialog.InitialDirectory = Settings.Default.lastUsedPath;
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                Settings.Default.lastUsedPath = Path.GetDirectoryName(fileDialog.FileName);
                Settings.Default.Save();

                handler = new XmlHandler(fileDialog.FileName);
                if (backupCheck.Checked == false)
                {
                    handler.ToggleBackup();
                }
                nodeMap = handler.Populate();
                colonistListBox.DataSource    = nodeMap.pawnNodeList;
                colonistListBox.DisplayMember = "fullName";
                DefDumper.DumpBackstories();
                PopulateBackstories();


                if (!toggleOnce)
                {
                    ToggleControls();
                    toggleOnce = true;
                }
            }
            if (!Settings.Default.rimworldDirSet)
            {
                FolderBrowserDialog folderSelector = new FolderBrowserDialog();
                folderSelector.Description = "Please find the path to your rimworld directory. This is important for thoughtDefs and traitDefs to function.";
                if (folderSelector.ShowDialog() == DialogResult.OK)
                {
                    Settings.Default.rimworldDir    = folderSelector.SelectedPath;
                    Settings.Default.rimworldDirSet = true;
                    Settings.Default.Save();
                }
            }
            if (Settings.Default.rimworldDirSet)
            {
                PopulateAvailableThoughts();
            }
        }
Exemplo n.º 2
0
        //intialize document, Populate PawnNodeMaps return list of maps
        public NodeMap Populate()
        {
            saveFile = new XmlDocument();
            saveFile.Load(filePath);

            //rebuild from scratch
            NodeMap nodeMap = new NodeMap();

            //Populate Colony nodes
            XmlNode colonyName = saveFile.SelectSingleNode("map/colonyInfo/colonyName");

            if (colonyName.InnerText != null)
            {
                nodeMap.colonyName = colonyName;
            }

            //Populate research nodes
            XmlNodeList researchNames  = saveFile.SelectNodes("map/researchManager/progress/keys");
            XmlNodeList researchValues = saveFile.SelectNodes("map/researchManager/progress/values");
            SortedList <string, XmlNode> researchNodes = new SortedList <string, XmlNode>();

            for (int i = 0; i < researchNames.Count; i++)
            {
                string  name  = researchNames.Item(i).InnerText;
                XmlNode value = researchValues.Item(i);
                researchNodes.Add(name, value);
            }
            nodeMap.researchNodes = researchNodes;

            //Get pawns by finding pawns with "Colonist" kindDef
            //was use "Colony" faction before but different languages save the innerText of this node in their language
            XmlNodeList    pawnFactionNodes = saveFile.SelectNodes(Globals.XMLFINDPAWN);
            List <XmlNode> pawns            = new List <XmlNode>();

            foreach (XmlNode pawnFactionNode in pawnFactionNodes)
            {
                pawns.Add(pawnFactionNode.ParentNode);
            }
            List <NodeMap.PawnNode> pawnNodeList = new List <NodeMap.PawnNode>();

            //populate colonist nodes
            foreach (XmlNode pawnNode in pawns)
            {
                //new pawn node object
                NodeMap.PawnNode workingPawnNode = new NodeMap.PawnNode();
                workingPawnNode.pawn = pawnNode;

                //get name nodes
                XmlNode storyNode = pawnNode.SelectSingleNode("story");
                workingPawnNode.nameFirst = storyNode.SelectSingleNode("name.first");
                workingPawnNode.nameLast  = storyNode.SelectSingleNode("name.last");
                workingPawnNode.nameNick  = storyNode.SelectSingleNode("name.nick");
                workingPawnNode.childhood = storyNode.SelectSingleNode("childhood");
                workingPawnNode.adulthood = storyNode.SelectSingleNode("adulthood");
                //Concatenate full name
                workingPawnNode.InitNames();

                //get pawn health node
                workingPawnNode.pawnHealth = pawnNode.SelectSingleNode("healthTracker/pawnHealth");

                //loop for skills
                XmlNodeList skillNodes = pawnNode.SelectNodes("skills/skills/li");
                SortedList <string, XmlNode> skillNodesList   = new SortedList <string, XmlNode>();
                SortedList <String, XmlNode> passionNodesList = new SortedList <string, XmlNode>();
                foreach (XmlNode skillNode in skillNodes)
                {
                    string  skillName  = skillNode.SelectSingleNode("def").InnerText;
                    XmlNode skillLevel = skillNode.SelectSingleNode("level");

                    //Fix for NRE's due to non-existing node for 0 values
                    if (skillLevel == null)
                    {
                        XmlElement nreFix = saveFile.CreateElement("level");
                        nreFix.InnerText = "0";
                        skillNode.AppendChild(nreFix);
                        skillLevel = skillNode.SelectSingleNode("level");
                    }
                    //add Skill to list
                    skillNodesList.Add(skillName, skillLevel);

                    //While we're already at the skill grab the passion node
                    XmlNode passionNode = skillNode.SelectSingleNode("passion");
                    passionNodesList.Add(skillName, passionNode);
                }
                //End Skill loop
                //After loop add lists to pawn
                workingPawnNode.skillNodes   = skillNodesList;
                workingPawnNode.passionNodes = passionNodesList;

                //Start Thought Loop
                SortedList <string, XmlNode> thoughtNodeList = new SortedList <string, XmlNode>();
                XmlNodeList topLevelThoughts          = pawnNode.SelectNodes("psychology/thoughts/thoughts/li");
                Dictionary <string, int> thoughtDupes = new Dictionary <string, int>();
                foreach (XmlNode thoughtNode in topLevelThoughts)
                {
                    string name = thoughtNode.SelectSingleNode("def").InnerText + ":" + thoughtNode.SelectSingleNode("age").InnerText;
                    if (!thoughtDupes.ContainsKey(name))
                    {
                        thoughtDupes.Add(name, 1);
                    }
                    else
                    {
                        name = name + ":" + thoughtDupes[name];
                        thoughtDupes[thoughtNode.SelectSingleNode("def").InnerText + ":" + thoughtNode.SelectSingleNode("age").InnerText]++;
                    }
                    thoughtNodeList.Add(name, thoughtNode);
                }
                //add thoughts to pawn
                workingPawnNode.thoughtNodes = thoughtNodeList;
                //add this pawn to master list as we're done with it
                pawnNodeList.Add(workingPawnNode);
            }
            //Add pawn list to nodeMap
            nodeMap.pawnNodeList = pawnNodeList;
            return(nodeMap);
        }