Don't hardcode implementations in interfaces.
This commit is contained in:
committed by
Gustas Kažukauskas
parent
0fac8d0d31
commit
e61db3faea
@@ -21,9 +21,9 @@ namespace OpenRA.Mods.Common.Terrain
|
|||||||
{
|
{
|
||||||
public record TheaterTemplate(Sprite[] Sprites, int Stride, int Variants);
|
public record TheaterTemplate(Sprite[] Sprites, int Stride, int Variants);
|
||||||
|
|
||||||
public sealed class DefaultTileCache : IDisposable
|
public sealed class DefaultTileCache : ITileCache, IDisposable
|
||||||
{
|
{
|
||||||
public readonly Cache<SheetType, SheetBuilder> SheetBuilders;
|
readonly Cache<SheetType, SheetBuilder> sheetBuilders;
|
||||||
readonly Dictionary<ushort, TheaterTemplate> templates = [];
|
readonly Dictionary<ushort, TheaterTemplate> templates = [];
|
||||||
readonly MersenneTwister random;
|
readonly MersenneTwister random;
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Terrain
|
|||||||
|
|
||||||
public DefaultTileCache(DefaultTerrain terrainInfo, Action<uint, string> onMissingImage = null)
|
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();
|
random = new MersenneTwister();
|
||||||
|
|
||||||
@@ -101,14 +101,14 @@ namespace OpenRA.Mods.Common.Terrain
|
|||||||
var offset = new float3(f.Offset, zOffset);
|
var offset = new float3(f.Offset, zOffset);
|
||||||
var type = SheetBuilder.FrameTypeToSheetType(f.Type);
|
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);
|
OpenRA.Graphics.Util.FastCopyIntoChannel(s, f.Data, f.Type);
|
||||||
|
|
||||||
if (terrainInfo.EnableDepth)
|
if (terrainInfo.EnableDepth)
|
||||||
{
|
{
|
||||||
var depthFrame = depthFrames != null ? depthFrames[j] : allFrames[j + frameCount];
|
var depthFrame = depthFrames != null ? depthFrames[j] : allFrames[j + frameCount];
|
||||||
var depthType = SheetBuilder.FrameTypeToSheetType(depthFrame.Type);
|
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);
|
OpenRA.Graphics.Util.FastCopyIntoChannel(ss, depthFrame.Data, depthFrame.Type);
|
||||||
s = new SpriteWithSecondaryData(s, ss.Sheet, ss.Bounds, ss.Channel);
|
s = new SpriteWithSecondaryData(s, ss.Sheet, ss.Bounds, ss.Channel);
|
||||||
}
|
}
|
||||||
@@ -135,7 +135,7 @@ namespace OpenRA.Mods.Common.Terrain
|
|||||||
var missingSheetType = SheetType.Indexed;
|
var missingSheetType = SheetType.Indexed;
|
||||||
|
|
||||||
// Avoid creating an indexed sheet if all tiles are BGRA
|
// 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)
|
if (missing.Value != null && missing.Key == SheetType.BGRA)
|
||||||
{
|
{
|
||||||
missingDataLength = 4;
|
missingDataLength = 4;
|
||||||
@@ -143,8 +143,8 @@ namespace OpenRA.Mods.Common.Terrain
|
|||||||
missingSheetType = SheetType.BGRA;
|
missingSheetType = SheetType.BGRA;
|
||||||
}
|
}
|
||||||
|
|
||||||
MissingTile = SheetBuilders[missingSheetType].Add(new byte[missingDataLength], missingFrameType, new Size(1, 1));
|
MissingTile = sheetBuilders[missingSheetType].Add(new byte[missingDataLength], missingFrameType, new Size(1, 1));
|
||||||
foreach (var sb in SheetBuilders.Values)
|
foreach (var sb in sheetBuilders.Values)
|
||||||
sb.Current?.ReleaseBuffer();
|
sb.Current?.ReleaseBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,9 +165,14 @@ namespace OpenRA.Mods.Common.Terrain
|
|||||||
return template.Sprites[start * template.Stride + r.Index];
|
return template.Sprites[start * template.Stride + r.Index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SheetBuilder GetSheetBuilder(SheetType sheetType)
|
||||||
|
{
|
||||||
|
return sheetBuilders[sheetType];
|
||||||
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
foreach (var sb in SheetBuilders.Values)
|
foreach (var sb in sheetBuilders.Values)
|
||||||
sb.Dispose();
|
sb.Dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
22
OpenRA.Mods.Common/Terrain/TileCache.cs
Normal file
22
OpenRA.Mods.Common/Terrain/TileCache.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright (c) The OpenRA Developers and Contributors
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation, either version 3 of
|
||||||
|
* the License, or (at your option) any later version. For more
|
||||||
|
* information, see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.Graphics;
|
||||||
|
|
||||||
|
namespace OpenRA
|
||||||
|
{
|
||||||
|
public interface ITileCache
|
||||||
|
{
|
||||||
|
bool HasTileSprite(TerrainTile r, int? variant = null);
|
||||||
|
Sprite TileSprite(TerrainTile r, int? variant = null);
|
||||||
|
SheetBuilder GetSheetBuilder(SheetType sheetType);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,7 +22,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[TraitLocation(SystemActors.World | SystemActors.EditorWorld)]
|
[TraitLocation(SystemActors.World | SystemActors.EditorWorld)]
|
||||||
public class TerrainRendererInfo : TraitInfo, ITiledTerrainRendererInfo
|
public class TerrainRendererInfo : TraitInfo, ITiledTerrainRendererInfo
|
||||||
{
|
{
|
||||||
bool ITiledTerrainRendererInfo.ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError, out DefaultTileCache tileCache)
|
bool ITiledTerrainRendererInfo.ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError, out ITileCache tileCache)
|
||||||
{
|
{
|
||||||
var missingImages = new HashSet<string>();
|
var missingImages = new HashSet<string>();
|
||||||
var failed = false;
|
var failed = false;
|
||||||
|
|||||||
@@ -783,7 +783,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[RequireExplicitImplementation]
|
[RequireExplicitImplementation]
|
||||||
public interface ITiledTerrainRendererInfo : ITraitInfoInterface
|
public interface ITiledTerrainRendererInfo : ITraitInfoInterface
|
||||||
{
|
{
|
||||||
bool ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError, out DefaultTileCache tileCache);
|
bool ValidateTileSprites(ITemplatedTerrainInfo terrainInfo, Action<string> onError, out ITileCache tileCache);
|
||||||
}
|
}
|
||||||
|
|
||||||
[RequireExplicitImplementation]
|
[RequireExplicitImplementation]
|
||||||
|
|||||||
@@ -94,11 +94,11 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
|||||||
{
|
{
|
||||||
if (!ttr.ValidateTileSprites(templatedTerrainInfo, Console.WriteLine, out var tileCache))
|
if (!ttr.ValidateTileSprites(templatedTerrainInfo, Console.WriteLine, out var tileCache))
|
||||||
{
|
{
|
||||||
sb = tileCache.SheetBuilders[SheetType.Indexed];
|
sb = tileCache.GetSheetBuilder(SheetType.Indexed);
|
||||||
foreach (var s in sb.AllSheets)
|
foreach (var s in sb.AllSheets)
|
||||||
CommitSheet(sb, s, terrainName, palette, ref sheetCount);
|
CommitSheet(sb, s, terrainName, palette, ref sheetCount);
|
||||||
|
|
||||||
foreach (var s in tileCache.SheetBuilders[SheetType.BGRA].AllSheets)
|
foreach (var s in tileCache.GetSheetBuilder(SheetType.BGRA).AllSheets)
|
||||||
CommitSheet(null, s, terrainName, palette, ref sheetCount);
|
CommitSheet(null, s, terrainName, palette, ref sheetCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user