Ejemplo n.º 1
0
        public AssetTypeValueField GetMonoBaseFieldCached(AssetsFileInstance inst, AssetFileInfoEx info, string managedPath)
        {
            //AssetsFile file = inst.file;
            //ushort scriptIndex = AssetHelper.GetScriptIndex(file, info);
            //if (scriptIndex != 0xFFFF && inst.templateFieldCache.ContainsKey(scriptIndex))
            //{
            //    AssetTypeTemplateField baseTemplateField = inst.templateFieldCache[scriptIndex];
            //    AssetTypeInstance baseAti = new AssetTypeInstance(baseTemplateField, file.reader, info.absoluteFilePos);
            //    return baseAti.GetBaseField();
            //}
            //else
            //{
            //    AssetTypeValueField baseValueField = MonoDeserializer.GetMonoBaseField(this, inst, info, managedPath);
            //    inst.templateFieldCache[scriptIndex] = baseValueField.templateField;
            //    return baseValueField;
            //}
            AssetsFile file        = inst.file;
            ushort     scriptIndex = AssetHelper.GetScriptIndex(file, info);

            if (scriptIndex == 0xFFFF)
            {
                return(null);
            }

            string scriptName;

            if (!inst.monoIdToName.ContainsKey(scriptIndex))
            {
                AssetTypeInstance scriptAti = GetExtAsset(inst, GetATI(inst.file, info).GetBaseField().Get("m_Script")).instance;
                scriptName = scriptAti.GetBaseField().Get("m_Name").GetValue().AsString();
                string scriptNamespace = scriptAti.GetBaseField().Get("m_Namespace").GetValue().AsString();
                string assemblyName    = scriptAti.GetBaseField().Get("m_AssemblyName").GetValue().AsString();

                if (scriptNamespace != string.Empty)
                {
                    scriptNamespace = "-";
                }

                scriptName = $"{assemblyName}.{scriptNamespace}.{scriptName}";
                inst.monoIdToName[scriptIndex] = scriptName;
            }
            else
            {
                scriptName = inst.monoIdToName[scriptIndex];
            }

            if (monoTemplateFieldCache.ContainsKey(scriptName))
            {
                AssetTypeTemplateField baseTemplateField = monoTemplateFieldCache[scriptName];
                AssetTypeInstance      baseAti           = new AssetTypeInstance(baseTemplateField, file.reader, info.absoluteFilePos);
                return(baseAti.GetBaseField());
            }
            else
            {
                AssetTypeValueField baseValueField = MonoDeserializer.GetMonoBaseField(this, inst, info, managedPath);
                monoTemplateFieldCache[scriptName] = baseValueField.templateField;
                return(baseValueField);
            }
        }
Ejemplo n.º 2
0
        public AssetTypeValueField GetMonoBaseFieldCached(AssetsFileInstance inst, AssetFileInfoEx info, string managedPath)
        {
            AssetsFile file        = inst.file;
            ushort     scriptIndex = AssetHelper.GetScriptIndex(file, info);

            if (scriptIndex != 0xFFFF && inst.templateFieldCache.ContainsKey(scriptIndex))
            {
                AssetTypeTemplateField baseTemplateField = inst.templateFieldCache[scriptIndex];
                AssetTypeInstance      baseAti           = new AssetTypeInstance(baseTemplateField, file.reader, info.absoluteFilePos);
                return(baseAti.GetBaseField());
            }
            else
            {
                AssetTypeValueField baseValueField = MonoDeserializer.GetMonoBaseField(this, inst, info, managedPath);
                inst.templateFieldCache[scriptIndex] = baseValueField.templateField;
                return(baseValueField);
            }
        }