Change terrain layers to track sequences instead of sprites.
This commit is contained in:
@@ -31,7 +31,7 @@ namespace OpenRA.Mods.D2k.Traits
|
||||
public class BuildableTerrainLayer : IRenderOverlay, IWorldLoaded, ITickRender, INotifyActorDisposing
|
||||
{
|
||||
readonly BuildableTerrainLayerInfo info;
|
||||
readonly Dictionary<CPos, Sprite> dirty = new Dictionary<CPos, Sprite>();
|
||||
readonly Dictionary<CPos, TerrainTile?> dirty = new Dictionary<CPos, TerrainTile?>();
|
||||
readonly Map map;
|
||||
readonly CellLayer<int> strength;
|
||||
|
||||
@@ -61,10 +61,7 @@ namespace OpenRA.Mods.D2k.Traits
|
||||
|
||||
map.CustomTerrain[cell] = map.Rules.TileSet.GetTerrainIndex(tile);
|
||||
strength[cell] = info.MaxStrength;
|
||||
|
||||
// Terrain tiles define their origin at the topleft
|
||||
var s = theater.TileSprite(tile);
|
||||
dirty[cell] = new Sprite(s.Sheet, s.Bounds, s.ZRamp, float2.Zero, s.Channel, s.BlendMode);
|
||||
dirty[cell] = tile;
|
||||
}
|
||||
|
||||
public void HitTile(CPos cell, int damage)
|
||||
@@ -94,7 +91,17 @@ namespace OpenRA.Mods.D2k.Traits
|
||||
{
|
||||
if (!self.World.FogObscures(kv.Key))
|
||||
{
|
||||
render.Update(kv.Key, kv.Value);
|
||||
var tile = kv.Value;
|
||||
if (tile.HasValue)
|
||||
{
|
||||
// Terrain tiles define their origin at the topleft
|
||||
var s = theater.TileSprite(tile.Value);
|
||||
var ss = new Sprite(s.Sheet, s.Bounds, s.ZRamp, float2.Zero, s.Channel, s.BlendMode);
|
||||
render.Update(kv.Key, ss);
|
||||
}
|
||||
else
|
||||
render.Clear(kv.Key);
|
||||
|
||||
remove.Add(kv.Key);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ namespace OpenRA.Mods.D2k.Traits
|
||||
// Empty tile
|
||||
if (t.Type == null)
|
||||
{
|
||||
t.Sprite = null;
|
||||
t.Sequence = null;
|
||||
return t;
|
||||
}
|
||||
|
||||
@@ -51,12 +51,16 @@ namespace OpenRA.Mods.D2k.Traits
|
||||
{
|
||||
var sprites = D2kResourceRenderer.Variants[t.Variant];
|
||||
var frame = t.Density > t.Type.Info.MaxDensity / 2 ? 1 : 0;
|
||||
t.Sprite = t.Type.Variants.First().Value[sprites[frame]];
|
||||
t.Sequence = t.Type.Variants.First().Value;
|
||||
t.Frame = sprites[frame];
|
||||
}
|
||||
else if (D2kResourceRenderer.SpriteMap.TryGetValue(clear, out index))
|
||||
t.Sprite = t.Type.Variants.First().Value[index];
|
||||
{
|
||||
t.Sequence = t.Type.Variants.First().Value;
|
||||
t.Frame = index;
|
||||
}
|
||||
else
|
||||
t.Sprite = null;
|
||||
t.Sequence = null;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
@@ -173,17 +173,17 @@ namespace OpenRA.Mods.D2k.Traits
|
||||
var sprites = Variants[content.Variant];
|
||||
var frame = density > ResourceLayer.GetMaxResourceDensity(cell) / 2 ? 1 : 0;
|
||||
|
||||
UpdateSpriteLayers(cell, renderType.Variants.First().Value[sprites[frame]], renderType.Palette);
|
||||
UpdateSpriteLayers(cell, renderType.Variants.First().Value, sprites[frame], renderType.Palette);
|
||||
}
|
||||
else if (SpriteMap.TryGetValue(clear, out index))
|
||||
{
|
||||
UpdateSpriteLayers(cell, renderType.Variants.First().Value[index], renderType.Palette);
|
||||
UpdateSpriteLayers(cell, renderType.Variants.First().Value, index, renderType.Palette);
|
||||
}
|
||||
else
|
||||
throw new InvalidOperationException("SpriteMap does not contain an index for ClearSides type '{0}'".F(clear));
|
||||
}
|
||||
else
|
||||
UpdateSpriteLayers(cell, null, null);
|
||||
UpdateSpriteLayers(cell, null, 0, null);
|
||||
}
|
||||
|
||||
protected override string ChooseRandomVariant(ResourceType t)
|
||||
|
||||
Reference in New Issue
Block a user