Add SpriteCache.LoadFramesUncached.

This allows users (currently TDHD) to load ISpriteFrames
directly, without them being stored in the cache.
This commit is contained in:
Paul Chote
2024-08-03 21:55:48 +01:00
committed by Gustas
parent 8c5a286574
commit 50d4936e51

View File

@@ -14,7 +14,6 @@ using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using OpenRA.FileSystem; using OpenRA.FileSystem;
using OpenRA.Primitives;
namespace OpenRA.Graphics namespace OpenRA.Graphics
{ {
@@ -59,22 +58,26 @@ namespace OpenRA.Graphics
return token; return token;
} }
static ISpriteFrame[] GetFrames(IReadOnlyFileSystem fileSystem, string filename, ISpriteLoader[] loaders, out TypeDictionary metadata) static ISpriteFrame[] GetFrames(IReadOnlyFileSystem fileSystem, string filename, ISpriteLoader[] loaders)
{ {
metadata = null;
if (!fileSystem.TryOpen(filename, out var stream)) if (!fileSystem.TryOpen(filename, out var stream))
return null; return null;
using (stream) using (stream)
{ {
foreach (var loader in loaders) foreach (var loader in loaders)
if (loader.TryParseSprite(stream, filename, out var frames, out metadata)) if (loader.TryParseSprite(stream, filename, out var frames, out _))
return frames; return frames;
return null; return null;
} }
} }
public ISpriteFrame[] LoadFramesUncached(string filename)
{
return GetFrames(fileSystem, filename, loaders);
}
public void LoadReservations(ModData modData) public void LoadReservations(ModData modData)
{ {
foreach (var sb in SheetBuilders.Values) foreach (var sb in SheetBuilders.Values)
@@ -90,7 +93,7 @@ namespace OpenRA.Graphics
foreach (var (filename, tokens) in reservationsByFilename) foreach (var (filename, tokens) in reservationsByFilename)
{ {
modData.LoadScreen?.Display(); modData.LoadScreen?.Display();
var loadedFrames = GetFrames(fileSystem, filename, loaders, out _); var loadedFrames = GetFrames(fileSystem, filename, loaders);
foreach (var token in tokens) foreach (var token in tokens)
{ {
if (spriteReservations.TryGetValue(token, out var rs)) if (spriteReservations.TryGetValue(token, out var rs))