public static void AddLoadingFromSession(this ShaderGeneratorContextBase context, Package package)
        {
            var previousGetAssetFriendlyName = context.GetAssetFriendlyName;
            var previousFindAsset = context.FindAsset;

            // Setup the GetAssetFriendlyName callback
            context.GetAssetFriendlyName = runtimeAsset =>
            {
                string assetFriendlyName = null;

                if (previousGetAssetFriendlyName != null)
                {
                    assetFriendlyName = previousGetAssetFriendlyName(runtimeAsset);
                }

                if (string.IsNullOrEmpty(assetFriendlyName))
                {
                    var referenceAsset = AttachedReferenceManager.GetAttachedReference(runtimeAsset);
                    assetFriendlyName = string.Format("{0}:{1}", referenceAsset.Id, referenceAsset.Url);
                }

                return assetFriendlyName;
            };

            // Setup the FindAsset callback
            context.FindAsset = runtimeAsset =>
            {
                object newAsset = null; 
                if (previousFindAsset != null)
                {
                    newAsset = previousFindAsset(runtimeAsset);
                }

                if (newAsset != null)
                {
                    return newAsset;
                }

                var reference = AttachedReferenceManager.GetAttachedReference(runtimeAsset);


                var assetItem = package.FindAsset(reference.Id) ?? package.FindAsset(reference.Url);

                return assetItem?.Asset;
            };            
        }
Beispiel #2
0
        /// <summary>
        /// Finds an asset from its attached reference.
        /// It will first try by id, then location.
        /// </summary>
        /// <param name="package">The package.</param>
        /// <param name="obj">The object containing the attached reference.</param>
        /// <returns>An <see cref="AssetItem" /> or <c>null</c> if not found.</returns>
        public static AssetItem FindAssetFromAttachedReference(this Package package, object obj)
        {
            if (obj == null)
            {
                return(null);
            }
            var attachedReference = AttachedReferenceManager.GetAttachedReference(obj);

            return(attachedReference != null?package.FindAsset(attachedReference) : null);
        }
Beispiel #3
0
 /// <summary>
 /// Finds an asset from all the packages by its asset reference.
 /// It will first try by id, then location.
 /// </summary>
 /// <param name="package">The package.</param>
 /// <param name="reference">The reference to the asset.</param>
 /// <returns>An <see cref="AssetItem" /> or <c>null</c> if not found.</returns>
 public static AssetItem FindAsset(this Package package, IReference reference)
 {
     return(package.FindAsset(reference.Id) ?? package.FindAsset(reference.Location));
 }