Fix content patch logic

This commit is contained in:
yangzhi 2023-06-25 09:27:26 +08:00
parent bdd506b0db
commit f628466adb
3 changed files with 33 additions and 13 deletions

View File

@ -412,17 +412,28 @@ namespace StardewModdingAPI.Framework
// cached assets // cached assets
foreach (IContentManager contentManager in this.ContentManagers) foreach (IContentManager contentManager in this.ContentManagers)
{ {
#if SMAPI_FOR_MOBILE
HashSet<IAssetName> removingAssets = new HashSet<IAssetName>();
#endif
foreach ((string key, object asset) in contentManager.GetCachedAssets()) foreach ((string key, object asset) in contentManager.GetCachedAssets())
{ {
if (!predicate(contentManager, key, asset.GetType())) if (!predicate(contentManager, key, asset.GetType()))
continue; continue;
AssetName assetName = this.ParseAssetName(key, allowLocales: true); AssetName assetName = this.ParseAssetName(key, allowLocales: true);
#if !SMAPI_FOR_MOBILE
contentManager.InvalidateCache(assetName, dispose); contentManager.InvalidateCache(assetName, dispose);
#else
removingAssets.Add(assetName);
#endif
if (!invalidatedAssets.ContainsKey(assetName)) if (!invalidatedAssets.ContainsKey(assetName))
invalidatedAssets[assetName] = asset.GetType(); invalidatedAssets[assetName] = asset.GetType();
} }
#if SMAPI_FOR_MOBILE
foreach (IAssetName assetName in removingAssets)
contentManager.InvalidateCache(assetName, dispose);
#endif
} }
// forget localized flags // forget localized flags

View File

@ -1,9 +1,24 @@
using Microsoft.Xna.Framework.Audio; using System.Reflection;
using Microsoft.Xna.Framework.Audio;
using StardewValley; using StardewValley;
namespace StardewModdingAPI.Framework.ModLoading.RewriteFacades; namespace StardewModdingAPI.Framework.ModLoading.RewriteFacades;
public interface ISoundBankMethods : ISoundBank public interface ISoundBankMethods : ISoundBank
{ {
CueDefinition GetCueDefinition(string name); void AddCue(CueDefinition cueDefinition)
{
SoundBank soundBank = (SoundBank)this.GetType()
.GetField("soundBank", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
?.GetValue(this);
soundBank?.AddCue(cueDefinition);
}
CueDefinition GetCueDefinition(string name)
{
SoundBank soundBank = (SoundBank)this.GetType()
.GetField("soundBank", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
?.GetValue(this);
return soundBank?.GetCueDefinition(name);
}
} }

View File

@ -654,25 +654,19 @@ namespace StardewModdingAPI.Metadata
{ {
Texture2D texture = content.Load<Texture2D>(assetName.BaseName); Texture2D texture = content.Load<Texture2D>(assetName.BaseName);
#if SMAPI_FOR_MOBILE
this.Reflection.GetField<Texture2D>(titleMenu, "titleButtonsTexture").SetValue(texture);
titleMenu.backButton.texture = texture;
titleMenu.aboutButton.texture = texture;
this.Reflection.GetField<Texture2D>(titleMenu, "languageButton").SetValue(texture);
foreach (ClickableTextureComponent button in titleMenu.buttons)
button.texture = texture;
foreach (TemporaryAnimatedSprite bird in this.Reflection.GetField<List<TemporaryAnimatedSprite>>(titleMenu, "birds").GetValue())
bird.texture = texture;
#else
titleMenu.titleButtonsTexture = texture; titleMenu.titleButtonsTexture = texture;
#if SMAPI_FOR_MOBILE
if (titleMenu.backButton != null)
titleMenu.backButton.texture = texture; titleMenu.backButton.texture = texture;
#else
titleMenu.backButton.texture = texture;
#endif
titleMenu.aboutButton.texture = texture; titleMenu.aboutButton.texture = texture;
titleMenu.languageButton.texture = texture; titleMenu.languageButton.texture = texture;
foreach (ClickableTextureComponent button in titleMenu.buttons) foreach (ClickableTextureComponent button in titleMenu.buttons)
button.texture = texture; button.texture = texture;
foreach (TemporaryAnimatedSprite bird in titleMenu.birds) foreach (TemporaryAnimatedSprite bird in titleMenu.birds)
bird.texture = texture; bird.texture = texture;
#endif
return true; return true;
} }