Ejemplo n.º 1
0
        public Avatar Clone(AssetCabinet file)
        {
            Component avatar = file.Components.Find
                               (
                delegate(Component asset)
            {
                return(asset.classID1 == UnityClassID.Avatar &&
                       (asset is NotLoaded ? ((NotLoaded)asset).Name : ((Avatar)asset).m_Name) == m_Name);
            }
                               );

            if (avatar == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Avatar);

                Avatar dest = new Avatar(file);
                using (MemoryStream mem = new MemoryStream())
                {
                    this.WriteTo(mem);
                    mem.Position = 0;
                    dest.LoadFrom(mem);
                }
                return(dest);
            }
            else if (avatar is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)avatar;
                avatar = file.LoadComponent(file.SourceStream, notLoaded);
            }
            return((Avatar)avatar);
        }
Ejemplo n.º 2
0
        public MonoScript Clone(AssetCabinet file)
        {
            Component monoS = file.Bundle.FindComponent(m_Name, UnityClassID.MonoScript);

            if (monoS == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.MonoScript);

                monoS = new MonoScript(file);
                file.Bundle.AddComponent(m_Name, monoS);
                using (MemoryStream mem = new MemoryStream())
                {
                    WriteTo(mem);
                    mem.Position = 0;
                    monoS.LoadFrom(mem);
                }
            }
            else if (monoS is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)monoS;
                if (notLoaded.replacement != null)
                {
                    monoS = notLoaded.replacement;
                }
                else
                {
                    monoS = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((MonoScript)monoS);
        }
Ejemplo n.º 3
0
        public Texture2D Clone(AssetCabinet file)
        {
            Component tex = file.Bundle != null
                                ? file.Bundle.FindComponent(m_Name, UnityClassID.Texture2D)
                                : file.Parser.GetTexture(m_Name);

            if (tex == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Texture2D);

                tex = new Texture2D(file);
                if (file.Bundle != null)
                {
                    file.Bundle.AddComponent(m_Name, tex);
                }
                CopyAttributesTo((Texture2D)tex);
                CopyImageTo((Texture2D)tex);
            }
            else if (tex is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)tex;
                if (notLoaded.replacement != null)
                {
                    tex = notLoaded.replacement;
                }
                else
                {
                    tex = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((Texture2D)tex);
        }
Ejemplo n.º 4
0
 public PPtr(Stream stream, AssetCabinet file)
 {
     LoadFrom(stream);
     if (m_FileID == 0)
     {
         int       index;
         Component comp = file.FindComponent(m_PathID, out index);
         if (comp is NotLoaded)
         {
             long pos = stream.Position;
             asset = file.LoadComponent(stream, index, (NotLoaded)comp);
             if (asset == null)
             {
                 asset = comp;
             }
             stream.Position = pos;
         }
         else
         {
             asset = comp;
         }
         if (asset is T)
         {
             instance = (T)asset;
         }
     }
 }
Ejemplo n.º 5
0
        public TextAsset Clone(AssetCabinet file)
        {
            Component text = file.Components.Find
                             (
                delegate(Component asset)
            {
                return(asset.classID1 == UnityClassID.TextAsset &&
                       (asset is NotLoaded ? ((NotLoaded)asset).Name : ((TextAsset)asset).m_Name) == m_Name);
            }
                             );

            if (text == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.TextAsset);

                TextAsset dest = new TextAsset(file);
                file.Bundle.AddComponent(m_Name, dest);
                using (MemoryStream mem = new MemoryStream())
                {
                    this.WriteTo(mem);
                    mem.Position = 0;
                    dest.LoadFrom(mem);
                }
                return(dest);
            }
            else if (text is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)text;
                text = file.LoadComponent(file.SourceStream, notLoaded);
            }
            return((TextAsset)text);
        }
