Пример #1
0
        public void InsertRawData(string path, byte[] bytes)
        {
            MicroJson.Object file = MicroJson.Parse(bytes);
            if (file == null)
            {
                Logger("Failed to load [" + path + "]");
                return;
            }

            m_raw.Add(path, file);
            Logger("Raw: adding main " + path);

            object auxesObj;

            file.Data.TryGetValue("aux", out auxesObj);
            MicroJson.Array auxesArr = auxesObj as MicroJson.Array;
            if (auxesArr != null)
            {
                for (int i = 0; i < auxesArr.Data.Count; i++)
                {
                    MicroJson.Object ao = auxesArr.Data[i] as MicroJson.Object;
                    if (ao == null)
                    {
                        continue;
                    }
                    object refObj;
                    if (!ao.Data.TryGetValue("ref", out refObj))
                    {
                        continue;
                    }
                    string refName = refObj.ToString();
                    string auxPath = refName.StartsWith("#") ? (path + refName) : refName;
                    Logger("Raw: adding aux " + auxPath);
                    m_raw.Add(auxPath, ao);
                }
            }
        }
Пример #2
0
        public Type Resolve <Type>(string path)
        {
            if (path == null || path == "")
            {
                return(default(Type));
            }

            string assetPath = path;
            int    auxref    = assetPath.IndexOf('#');

            if (auxref != -1)
            {
                assetPath = path.Substring(0, auxref);
            }

            object val;

            if (m_parsed.TryGetValue(path, out val))
            {
                return((Type)val);
            }
            else
            {
                object raw;
                if (!m_raw.TryGetValue(path, out raw))
                {
                    Load(assetPath);
                    if (!m_raw.TryGetValue(path, out raw))
                    {
                        return(default(Type));
                    }
                }

                MicroJson.Object ro = raw as MicroJson.Object;
                object           typeObj;
                if (!ro.Data.TryGetValue("type", out typeObj))
                {
                    Logger("Failed to read type field of [" + path + "]");
                    return(default(Type));
                }

                object dataObj;
                if (!ro.Data.TryGetValue("data", out dataObj))
                {
                    Logger("Failed to read data field of [" + path + "]");
                    return(default(Type));
                }

                string  type = typeObj.ToString();
                ParseFn p;
                if (m_parsers.TryGetValue(type, out p))
                {
                    object parsed = p(this, assetPath, dataObj);
                    Logger("Parsed [" + path + "] as [" + type + "]");
                    m_parsed.Add(path, parsed);
                    Putki.PackageManager.RegisterLoaded(path, parsed);
                    return((Type)parsed);
                }
                else
                {
                    Logger("No parser for type [" + type + "] for path [" + path + "]");
                    return(default(Type));
                }
            }
        }