Move ownership of tile sprites to the terrain renderer.

This commit is contained in:
Paul Chote
2020-12-30 18:42:25 +00:00
committed by reaperrr
parent 2eee911c58
commit 0a374e2264
9 changed files with 84 additions and 50 deletions

View File

@@ -18,7 +18,7 @@ using OpenRA.Traits;
namespace OpenRA.Mods.D2k.Traits
{
[Desc("Attach this to the world actor. Required for LaysTerrain to work.")]
public class BuildableTerrainLayerInfo : TraitInfo
public class BuildableTerrainLayerInfo : TraitInfo, Requires<ITiledTerrainRendererInfo>
{
[Desc("Palette to render the layer sprites in.")]
public readonly string Palette = TileSet.TerrainPaletteInternalName;
@@ -33,11 +33,11 @@ namespace OpenRA.Mods.D2k.Traits
{
readonly BuildableTerrainLayerInfo info;
readonly Dictionary<CPos, TerrainTile?> dirty = new Dictionary<CPos, TerrainTile?>();
readonly ITiledTerrainRenderer terrainRenderer;
readonly World world;
readonly CellLayer<int> strength;
TerrainSpriteLayer render;
Theater theater;
bool disposed;
public BuildableTerrainLayer(Actor self, BuildableTerrainLayerInfo info)
@@ -45,12 +45,12 @@ namespace OpenRA.Mods.D2k.Traits
this.info = info;
world = self.World;
strength = new CellLayer<int>(world.Map);
terrainRenderer = self.Trait<ITiledTerrainRenderer>();
}
public void WorldLoaded(World w, WorldRenderer wr)
{
theater = wr.Theater;
render = new TerrainSpriteLayer(w, wr, theater.Sheet, BlendMode.Alpha, wr.Palette(info.Palette), wr.World.Type != WorldType.Editor);
render = new TerrainSpriteLayer(w, wr, terrainRenderer.Sheet, BlendMode.Alpha, wr.Palette(info.Palette), wr.World.Type != WorldType.Editor);
}
public void AddTile(CPos cell, TerrainTile tile)
@@ -98,7 +98,7 @@ namespace OpenRA.Mods.D2k.Traits
if (tile.HasValue)
{
// Terrain tiles define their origin at the topleft
var s = theater.TileSprite(tile.Value);
var s = terrainRenderer.TileSprite(tile.Value);
var ss = new Sprite(s.Sheet, s.Bounds, s.ZRamp, float2.Zero, s.Channel, s.BlendMode);
render.Update(kv.Key, ss, false);
}