Ejemplo n.º 6
0
        public new Cubemap Clone(AssetCabinet file)
        {
            Component cubemap = file.Bundle.FindComponent(m_Name, UnityClassID.Cubemap);
            if (cubemap == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Cubemap);

                Cubemap clone = new Cubemap(file);
                file.Bundle.AddComponent(m_Name, clone);
                CopyAttributesTo(clone);
                CopyImageTo(clone);
                foreach (PPtr<Texture2D> texPtr in m_SourceTextures)
                {
                    if (texPtr.asset != null)
                    {
                        clone.m_SourceTextures.Add(new PPtr<Texture2D>(texPtr.instance.Clone(file)));
                    }
                }
                return clone;
            }
            else if (cubemap is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)cubemap;
                if (notLoaded.replacement != null)
                {
                    cubemap = notLoaded.replacement;
                }
                else
                {
                    cubemap = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return (Cubemap)cubemap;
        }
Ejemplo n.º 7
0
        public Material Clone(AssetCabinet file, bool cloneTextures)
        {
            Component mat = file.Bundle != null?file.Bundle.FindComponent(m_Name, UnityClassID.Material) : null;

            if (mat == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Material);

                mat = new Material(file);
                if (file.Bundle != null)
                {
                    file.Bundle.AddComponent(m_Name, mat);
                }
                CopyTo((Material)mat, cloneTextures);
            }
            else if (mat is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)mat;
                if (notLoaded.replacement != null)
                {
                    mat = notLoaded.replacement;
                }
                else
                {
                    mat = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((Material)mat);
        }
Ejemplo n.º 8
0
        public new Cubemap Clone(AssetCabinet file)
        {
            Component cubemap = file.Bundle.FindComponent(m_Name, UnityClassID.Cubemap);

            if (cubemap == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Cubemap);

                Cubemap clone = new Cubemap(file);
                file.Bundle.AddComponent(m_Name, clone);
                CopyAttributesTo(clone);
                CopyImageTo(clone);
                foreach (PPtr <Texture2D> texPtr in m_SourceTextures)
                {
                    if (texPtr.asset != null)
                    {
                        clone.m_SourceTextures.Add(new PPtr <Texture2D>(texPtr.instance.Clone(file)));
                    }
                }
                return(clone);
            }
            else if (cubemap is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)cubemap;
                if (notLoaded.replacement != null)
                {
                    cubemap = notLoaded.replacement;
                }
                else
                {
                    cubemap = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((Cubemap)cubemap);
        }
Ejemplo n.º 9
0
        public AnimationClip Clone(AssetCabinet file)
        {
            Component clip = file.Components.Find
                             (
                delegate(Component asset)
            {
                return(asset.classID() == UnityClassID.AnimationClip &&
                       (asset is NotLoaded ? ((NotLoaded)asset).Name : ((AnimationClip)asset).m_Name) == m_Name);
            }
                             );

            if (clip == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.AnimationClip);

                clip = new AnimationClip(file);
            }
            else if (clip is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)clip;
                clip = file.LoadComponent(file.SourceStream, notLoaded);
            }
            using (MemoryStream mem = new MemoryStream())
            {
                WriteTo(mem);
                mem.Position = 0;
                clip.LoadFrom(mem);
            }
            return((AnimationClip)clip);
        }
Ejemplo n.º 10
0
        public Animator Clone(AssetCabinet file)
        {
            Component gameObj = file.Bundle.FindComponent(m_GameObject.instance.m_Name, UnityClassID.GameObject);

            if (gameObj == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Animator);

                Animator dest = new Animator(file);
                AssetCabinet.IncompleteClones.Add(new Tuple <Component, Component>(this, dest));
                return(dest);
            }
            else if (gameObj is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)gameObj;
                if (notLoaded.replacement != null)
                {
                    gameObj = notLoaded.replacement;
                }
                else
                {
                    gameObj = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return(((GameObject)gameObj).FindLinkedComponent(UnityClassID.Animator));
        }
