示例#1
0
        public bool BuildResources(string folder)
        {
            string      sdsFolder = folder;
            XmlDocument document  = null;

            string SDSContentPath = Path.Combine(sdsFolder, "SDSContent.xml");

            // Attempt to sort the file.
            // Only works for M2 and M2DE.
            if (ChosenGameType == GamesEnumerator.MafiaII || ChosenGameType == GamesEnumerator.MafiaII_DE)
            {
                // Loading then saving automatically sorts.
                SDSContentFile SDSContent = new SDSContentFile();
                SDSContent.ReadFromFile(new FileInfo(SDSContentPath));
                SDSContent.WriteToFile();
            }

            // Open a FileStream which contains the SDSContent data.
            using (FileStream XMLStream = new FileStream(SDSContentPath, FileMode.Open))
            {
                try
                {
                    document = new XmlDocument();
                    document.Load(XMLStream);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(string.Format("Error while parsing SDSContent.XML. \n{0}", ex.Message));
                    return(false);
                }
            }

            // Check if document is valid. If it is, then we know it has been found and loaded without problems.
            if (document == null)
            {
                MessageBox.Show(string.Format("Failed to open SDSContent.XML. \n{0}", SDSContentPath));
                return(false);
            }

            // GoAhead and begin creating the document to save inside the SDSContent.
            XmlDocument xmlDoc   = new XmlDocument();
            XmlNode     rootNode = xmlDoc.CreateElement("xml");

            xmlDoc.AppendChild(rootNode);

            // Try and pack the resources found in SDSContent.
            bool bResult = false;

            if (_Version == 19)
            {
                bResult = BuildResourcesVersion19(document, xmlDoc, rootNode, sdsFolder);
            }
            else if (_Version == 20)
            {
                bResult = BuildResourcesVersion20(document, xmlDoc, rootNode, sdsFolder);
            }

            document = null;
            return(bResult);
        }
        private void Reload()
        {
            file = new SDSContentFile();
            file.ReadFromFile(OriginalInfo);
            PopulateTree();

            Text          = Language.GetString("$SDSCONTENT_EDITOR_TITLE");
            bIsFileEdited = false;
        }
示例#3
0
 public SDSContentEditor(FileInfo info)
 {
     InitializeComponent();
     Localise();
     file = new SDSContentFile();
     file.ReadFromFile(info);
     PopulateTree();
     ShowDialog();
 }
 private void PopulateTree()
 {
     ResourceTreeView.Nodes.Clear();
     foreach (var resource in file.Resources)
     {
         TreeNode parent = SDSContentFile.BuildResourceTreeNode(resource.Key);
         parent.Nodes.AddRange(resource.Value.ToArray());
         ResourceTreeView.Nodes.Add(parent);
     }
 }
