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); } } }
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)); } } }