Ejemplo n.º 11
0
        public MonoScript Clone(AssetCabinet file)
        {
            Component monoS;

            if (file.VersionNumber < AssetCabinet.VERSION_5_0_0)
            {
                monoS = file.Bundle.FindComponent(m_Name, UnityClassID.MonoScript);
            }
            else
            {
                string        searchName = " / " + m_Name;
                PPtr <Object> ms         = file.AssetRefs.Find
                                           (
                    delegate(PPtr <Object> objPtr)
                {
                    return(objPtr.asset != null &&
                           (
                               objPtr.asset is NotLoaded && ((NotLoaded)objPtr.asset).Name.EndsWith(searchName) ||
                               objPtr.asset is MonoScript && ((MonoScript)objPtr.asset).m_Name == m_Name
                           ));
                }
                                           );
                monoS = ms != null ? ms.asset : null;
            }
            if (monoS == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.MonoScript);

                monoS = new MonoScript(file);
                if (file.VersionNumber < AssetCabinet.VERSION_5_0_0)
                {
                    file.Bundle.AddComponent(m_Name, monoS);
                }
                else
                {
                    file.AssetRefs.Add(new PPtr <Object>(monoS));
                }
                using (MemoryStream mem = new MemoryStream())
                {
                    WriteTo(mem);
                    mem.Position = 0;
                    monoS.LoadFrom(mem);
                }
            }
            else if (monoS is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)monoS;
                if (notLoaded.replacement != null)
                {
                    monoS = notLoaded.replacement;
                }
                else
                {
                    monoS = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((MonoScript)monoS);
        }
Ejemplo n.º 12
0
        public Material Clone(AssetCabinet file, bool cloneTextures)
        {
            Component mat = file != this.file
                                ? file.Bundle != null && !file.Bundle.m_IsStreamedSceneAssetBundle
                                        ? file.Bundle.FindComponent(m_Name, UnityClassID.Material)
                                        : file.Components.Find
                            (
                delegate(Component asset)
            {
                return(asset.classID() == UnityClassID.Material &&
                       (asset is NotLoaded ? ((NotLoaded)asset).Name : ((Material)asset).m_Name) == m_Name);
            }
                            )
                                : null;

            if (mat == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Material);

                mat = new Material(file);
                if (file.Bundle != null && this.file.Bundle != null)
                {
                    List <Component> externals = new List <Component>();
                    AssetBundle.AddExternalAssetsFromPreloadTable(this, this.file.Bundle, externals);
                    for (int i = 0; i < externals.Count; i++)
                    {
                        ExternalAsset ext       = (ExternalAsset)externals[i];
                        string        assetPath = this.file.References[ext.FileID - 1].assetPath;
                        int           cabPos    = assetPath.LastIndexOf("/") + 1;
                        if (!AssetCabinet.LoadedCabinets.ContainsKey(assetPath.Substring(cabPos)))
                        {
                            ext.FileID = file.MergeReference(this.file, ext.FileID);
                        }
                        else
                        {
                            externals.RemoveAt(i--);
                        }
                    }
                    file.Bundle.AddComponent(m_Name, mat, externals);
                }
                CopyTo((Material)mat, cloneTextures);
            }
            else if (mat is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)mat;
                if (notLoaded.replacement != null)
                {
                    mat = notLoaded.replacement;
                }
                else
                {
                    mat = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((Material)mat);
        }
