Beispiel #1
0
        public INomadSerializer GetSerializer()
        {
            if (CustomSerializer != null)
            {
                return(CustomSerializer);
            }

            INomadSerializer serializer = null;

            var filter = GetFilter();

            if (filter != null)
            {
                serializer        = ResourceFactory.GetSerializer(filter);
                serializer.Format = ResourceFactory.GetFormat(filter.Version);
            }

            // need generic serializer?
            if (serializer == null)
            {
                serializer = new NomadResourceSerializer();
            }

            return(serializer);
        }
Beispiel #2
0
        public static INomadSerializer GetSerializer(ResourceFilter filter)
        {
            if (filter.Version == 1)
            {
                return(new NomadRmlSerializer());
            }

            INomadSerializer serializer = GetSerializer(filter.Type);

            if (serializer == null)
            {
                Debug.WriteLine($"Could not create a serializer using resource filter '{filter.ToString()}'");
            }

            return(serializer);
        }
Beispiel #3
0
        public static ResourceFile Open(string filename, bool load = true)
        {
            var type  = FileType.Binary;
            var flags = FileTypeFlags.None;

            var ext = Path.GetExtension(filename);

            switch (ext)
            {
            case ".rml":
                flags |= FileTypeFlags.Rml;
                break;

            case ".xml":
                type = FileType.Xml;
                break;
            }

            var isRml = flags.HasFlag(FileTypeFlags.Rml);
            var isXml = (type == FileType.Xml || isRml) && Utils.IsXmlFile(filename);

            INomadSerializer serializer = null;
            var valid = true;

            ResourceFilter filter = null;

            if (isXml)
            {
                serializer = new NomadXmlSerializer();

                var xml = Utils.LoadXmlFile(filename);

                filter = GetFilter(xml.Root);

                if (filter != null)
                {
                    // is there a serializer that requires external dependencies?
                    var xmlSerializer = GetSerializer(filter) as INomadXmlFileSerializer;

                    if (xmlSerializer != null)
                    {
                        serializer = xmlSerializer;
                    }
                }
            }
            else
            {
                if (NomadFactory.GetBinaryInfo(filename, out NomadFileInfo info))
                {
                    serializer = NomadFactory.GetSerializer(info);
                    filter     = GetFilter(info);
                }

                // make sure it's not an empty file
                valid = info.IsValid;
            }

            ResourceFile result = null;

            if (valid)
            {
                result = new ResourceFile()
                {
                    Type             = type,
                    CustomSerializer = serializer,
                    CustomFilter     = filter,
                };

                if (load)
                {
                    result.Load(filename);
                }
            }

            return(result);
        }