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 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 MersenneTwister random;
|
||||
|
||||
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.Common.Terrain
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -165,9 +165,14 @@ namespace OpenRA.Mods.Common.Terrain
|
||||
return template.Sprites[start * template.Stride + r.Index];
|
||||
}
|
||||
|
||||
public SheetBuilder GetSheetBuilder(SheetType sheetType)
|
||||
{
|
||||
return sheetBuilders[sheetType];
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
foreach (var sb in SheetBuilders.Values)
|
||||
foreach (var sb in sheetBuilders.Values)
|
||||
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)]
|
||||
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 failed = false;
|
||||
|
||||
@@ -783,7 +783,7 @@ namespace OpenRA.Mods.Common.Traits
|
||||
[RequireExplicitImplementation]
|
||||
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]
|
||||
|
||||
@@ -94,11 +94,11 @@ namespace OpenRA.Mods.Common.UtilityCommands
|
||||
{
|
||||
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)
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user