Ejemplo n.º 13
0
        public Shader Clone(AssetCabinet file)
        {
            Component sha = file.Bundle != null?file.Bundle.FindComponent(m_Name, UnityClassID.Shader) : null;

            if (sha == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Shader);

                Shader dest = new Shader(file);
                if (file.Bundle != null)
                {
                    file.Bundle.AddComponent(m_Name, dest);
                }
                dest.m_Name     = m_Name;
                dest.m_Script   = m_Script;
                dest.m_PathName = m_PathName;
                foreach (PPtr <Shader> asset in m_Dependencies)
                {
                    sha = asset.asset;
                    if (sha != null)
                    {
                        Type       t    = sha.GetType();
                        MethodInfo info = t.GetMethod("Clone", new Type[] { typeof(AssetCabinet) });
                        sha = (Component)info.Invoke(sha, new object[] { file });
                    }
                    dest.m_Dependencies.Add(new PPtr <Shader>(sha));
                }
                dest.m_ShaderIsBaked = m_ShaderIsBaked;
                return(dest);
            }
            else if (sha is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)sha;
                if (notLoaded.replacement != null)
                {
                    sha = notLoaded.replacement;
                }
                else
                {
                    sha = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((Shader)sha);
        }
Ejemplo n.º 14
0
Archivo: Mesh.cs Proyecto: kkdevs/sb3u
        public Mesh Clone(AssetCabinet file)
        {
            Mesh mesh = null;

            foreach (Component a in file.Components)
            {
                if (a.classID() == UnityClassID.Mesh)
                {
                    if (a is NotLoaded && ((NotLoaded)a).Name == m_Name)
                    {
                        mesh = file.LoadComponent(file.SourceStream, (NotLoaded)a);
                        break;
                    }
                    if (a is Mesh && ((Mesh)a).m_Name == m_Name)
                    {
                        mesh = (Mesh)a;
                        break;
                    }
                }
            }
            if (mesh != null)
            {
                if (mesh.m_SubMeshes.Count == m_SubMeshes.Count && mesh.m_VertexData.m_VertexCount == m_VertexData.m_VertexCount && mesh.m_IndexBuffer.Length == m_IndexBuffer.Length &&
                    mesh.m_LocalAABB.m_Center == m_LocalAABB.m_Center && mesh.m_LocalAABB.m_Extend == m_LocalAABB.m_Extend)
                {
                    return(mesh);
                }
            }
            else
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Mesh);
            }

            mesh = new Mesh(file);
            using (MemoryStream mem = new MemoryStream())
            {
                WriteTo(mem);
                mem.Position = 0;
                mesh.LoadFrom(mem);
            }
            return(mesh);
        }
Ejemplo n.º 15
0
        public Sprite Clone(AssetCabinet file)
        {
            Component sprite = file.Bundle.FindComponent(m_Name, UnityClassID.Sprite);

            if (sprite == null)
            {
                if (m_RD.texture.instance == null)
                {
                    throw new Exception("Cant clone textureless Sprite");
                }

                file.MergeTypeDefinition(this.file, UnityClassID.Sprite);

                Sprite dest = new Sprite(file);
                dest.m_Name          = m_Name;
                dest.m_Rect          = m_Rect.Clone();
                dest.m_Offset        = m_Offset;
                dest.m_Border        = m_Border;
                dest.m_PixelsToUnits = m_PixelsToUnits;
                dest.m_Extrude       = m_Extrude;
                dest.m_IsPolygon     = m_IsPolygon;
                dest.m_RD            = m_RD.Clone(file);
                file.Bundle.UnregisterFromUpdate(dest.m_RD.texture.instance);
                file.Bundle.AppendComponent(m_RD.texture.instance.m_Name, UnityClassID.Texture2D, dest);
                file.Bundle.RegisterForUpdate(dest);
                return(dest);
            }
            else if (sprite is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)sprite;
                if (notLoaded.replacement != null)
                {
                    sprite = notLoaded.replacement;
                }
                else
                {
                    sprite = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((Sprite)sprite);
        }
Ejemplo n.º 16
0
        public PhysicMaterial Clone(AssetCabinet file)
        {
            Component pMat = file != this.file
                                ? file.Components.Find
                             (
                delegate(Component asset)
            {
                return(asset.classID() == UnityClassID.PhysicMaterial &&
                       (asset is NotLoaded ? ((NotLoaded)asset).Name : ((PhysicMaterial)asset).m_Name) == m_Name);
            }
                             )
                                : null;

            if (pMat == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.PhysicMaterial);

                PhysicMaterial clone = new PhysicMaterial(file);
                clone.m_Name          = m_Name;
                clone.dynamicFriction = dynamicFriction;
                clone.staticFriction  = staticFriction;
                clone.bounciness      = bounciness;
                clone.frictionCombine = frictionCombine;
                clone.bounceCombine   = bounceCombine;
                return(clone);
            }
            else if (pMat is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)pMat;
                if (notLoaded.replacement != null)
                {
                    pMat = notLoaded.replacement;
                }
                else
                {
                    pMat = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return((PhysicMaterial)pMat);
        }
Ejemplo n.º 17
0
        public Avatar Clone(AssetCabinet file)
        {
            Component avatar = file.Components.Find
            (
                delegate (Component asset)
                {
                    return asset.classID1 == UnityClassID.Avatar &&
                        (asset is NotLoaded ? ((NotLoaded)asset).Name : ((Avatar)asset).m_Name) == m_Name;
                }
            );
            if (avatar == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Avatar);

                Avatar dest = new Avatar(file);
                using (MemoryStream mem = new MemoryStream())
                {
                    this.WriteTo(mem);
                    mem.Position = 0;
                    dest.LoadFrom(mem);
                }
                return dest;
            }
            else if (avatar is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)avatar;
                avatar = file.LoadComponent(file.SourceStream, notLoaded);
            }
            return (Avatar)avatar;
        }
