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