only build AssetWithoutLocale when it's used
This commit is contained in:
parent
e2a3fc4f99
commit
5f2e83969a
|
@ -19,19 +19,22 @@ namespace StardewModdingAPI.Events
|
|||
/// <summary>Get the mod metadata for a content pack, if it's a valid content pack for the mod.</summary>
|
||||
private readonly Func<IModMetadata, string?, string, IModMetadata?> GetOnBehalfOf;
|
||||
|
||||
/// <summary>The asset info being requested.</summary>
|
||||
private readonly IAssetInfo AssetInfo;
|
||||
|
||||
|
||||
/*********
|
||||
** Accessors
|
||||
*********/
|
||||
/// <summary>The name of the asset being requested.</summary>
|
||||
public IAssetName Name { get; }
|
||||
public IAssetName Name => this.AssetInfo.Name;
|
||||
|
||||
/// <summary>The <see cref="Name"/> with any locale codes stripped.</summary>
|
||||
/// <remarks>For example, if <see cref="Name"/> contains a locale like <c>Data/Bundles.fr-FR</c>, this will be the name without locale like <c>Data/Bundles</c>. If the name has no locale, this field is equivalent.</remarks>
|
||||
public IAssetName NameWithoutLocale { get; }
|
||||
public IAssetName NameWithoutLocale => this.AssetInfo.NameWithoutLocale;
|
||||
|
||||
/// <summary>The requested data type.</summary>
|
||||
public Type DataType { get; }
|
||||
public Type DataType => this.AssetInfo.DataType;
|
||||
|
||||
/// <summary>The load operations requested by the event handler.</summary>
|
||||
internal IList<AssetLoadOperation> LoadOperations { get; } = new List<AssetLoadOperation>();
|
||||
|
@ -45,16 +48,12 @@ namespace StardewModdingAPI.Events
|
|||
*********/
|
||||
/// <summary>Construct an instance.</summary>
|
||||
/// <param name="mod">The mod handling the event.</param>
|
||||
/// <param name="name">The name of the asset being requested.</param>
|
||||
/// <param name="dataType">The requested data type.</param>
|
||||
/// <param name="nameWithoutLocale">The <paramref name="name"/> with any locale codes stripped.</param>
|
||||
/// <param name="assetInfo">The asset info being requested.</param>
|
||||
/// <param name="getOnBehalfOf">Get the mod metadata for a content pack, if it's a valid content pack for the mod.</param>
|
||||
internal AssetRequestedEventArgs(IModMetadata mod, IAssetName name, IAssetName nameWithoutLocale, Type dataType, Func<IModMetadata, string?, string, IModMetadata?> getOnBehalfOf)
|
||||
internal AssetRequestedEventArgs(IModMetadata mod, IAssetInfo assetInfo, Func<IModMetadata, string?, string, IModMetadata?> getOnBehalfOf)
|
||||
{
|
||||
this.Mod = mod;
|
||||
this.Name = name;
|
||||
this.NameWithoutLocale = nameWithoutLocale;
|
||||
this.DataType = dataType;
|
||||
this.AssetInfo = assetInfo;
|
||||
this.GetOnBehalfOf = getOnBehalfOf;
|
||||
}
|
||||
|
||||
|
|
|
@ -13,6 +13,9 @@ namespace StardewModdingAPI.Framework.Content
|
|||
/// <summary>Normalizes an asset key to match the cache key.</summary>
|
||||
protected readonly Func<string, string> GetNormalizedPath;
|
||||
|
||||
/// <summary>The backing field for <see cref="NameWithoutLocale"/>.</summary>
|
||||
private IAssetName? NameWithoutLocaleImpl;
|
||||
|
||||
|
||||
/*********
|
||||
** Accessors
|
||||
|
@ -24,7 +27,7 @@ namespace StardewModdingAPI.Framework.Content
|
|||
public IAssetName Name { get; }
|
||||
|
||||
/// <inheritdoc />
|
||||
public IAssetName NameWithoutLocale { get; }
|
||||
public IAssetName NameWithoutLocale => this.NameWithoutLocaleImpl ??= this.Name.GetBaseAssetName();
|
||||
|
||||
/// <inheritdoc />
|
||||
[Obsolete($"Use {nameof(AssetInfo.Name)} or {nameof(AssetInfo.NameWithoutLocale)} instead. This property will be removed in SMAPI 4.0.0.")]
|
||||
|
@ -64,7 +67,6 @@ namespace StardewModdingAPI.Framework.Content
|
|||
{
|
||||
this.Locale = locale;
|
||||
this.Name = assetName;
|
||||
this.NameWithoutLocale = assetName.GetBaseAssetName();
|
||||
this.DataType = type;
|
||||
this.GetNormalizedPath = getNormalizedPath;
|
||||
}
|
||||
|
|
|
@ -1160,7 +1160,7 @@ namespace StardewModdingAPI.Framework
|
|||
this.EventManager.AssetRequested.Raise(
|
||||
invoke: (mod, invoke) =>
|
||||
{
|
||||
AssetRequestedEventArgs args = new(mod, asset.Name, asset.NameWithoutLocale, asset.DataType, this.GetOnBehalfOfContentPack);
|
||||
AssetRequestedEventArgs args = new(mod, asset, this.GetOnBehalfOfContentPack);
|
||||
|
||||
invoke(args);
|
||||
|
||||
|
|
Loading…
Reference in New Issue