using System; using System.Collections.Generic; using Microsoft.Xna.Framework.Graphics; using xTile; namespace StardewModdingAPI.Framework.Content { /// Encapsulates access and changes to content being read from a data file. internal class AssetDataForObject : AssetData, IAssetData { /********* ** Public methods *********/ /// Construct an instance. /// The content's locale code, if the content is localized. /// The asset name being read. /// The content data being read. /// Normalizes an asset key to match the cache key. public AssetDataForObject(string locale, IAssetName assetName, object data, Func getNormalizedPath) : base(locale, assetName, data, getNormalizedPath, onDataReplaced: null) { } /// Construct an instance. /// The asset metadata. /// The content data being read. /// Normalizes an asset key to match the cache key. public AssetDataForObject(IAssetInfo info, object data, Func getNormalizedPath) : this(info.Locale, info.Name, data, getNormalizedPath) { } /// public IAssetDataForDictionary AsDictionary() { return new AssetDataForDictionary(this.Locale, this.Name, this.GetData>(), this.GetNormalizedPath, this.ReplaceWith); } /// public IAssetDataForImage AsImage() { return new AssetDataForImage(this.Locale, this.Name, this.GetData(), this.GetNormalizedPath, this.ReplaceWith); } /// public IAssetDataForMap AsMap() { return new AssetDataForMap(this.Locale, this.Name, this.GetData(), this.GetNormalizedPath, this.ReplaceWith); } /// public TData GetData() { if (!(this.Data is TData)) throw new InvalidCastException($"The content data of type {this.Data.GetType().FullName} can't be converted to the requested {typeof(TData).FullName}."); return (TData)this.Data; } } }