Ejemplo n.º 18
0
        public Animator Clone(AssetCabinet file)
        {
            Component gameObj = file.Bundle.FindComponent(m_GameObject.instance.m_Name, UnityClassID.GameObject);
            if (gameObj == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Animator);

                Animator dest = new Animator(file);
                AssetCabinet.IncompleteClones.Add(new Tuple<Component, Component>(this, dest));
                return dest;
            }
            else if (gameObj is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)gameObj;
                if (notLoaded.replacement != null)
                {
                    gameObj = notLoaded.replacement;
                }
                else
                {
                    gameObj = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return ((GameObject)gameObj).FindLinkedComponent(UnityClassID.Animator);
        }
Ejemplo n.º 19
0
        public Texture2D Clone(AssetCabinet file)
        {
            Component tex = file.Bundle != null
                ? file.Bundle.FindComponent(m_Name, UnityClassID.Texture2D)
                : file.Parser.GetTexture(m_Name);
            if (tex == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Texture2D);

                tex = new Texture2D(file);
                if (file.Bundle != null)
                {
                    file.Bundle.AddComponent(m_Name, tex);
                }
                CopyAttributesTo((Texture2D)tex);
                CopyImageTo((Texture2D)tex);
            }
            else if (tex is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)tex;
                if (notLoaded.replacement != null)
                {
                    tex = notLoaded.replacement;
                }
                else
                {
                    tex = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return (Texture2D)tex;
        }
