예제 #1
0
        /// <summary>
        /// Applies metadata to an in-memory ESD, adding additional info.
        /// </summary>
        public static void Apply(ESDL esd, ESDMetadata meta)
        {
            if (meta.ESDHash.Trim().ToUpper() != esd.LastSavedHash.Trim().ToUpper())
            {
                throw new Exception("MD5 Hash of ESD file does not match that of the saved metadata. Metadata was not made for this ESD file.");
            }

            esd.StateGroupNames = meta.StateGroupNames;

            foreach (var g in esd.StateGroups.Keys)
            {
                foreach (var s in esd.StateGroups[g].Keys)
                {
                    esd.StateGroups[g][s].Name        = meta.StateMetadatas[g][s].Name;
                    esd.StateGroups[g][s].EntryScript = meta.StateMetadatas[g][s].EntryScript;
                    esd.StateGroups[g][s].ExitScript  = meta.StateMetadatas[g][s].ExitScript;
                    esd.StateGroups[g][s].WhileScript = meta.StateMetadatas[g][s].WhileScript;
                }
            }

            foreach (var g in esd.GetAllConditions())
            {
                foreach (var c in g.Value)
                {
                    c.Name       = meta.ConditionMetadatas[c.MetaRefID].Name;
                    c.Evaluator  = meta.ConditionMetadatas[c.MetaRefID].Evaluator;
                    c.PassScript = meta.ConditionMetadatas[c.MetaRefID].PassScript;
                }
            }
        }
예제 #2
0
        byte[] WriteESD(ESDL esd)
        {
            EzSembleContext context = EzSembleContext.LoadFromXml(docPath);

            // ESD esd = new ESD();
            using (MemoryStream stream = new MemoryStream())
            {
                esd.WriteWithContext(new BinaryWriterEx(false, stream), context);
                return(stream.ToArray());
            }
        }
예제 #3
0
        private ESDL ReadESD(byte[] data, string path, int check = -1)
        {
            if (check > 1)
            {
                int esdId = int.Parse(path.Substring(1));
                if (esdId != check)
                {
                    return(null);
                }
            }
            EzSembleContext context = EzSembleContext.LoadFromXml(docPath);
            ESDL            esd     = new ESDL();

            esd.ReadWithContext(new BinaryReaderEx(false, data), context);
            return(esd);
        }
예제 #4
0
        public void Custom(int esdId)
        {
            Dictionary <string, Dictionary <string, ESDL> > esds = LoadBnd(esdDir, (data, path) => ReadESD(data, path, esdId));

            if (esds.Count != 1)
            {
                throw new Exception($"Found in {esds.Count} map");
            }
            string map = esds.Keys.First();

            if (esds[map].Count != 1)
            {
                throw new Exception($"Found in {esds[map].Count} esds within {map}");
            }
            string name = esds[map].Keys.First();
            ESDL   esd  = esds[map][name];
            // Do custom logic here
        }
예제 #5
0
        /// <summary>
        /// Generates metadata based on the in-memory ESD file.
        /// </summary>
        public static ESDMetadata Generate(ESDL esd)
        {
            var meta = new ESDMetadata();

            meta.ESDHash = esd.LastSavedHash;

            meta.StateGroupNames = esd.StateGroupNames;

            foreach (var g in esd.StateGroups.Keys)
            {
                meta.StateMetadatas.Add(g, new Dictionary <long, StateMetadata>());
                foreach (var s in esd.StateGroups[g].Keys)
                {
                    meta.StateMetadatas[g].Add(s, new StateMetadata()
                    {
                        Name        = esd.StateGroups[g][s].Name,
                        EntryScript = esd.StateGroups[g][s].EntryScript,
                        ExitScript  = esd.StateGroups[g][s].ExitScript,
                        WhileScript = esd.StateGroups[g][s].WhileScript,
                    });
                }
            }

            foreach (var g in esd.GetAllConditions())
            {
                foreach (var c in g.Value)
                {
                    meta.ConditionMetadatas.Add(c.MetaRefID, new ConditionMetadata()
                    {
                        Name       = c.Name,
                        Evaluator  = c.Evaluator,
                        PassScript = c.PassScript,
                    });
                }
            }

            return(meta);
        }