示例#5
0
        public static void BuildData(bool forceBigEndian)
        {
            List <FileInfo>       vbps = new List <FileInfo>();
            List <FileInfo>       ibps = new List <FileInfo>();
            List <ItemDescLoader> ids  = new List <ItemDescLoader>();
            List <Actor>          act  = new List <Actor>();
            List <NAVData>        aiw  = new List <NAVData>();
            List <NAVData>        obj  = new List <NAVData>();

            isBigEndian = forceBigEndian;
            VertexTranslator.IsBigEndian = forceBigEndian;

            if (isBigEndian)
            {
                MessageBox.Show("Detected 'Big Endian' formats. This will severely effect functionality!", "Toolkit", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }

            DirectoryInfo dirInfo = new DirectoryInfo(ScenePath);

            sdsContent = new SDSContentFile();
            sdsContent.ReadFromFile(new FileInfo(Path.Combine(ScenePath + "/SDSContent.xml")));

            //IndexBuffers
            var paths = sdsContent.GetResourceFiles("IndexBufferPool", true);

            foreach (var item in paths)
            {
                ibps.Add(BuildFileInfo(item));
            }

            //Vertex Buffers
            paths = sdsContent.GetResourceFiles("VertexBufferPool", true);
            foreach (var item in paths)
            {
                vbps.Add(BuildFileInfo(item));
            }

            //Actors
            if (!isBigEndian)
            {
                paths = sdsContent.GetResourceFiles("Actors", true);
                foreach (var item in paths)
                {
                    try
                    {
                        act.Add(new Actor(item));
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Failed to read actor {0}", item);
                    }
                }
            }

            //FrameResource
            if (sdsContent.HasResource("FrameResource"))
            {
                var name = sdsContent.GetResourceFiles("FrameResource", true)[0];
                FrameResource = new FrameResource(name, isBigEndian);
            }

            //Item Desc
            if (!isBigEndian)
            {
                paths = sdsContent.GetResourceFiles("ItemDesc", true);
                foreach (var item in paths)
                {
                    ids.Add(new ItemDescLoader(item));
                }
            }

            //FrameNameTable
            if (sdsContent.HasResource("FrameNameTable"))
            {
                var name = sdsContent.GetResourceFiles("FrameNameTable", true)[0];
                FrameNameTable = new FrameNameTable(name, isBigEndian);
            }

            //Collisions
            if (!isBigEndian && sdsContent.HasResource("Collisions"))
            {
                var name = sdsContent.GetResourceFiles("Collisions", true)[0];
                Collisions = new Collision(name);
            }

            //~ENABLE THIS SECTION AT YOUR OWN RISK
            //AnimalTrafficPaths
            //if (!isBigEndian && sdsContent.HasResource("AnimalTrafficPaths"))
            //{
            //    var name = sdsContent.GetResourceFiles("AnimalTrafficPaths", true)[0];
            //    try
            //    {
            //        ATLoader = new AnimalTrafficLoader(new FileInfo(name));
            //    }
            //    catch (Exception ex)
            //    {
            //        Console.WriteLine("Failed to read AnimalTrafficPaths {0}", ex.Message);
            //    }
            //}
            //~ENABLE THIS SECTION AT YOUR OWN RISK

            if (!isBigEndian && sdsContent.HasResource("PREFAB"))
            {
                var          name   = sdsContent.GetResourceFiles("PREFAB", true)[0];
                PrefabLoader loader = new PrefabLoader(new FileInfo(name));
                Prefabs = loader;
            }

            //RoadMap
            if (!isBigEndian)
            {
                paths = sdsContent.GetResourceFiles("MemFile", true);
                foreach (var item in paths)
                {
                    if (item.Contains("RoadMap") || item.Contains("roadmap"))
                    {
                        roadMap = new Roadmap(new FileInfo(item));
                    }
                }
            }

            //~ENABLE THIS SECTION AT YOUR OWN RISK
            //Translokator
            //if (!isBigEndian && sdsContent.HasResource("Translokator"))
            //{
            //    var name = sdsContent.GetResourceFiles("Translokator", true)[0];
            //    Translokator = new TranslokatorLoader(new FileInfo(name));
            //}
            //~ENABLE THIS SECTION AT YOUR OWN RISK

            //~ENABLE THIS SECTION AT YOUR OWN RISK

            /* Kynapse OBJ_DATA
             * if (!isBigEndian)
             * {
             *  tis' broken for now
             *  paths = sdsContent.GetResourceFiles("NAV_OBJ_DATA", true);
             *  foreach (var item in paths)
             *  {
             *      obj.Add(new NAVData(new FileInfo(item)));
             *  }
             *
             *  for (int i = 0; i < obj.Count; i++)
             *  {
             *      obj[i].WriteToFile();
             *  }
             * }
             *
             * AI WORLD
             * if (!isBigEndian)
             * {
             *  paths = sdsContent.GetResourceFiles("NAV_AIWORLD_DATA", true);
             *  foreach (var Item in paths)
             *  {
             *      aiw.Add(new NAVData(new FileInfo(Item)));
             *  }
             * }
             *
             * if (!isBigEndian && sdsContent.HasResource("NAV_HPD_DATA"))
             * {
             *  var name = sdsContent.GetResourceFiles("NAV_HPD_DATA", true)[0];
             *  var data = new NAVData(new FileInfo(name));
             *  HPDData = (data.data as HPDData);
             *  data.WriteToFile();
             * }
             */
            //~ENABLE THIS SECTION AT YOUR OWN RISK

            IndexBufferPool  = new IndexBufferManager(ibps, dirInfo, isBigEndian);
            VertexBufferPool = new VertexBufferManager(vbps, dirInfo, isBigEndian);
            ItemDescs        = ids.ToArray();
            Actors           = act.ToArray();
            OBJData          = obj.ToArray();
            AIWorlds         = aiw.ToArray();
        }