Ejemplo n.º 20
0
        public Sprite Clone(AssetCabinet file)
        {
            Component sprite = file.Bundle.FindComponent(m_Name, UnityClassID.Sprite);
            if (sprite == null)
            {
                if (m_RD.texture.instance == null)
                {
                    throw new Exception("Cant clone textureless Sprite");
                }

                file.MergeTypeDefinition(this.file, UnityClassID.Sprite);

                Sprite dest = new Sprite(file);
                dest.m_Name = m_Name;
                dest.m_Rect = m_Rect.Clone();
                dest.m_Offset = m_Offset;
                dest.m_Border = m_Border;
                dest.m_PixelsToUnits = m_PixelsToUnits;
                dest.m_Extrude = m_Extrude;
                dest.m_RD = m_RD.Clone(file);
                file.Bundle.UnregisterFromUpdate(dest.m_RD.texture.instance);
                file.Bundle.AppendComponent(m_RD.texture.instance.m_Name, UnityClassID.Texture2D, dest);
                file.Bundle.RegisterForUpdate(dest);
                return dest;
            }
            else if (sprite is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)sprite;
                if (notLoaded.replacement != null)
                {
                    sprite = notLoaded.replacement;
                }
                else
                {
                    sprite = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return (Sprite)sprite;
        }
Ejemplo n.º 21
0
        public Material Clone(AssetCabinet file, bool cloneTextures)
        {
            Component mat = file.Bundle != null ? file.Bundle.FindComponent(m_Name, UnityClassID.Material) : null;
            if (mat == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Material);

                mat = new Material(file);
                if (file.Bundle != null)
                {
                    file.Bundle.AddComponent(m_Name, mat);
                }
                CopyTo((Material)mat, cloneTextures);
            }
            else if (mat is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)mat;
                if (notLoaded.replacement != null)
                {
                    mat = notLoaded.replacement;
                }
                else
                {
                    mat = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return (Material)mat;
        }
Ejemplo n.º 22
0
        public TextAsset Clone(AssetCabinet file)
        {
            Component text = file.Components.Find
            (
                delegate(Component asset)
                {
                    return asset.classID1 == UnityClassID.TextAsset &&
                        (asset is NotLoaded ? ((NotLoaded)asset).Name : ((TextAsset)asset).m_Name) == m_Name;
                }
            );
            if (text == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.TextAsset);

                TextAsset dest = new TextAsset(file);
                using (MemoryStream mem = new MemoryStream())
                {
                    this.WriteTo(mem);
                    mem.Position = 0;
                    dest.LoadFrom(mem);
                }
                return dest;
            }
            else if (text is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)text;
                text = file.LoadComponent(file.SourceStream, notLoaded);
            }
            return (TextAsset)text;
        }
Ejemplo n.º 23
0
        public MonoScript Clone(AssetCabinet file)
        {
            Component monoS = file.Bundle.FindComponent(m_Name, UnityClassID.MonoScript);
            if (monoS == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.MonoScript);

                monoS = new MonoScript(file);
                file.Bundle.AddComponent(m_Name, monoS);
                using (MemoryStream mem = new MemoryStream())
                {
                    WriteTo(mem);
                    mem.Position = 0;
                    monoS.LoadFrom(mem);
                }
            }
            else if (monoS is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)monoS;
                if (notLoaded.replacement != null)
                {
                    monoS = notLoaded.replacement;
                }
                else
                {
                    monoS = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return (MonoScript)monoS;
        }
Ejemplo n.º 24
0
        public Shader Clone(AssetCabinet file)
        {
            Component sha = file.Bundle != null ? file.Bundle.FindComponent(m_Name, UnityClassID.Shader) : null;
            if (sha == null)
            {
                file.MergeTypeDefinition(this.file, UnityClassID.Shader);

                Shader dest = new Shader(file);
                if (file.Bundle != null)
                {
                    file.Bundle.AddComponent(m_Name, dest);
                }
                dest.m_Name = m_Name;
                dest.m_Script = m_Script;
                dest.m_PathName = m_PathName;
                foreach (PPtr<Shader> asset in m_Dependencies)
                {
                    sha = asset.asset;
                    if (sha != null)
                    {
                        Type t = sha.GetType();
                        MethodInfo info = t.GetMethod("Clone", new Type[] { typeof(AssetCabinet) });
                        sha = (Component)info.Invoke(sha, new object[] { file });
                    }
                    dest.m_Dependencies.Add(new PPtr<Shader>(sha));
                }
                dest.m_ShaderIsBaked = m_ShaderIsBaked;
                return dest;
            }
            else if (sha is NotLoaded)
            {
                NotLoaded notLoaded = (NotLoaded)sha;
                if (notLoaded.replacement != null)
                {
                    sha = notLoaded.replacement;
                }
                else
                {
                    sha = file.LoadComponent(file.SourceStream, notLoaded);
                }
            }
            return (Shader)sha;
        }