add asset propagation for interior door sprites
This commit is contained in:
parent
04388fe7e3
commit
6805c90e2c
|
@ -12,6 +12,7 @@
|
|||
* Aggressive memory optimization (added in 3.9.2) is now disabled by default. The option reduces errors for a subset of players who use certain mods, but may cause crashes for farmhands in multiplayer. You can edit `smapi-internal/config.json` to enable it if you experience frequent `OutOfMemoryException` errors.
|
||||
|
||||
* For mod authors:
|
||||
* Added asset propagation for interior door sprites.
|
||||
* Fixed assets changed by a mod not reapplied if playing in non-English, the changes are only applicable after the save is loaded, the player returns to title and reloads a save, and the game reloads the target asset before the save is loaded.
|
||||
|
||||
## 3.9.4
|
||||
|
|
|
@ -366,6 +366,8 @@ namespace StardewModdingAPI.Metadata
|
|||
foreach (ClickableTextureComponent button in new[] { menu.questButton, menu.zoomInButton, menu.zoomOutButton })
|
||||
button.texture = Game1.mouseCursors;
|
||||
}
|
||||
|
||||
this.ReloadDoorSprites(content, key);
|
||||
return true;
|
||||
|
||||
case "loosesprites\\cursors2": // Game1.LoadContent
|
||||
|
@ -739,6 +741,36 @@ namespace StardewModdingAPI.Metadata
|
|||
return critters.Length;
|
||||
}
|
||||
|
||||
/// <summary>Reload the sprites for interior doors.</summary>
|
||||
/// <param name="content">The content manager through which to reload the asset.</param>
|
||||
/// <param name="key">The asset key to reload.</param>
|
||||
/// <returns>Returns whether any doors were affected.</returns>
|
||||
private bool ReloadDoorSprites(LocalizedContentManager content, string key)
|
||||
{
|
||||
Lazy<Texture2D> texture = new Lazy<Texture2D>(() => content.Load<Texture2D>(key));
|
||||
|
||||
foreach (GameLocation location in this.GetLocations())
|
||||
{
|
||||
IEnumerable<InteriorDoor> doors = location.interiorDoors?.Doors;
|
||||
if (doors == null)
|
||||
continue;
|
||||
|
||||
foreach (InteriorDoor door in doors)
|
||||
{
|
||||
if (door?.Sprite == null)
|
||||
continue;
|
||||
|
||||
string textureName = this.NormalizeAssetNameIgnoringEmpty(this.Reflection.GetField<string>(door.Sprite, "textureName").GetValue());
|
||||
if (textureName != key)
|
||||
continue;
|
||||
|
||||
door.Sprite.texture = texture.Value;
|
||||
}
|
||||
}
|
||||
|
||||
return texture.IsValueCreated;
|
||||
}
|
||||
|
||||
/// <summary>Reload the data for matching farm animals.</summary>
|
||||
/// <returns>Returns whether any farm animals were affected.</returns>
|
||||
/// <remarks>Derived from the <see cref="FarmAnimal"/> constructor.</remarks>
|
||||
|
|
Loading…
Reference in New Issue