Add tileset to dump sheets
This commit is contained in:
committed by
Matthias Mailänder
parent
84378969c3
commit
f5ecb9ad99
@@ -23,15 +23,15 @@ namespace OpenRA.Mods.Common.Terrain
|
||||
|
||||
public sealed class DefaultTileCache : IDisposable
|
||||
{
|
||||
public readonly Cache<SheetType, SheetBuilder> SheetBuilders;
|
||||
readonly Dictionary<ushort, TheaterTemplate> templates = [];
|
||||
readonly Cache<SheetType, SheetBuilder> sheetBuilders;
|
||||
readonly MersenneTwister random;
|
||||
|
||||
public Sprite MissingTile { get; }
|
||||
|
||||
public DefaultTileCache(DefaultTerrain terrainInfo, Action<uint, string> onMissingImage = null)
|
||||
{
|
||||
sheetBuilders = new Cache<SheetType, SheetBuilder>(t => new SheetBuilder(t, terrainInfo.SheetSize));
|
||||
SheetBuilders = new Cache<SheetType, SheetBuilder>(t => new SheetBuilder(t, terrainInfo.SheetSize));
|
||||
|
||||
random = new MersenneTwister();
|
||||
|
||||
@@ -101,14 +101,14 @@ namespace OpenRA.Mods.Common.Terrain
|
||||
var offset = new float3(f.Offset, zOffset);
|
||||
var type = SheetBuilder.FrameTypeToSheetType(f.Type);
|
||||
|
||||
var s = sheetBuilders[type].Allocate(f.Size, zRamp, offset);
|
||||
var s = SheetBuilders[type].Allocate(f.Size, zRamp, offset);
|
||||
OpenRA.Graphics.Util.FastCopyIntoChannel(s, f.Data, f.Type);
|
||||
|
||||
if (terrainInfo.EnableDepth)
|
||||
{
|
||||
var depthFrame = depthFrames != null ? depthFrames[j] : allFrames[j + frameCount];
|
||||
var depthType = SheetBuilder.FrameTypeToSheetType(depthFrame.Type);
|
||||
var ss = sheetBuilders[depthType].Allocate(depthFrame.Size, zRamp, offset);
|
||||
var ss = SheetBuilders[depthType].Allocate(depthFrame.Size, zRamp, offset);
|
||||
OpenRA.Graphics.Util.FastCopyIntoChannel(ss, depthFrame.Data, depthFrame.Type);
|
||||
s = new SpriteWithSecondaryData(s, ss.Sheet, ss.Bounds, ss.Channel);
|
||||
}
|
||||
@@ -135,7 +135,7 @@ namespace OpenRA.Mods.Common.Terrain
|
||||
var missingSheetType = SheetType.Indexed;
|
||||
|
||||
// Avoid creating an indexed sheet if all tiles are BGRA
|
||||
var missing = sheetBuilders.FirstOrDefault();
|
||||
var missing = SheetBuilders.FirstOrDefault();
|
||||
if (missing.Value != null && missing.Key == SheetType.BGRA)
|
||||
{
|
||||
missingDataLength = 4;
|
||||
@@ -143,8 +143,8 @@ namespace OpenRA.Mods.Common.Terrain
|
||||
missingSheetType = SheetType.BGRA;
|
||||
}
|
||||
|
||||
MissingTile = sheetBuilders[missingSheetType].Add(new byte[missingDataLength], missingFrameType, new Size(1, 1));
|
||||
foreach (var sb in sheetBuilders.Values)
|
||||
MissingTile = SheetBuilders[missingSheetType].Add(new byte[missingDataLength], missingFrameType, new Size(1, 1));
|
||||
foreach (var sb in SheetBuilders.Values)
|
||||
sb.Current?.ReleaseBuffer();
|
||||
}
|
||||
|
||||
@@ -167,7 +167,7 @@ namespace OpenRA.Mods.Common.Terrain
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var sb in sheetBuilders.Values)
|
||||
foreach (var sb in SheetBuilders.Values)
|
||||
sb.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[TraitLocation(SystemActors.World | SystemActors.EditorWorld)]
|
||||
public class TerrainRendererInfo : TraitInfo, ITiledTerrainRendererInfo
|
||||
{
|
||||
bool ITiledTerrainRendererInfo.ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError)
|
||||
bool ITiledTerrainRendererInfo.ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError, out DefaultTileCache tileCache)
|
||||
{
|
||||
var missingImages = new HashSet<string>();
|
||||
var failed = false;
|
||||
@@ -33,7 +33,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
failed = true;
|
||||
}
|
||||
|
||||
var tileCache = new DefaultTileCache((DefaultTerrain)terrainInfo, OnMissingImage);
|
||||
tileCache = new DefaultTileCache((DefaultTerrain)terrainInfo, OnMissingImage);
|
||||
foreach (var t in terrainInfo.Templates)
|
||||
{
|
||||
var templateInfo = (DefaultTerrainTemplateInfo)t.Value;
|
||||
|
||||
@@ -768,7 +768,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[RequireExplicitImplementation]
|
||||
public interface ITiledTerrainRendererInfo : ITraitInfoInterface
|
||||
{
|
||||
bool ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError);
|
||||
bool ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError, out DefaultTileCache tileCache);
|
||||
}
|
||||
|
||||
[RequireExplicitImplementation]
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
Console.WriteLine("Tileset: " + tileset);
|
||||
if (terrainInfo is ITemplatedTerrainInfo templatedTerrainInfo)
|
||||
foreach (var ttr in modData.DefaultRules.Actors[SystemActors.World].TraitInfos<ITiledTerrainRendererInfo>())
|
||||
failed |= ttr.ValidateTileSprites(templatedTerrainInfo, Console.WriteLine);
|
||||
failed |= ttr.ValidateTileSprites(templatedTerrainInfo, Console.WriteLine, out _);
|
||||
|
||||
var sequences = new SequenceSet(modData.DefaultFileSystem, modData, tileset, null);
|
||||
sequences.SpriteCache.LoadReservations(modData);
|
||||
|
||||
@@ -14,6 +14,8 @@ using System.Collections.Generic;
|
||||
using OpenRA.FileFormats;
|
||||
using OpenRA.FileSystem;
|
||||
using OpenRA.Graphics;
|
||||
using OpenRA.Mods.Common.Terrain;
|
||||
using OpenRA.Mods.Common.Traits;
|
||||
|
||||
namespace OpenRA.Mods.Common.UtilityCommands
|
||||
{
|
||||
@@ -21,7 +23,7 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
{
|
||||
static readonly int[] ChannelMasks = [2, 1, 0, 3];
|
||||
|
||||
string IUtilityCommand.Name => "--dump-sequence-sheets";
|
||||
string IUtilityCommand.Name => "--dump-sheets";
|
||||
|
||||
bool IUtilityCommand.ValidateArguments(string[] args)
|
||||
{
|
||||
@@ -80,6 +82,23 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
foreach (var s in sequence.SpriteCache.SheetBuilders[SheetType.BGRA].AllSheets)
|
||||
CommitSheet(null, s, sequencesName, palette, ref sheetCount);
|
||||
|
||||
modData.DefaultTerrainInfo.TryGetValue(sequence.TileSet, out var terrainInfo);
|
||||
if (terrainInfo is ITemplatedTerrainInfo templatedTerrainInfo)
|
||||
{
|
||||
foreach (var ttr in modData.DefaultRules.Actors[SystemActors.World].TraitInfos<ITiledTerrainRendererInfo>())
|
||||
{
|
||||
if (!ttr.ValidateTileSprites(templatedTerrainInfo, Console.WriteLine, out var tileCache))
|
||||
{
|
||||
sb = tileCache.SheetBuilders[SheetType.Indexed];
|
||||
foreach (var s in sb.AllSheets)
|
||||
CommitSheet(sb, s, terrainName, palette, ref sheetCount);
|
||||
|
||||
foreach (var s in tileCache.SheetBuilders[SheetType.BGRA].AllSheets)
|
||||
CommitSheet(null, s, terrainName, palette, ref sheetCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sequence.Dispose();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user