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
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())
{
if (!predicate(contentManager, key, asset.GetType()))
continue;
AssetName assetName = this.ParseAssetName(key, allowLocales: true);
#if !SMAPI_FOR_MOBILE
contentManager.InvalidateCache(assetName, dispose);
#else
removingAssets.Add(assetName);
#endif
if (!invalidatedAssets.ContainsKey(assetName))
invalidatedAssets[assetName] = asset.GetType();
}
#if SMAPI_FOR_MOBILE
foreach (IAssetName assetName in removingAssets)
contentManager.InvalidateCache(assetName, dispose);
#endif
}
// forget localized flags

View File

@ -1,9 +1,24 @@
using Microsoft.Xna.Framework.Audio;
using System.Reflection;
using Microsoft.Xna.Framework.Audio;
using StardewValley;
namespace StardewModdingAPI.Framework.ModLoading.RewriteFacades;
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);
#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;
#if SMAPI_FOR_MOBILE
if (titleMenu.backButton != null)
titleMenu.backButton.texture = texture;
#else
titleMenu.backButton.texture = texture;
#endif
titleMenu.aboutButton.texture = texture;
titleMenu.languageButton.texture = texture;
foreach (ClickableTextureComponent button in titleMenu.buttons)
button.texture = texture;
foreach (TemporaryAnimatedSprite bird in titleMenu.birds)
bird.texture = texture;
#endif
return true;
}