diff --git a/OpenRA.Game/Graphics/Renderable.cs b/OpenRA.Game/Graphics/Renderable.cs index ddf1c1fc9e..2497493f13 100644 --- a/OpenRA.Game/Graphics/Renderable.cs +++ b/OpenRA.Game/Graphics/Renderable.cs @@ -16,11 +16,9 @@ namespace OpenRA.Graphics public interface IRenderable { WPos Pos { get; } - PaletteReference Palette { get; } int ZOffset { get; } bool IsDecoration { get; } - IRenderable WithPalette(PaletteReference newPalette); IRenderable WithZOffset(int newOffset); IRenderable OffsetBy(WVec offset); IRenderable AsDecoration(); @@ -28,6 +26,12 @@ namespace OpenRA.Graphics IFinalizedRenderable PrepareRender(WorldRenderer wr); } + public interface IPalettedRenderable : IRenderable + { + PaletteReference Palette { get; } + IPalettedRenderable WithPalette(PaletteReference newPalette); + } + public interface ITintableRenderable { IRenderable WithTint(in float3 newTint); diff --git a/OpenRA.Game/Graphics/SpriteRenderable.cs b/OpenRA.Game/Graphics/SpriteRenderable.cs index b3299d8494..d51a765698 100644 --- a/OpenRA.Game/Graphics/SpriteRenderable.cs +++ b/OpenRA.Game/Graphics/SpriteRenderable.cs @@ -14,7 +14,7 @@ using OpenRA.Primitives; namespace OpenRA.Graphics { - public struct SpriteRenderable : IRenderable, ITintableRenderable, IFinalizedRenderable + public struct SpriteRenderable : IPalettedRenderable, ITintableRenderable, IFinalizedRenderable { public static readonly IEnumerable None = new IRenderable[0]; @@ -53,7 +53,7 @@ namespace OpenRA.Graphics public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return isDecoration; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new SpriteRenderable(sprite, pos, offset, zOffset, newPalette, scale, tint, isDecoration, ignoreWorldTint); } + public IPalettedRenderable WithPalette(PaletteReference newPalette) { return new SpriteRenderable(sprite, pos, offset, zOffset, newPalette, scale, tint, isDecoration, ignoreWorldTint); } public IRenderable WithZOffset(int newOffset) { return new SpriteRenderable(sprite, pos, offset, newOffset, palette, scale, tint, isDecoration, ignoreWorldTint); } public IRenderable OffsetBy(WVec vec) { return new SpriteRenderable(sprite, pos + vec, offset, zOffset, palette, scale, tint, isDecoration, ignoreWorldTint); } public IRenderable AsDecoration() { return new SpriteRenderable(sprite, pos, offset, zOffset, palette, scale, tint, true, ignoreWorldTint); } diff --git a/OpenRA.Game/Graphics/TargetLineRenderable.cs b/OpenRA.Game/Graphics/TargetLineRenderable.cs index 19c37afdc4..98cdd728b6 100644 --- a/OpenRA.Game/Graphics/TargetLineRenderable.cs +++ b/OpenRA.Game/Graphics/TargetLineRenderable.cs @@ -31,11 +31,9 @@ namespace OpenRA.Graphics } public WPos Pos { get { return waypoints.First(); } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new TargetLineRenderable(waypoints, color); } public IRenderable WithZOffset(int newOffset) { return new TargetLineRenderable(waypoints, color); } public IRenderable OffsetBy(WVec vec) { return new TargetLineRenderable(waypoints.Select(w => w + vec), color); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Game/Graphics/UISpriteRenderable.cs b/OpenRA.Game/Graphics/UISpriteRenderable.cs index a97a63a7b3..06913a9bc3 100644 --- a/OpenRA.Game/Graphics/UISpriteRenderable.cs +++ b/OpenRA.Game/Graphics/UISpriteRenderable.cs @@ -13,7 +13,7 @@ using OpenRA.Primitives; namespace OpenRA.Graphics { - public struct UISpriteRenderable : IRenderable, IFinalizedRenderable + public struct UISpriteRenderable : IRenderable, IPalettedRenderable, IFinalizedRenderable { readonly Sprite sprite; readonly WPos effectiveWorldPos; @@ -40,7 +40,7 @@ namespace OpenRA.Graphics public PaletteReference Palette { get { return palette; } } public int ZOffset { get { return zOffset; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new UISpriteRenderable(sprite, effectiveWorldPos, screenPos, zOffset, newPalette, scale); } + public IPalettedRenderable WithPalette(PaletteReference newPalette) { return new UISpriteRenderable(sprite, effectiveWorldPos, screenPos, zOffset, newPalette, scale); } public IRenderable WithZOffset(int newOffset) { return this; } public IRenderable OffsetBy(WVec vec) { return this; } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs index 176ab1ad00..bb97bcb413 100644 --- a/OpenRA.Game/Traits/Player/FrozenActorLayer.cs +++ b/OpenRA.Game/Traits/Player/FrozenActorLayer.cs @@ -188,8 +188,8 @@ namespace OpenRA.Traits if (flashTicks > 0 && flashTicks % 2 == 0) { var highlight = wr.Palette("highlight"); - return Renderables.Concat(Renderables.Where(r => !r.IsDecoration) - .Select(r => r.WithPalette(highlight))); + return Renderables.Concat(Renderables.Where(r => !r.IsDecoration && r is IPalettedRenderable) + .Select(r => ((IPalettedRenderable)r).WithPalette(highlight))); } return Renderables; diff --git a/OpenRA.Mods.Cnc/Graphics/TeslaZapRenderable.cs b/OpenRA.Mods.Cnc/Graphics/TeslaZapRenderable.cs index b21e1973c4..05e60e038c 100644 --- a/OpenRA.Mods.Cnc/Graphics/TeslaZapRenderable.cs +++ b/OpenRA.Mods.Cnc/Graphics/TeslaZapRenderable.cs @@ -17,7 +17,7 @@ using OpenRA.Primitives; namespace OpenRA.Mods.Cnc.Graphics { - struct TeslaZapRenderable : IRenderable, IFinalizedRenderable + struct TeslaZapRenderable : IPalettedRenderable, IFinalizedRenderable { static int[][] steps = new[] { @@ -66,7 +66,7 @@ namespace OpenRA.Mods.Cnc.Graphics public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) + public IPalettedRenderable WithPalette(PaletteReference newPalette) { return new TeslaZapRenderable(pos, zOffset, length, image, brightSequence, brightZaps, dimSequence, dimZaps, palette); } diff --git a/OpenRA.Mods.Common/Effects/FlashTarget.cs b/OpenRA.Mods.Common/Effects/FlashTarget.cs index af2af6e02a..317e5499b7 100644 --- a/OpenRA.Mods.Common/Effects/FlashTarget.cs +++ b/OpenRA.Mods.Common/Effects/FlashTarget.cs @@ -51,8 +51,8 @@ namespace OpenRA.Mods.Common.Effects { var palette = wr.Palette(player == null ? "highlight" : "highlight" + player.InternalName); return target.Render(wr) - .Where(r => !r.IsDecoration) - .Select(r => r.WithPalette(palette)); + .Where(r => !r.IsDecoration && r is IPalettedRenderable) + .Select(r => ((IPalettedRenderable)r).WithPalette(palette)); } return SpriteRenderable.None; diff --git a/OpenRA.Mods.Common/Graphics/BeamRenderable.cs b/OpenRA.Mods.Common/Graphics/BeamRenderable.cs index 4b8741b876..ddd2236532 100644 --- a/OpenRA.Mods.Common/Graphics/BeamRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/BeamRenderable.cs @@ -35,11 +35,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return pos; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new BeamRenderable(pos, zOffset, length, shape, width, color); } public IRenderable WithZOffset(int newOffset) { return new BeamRenderable(pos, zOffset, length, shape, width, color); } public IRenderable OffsetBy(WVec vec) { return new BeamRenderable(pos + vec, zOffset, length, shape, width, color); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/CircleAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/CircleAnnotationRenderable.cs index a6986a16cb..725e6c7457 100644 --- a/OpenRA.Mods.Common/Graphics/CircleAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/CircleAnnotationRenderable.cs @@ -35,11 +35,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return centerPosition; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new CircleAnnotationRenderable(centerPosition, radius, width, color, filled); } public IRenderable WithZOffset(int newOffset) { return new CircleAnnotationRenderable(centerPosition, radius, width, color, filled); } public IRenderable OffsetBy(WVec vec) { return new CircleAnnotationRenderable(centerPosition + vec, radius, width, color, filled); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/ContrailRenderable.cs b/OpenRA.Mods.Common/Graphics/ContrailRenderable.cs index a567a542f2..408152909c 100644 --- a/OpenRA.Mods.Common/Graphics/ContrailRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/ContrailRenderable.cs @@ -46,11 +46,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return trail[Index(next - 1)]; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new ContrailRenderable(world, (WPos[])trail.Clone(), width, next, length, skip, color, zOffset); } public IRenderable WithZOffset(int newOffset) { return new ContrailRenderable(world, (WPos[])trail.Clone(), width, next, length, skip, color, newOffset); } public IRenderable OffsetBy(WVec vec) { return new ContrailRenderable(world, trail.Select(pos => pos + vec).ToArray(), width, next, length, skip, color, zOffset); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/DetectionCircleAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/DetectionCircleAnnotationRenderable.cs index 9ca4a86b1d..a621cbf441 100644 --- a/OpenRA.Mods.Common/Graphics/DetectionCircleAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/DetectionCircleAnnotationRenderable.cs @@ -43,16 +43,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return centerPosition; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) - { - return new DetectionCircleAnnotationRenderable(centerPosition, radius, zOffset, - trailCount, trailSeparation, trailAngle, color, width, borderColor, borderWidth); - } - public IRenderable WithZOffset(int newOffset) { return new DetectionCircleAnnotationRenderable(centerPosition, radius, newOffset, diff --git a/OpenRA.Mods.Common/Graphics/IsometricSelectionBarsAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/IsometricSelectionBarsAnnotationRenderable.cs index e59ef6ab7f..63e89539f7 100644 --- a/OpenRA.Mods.Common/Graphics/IsometricSelectionBarsAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/IsometricSelectionBarsAnnotationRenderable.cs @@ -51,11 +51,9 @@ namespace OpenRA.Mods.Common.Graphics public bool DisplayHealth { get { return displayHealth; } } public bool DisplayExtra { get { return displayExtra; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return this; } public IRenderable WithZOffset(int newOffset) { return this; } public IRenderable OffsetBy(WVec vec) { return new IsometricSelectionBarsAnnotationRenderable(pos + vec, actor, bounds); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/IsometricSelectionBoxAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/IsometricSelectionBoxAnnotationRenderable.cs index 253ece1ba9..5817cb0618 100644 --- a/OpenRA.Mods.Common/Graphics/IsometricSelectionBoxAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/IsometricSelectionBoxAnnotationRenderable.cs @@ -50,11 +50,9 @@ namespace OpenRA.Mods.Common.Graphics public WPos Pos { get { return pos; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return this; } public IRenderable WithZOffset(int newOffset) { return this; } public IRenderable OffsetBy(WVec vec) { return new IsometricSelectionBoxAnnotationRenderable(pos + vec, bounds, color); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/LineAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/LineAnnotationRenderable.cs index b79d82b09b..b1a2d5a478 100644 --- a/OpenRA.Mods.Common/Graphics/LineAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/LineAnnotationRenderable.cs @@ -40,11 +40,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return start; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new LineAnnotationRenderable(start, end, width, startColor, endColor); } public IRenderable WithZOffset(int newOffset) { return new LineAnnotationRenderable(start, end, width, startColor, endColor); } public IRenderable OffsetBy(WVec vec) { return new LineAnnotationRenderable(start + vec, end + vec, width, startColor, endColor); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/ModelRenderable.cs b/OpenRA.Mods.Common/Graphics/ModelRenderable.cs index 7c91209ac9..487b2698c6 100644 --- a/OpenRA.Mods.Common/Graphics/ModelRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/ModelRenderable.cs @@ -17,7 +17,7 @@ using OpenRA.Primitives; namespace OpenRA.Mods.Common.Graphics { - public struct ModelRenderable : IRenderable, ITintableRenderable + public struct ModelRenderable : IPalettedRenderable, ITintableRenderable { readonly IEnumerable models; readonly WPos pos; @@ -66,7 +66,7 @@ namespace OpenRA.Mods.Common.Graphics public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return false; } } - public IRenderable WithPalette(PaletteReference newPalette) + public IPalettedRenderable WithPalette(PaletteReference newPalette) { return new ModelRenderable( models, pos, zOffset, camera, scale, diff --git a/OpenRA.Mods.Common/Graphics/PolygonAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/PolygonAnnotationRenderable.cs index dd0630e25f..12d94b7dac 100644 --- a/OpenRA.Mods.Common/Graphics/PolygonAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/PolygonAnnotationRenderable.cs @@ -31,11 +31,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return effectivePos; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new PolygonAnnotationRenderable(vertices, effectivePos, width, color); } public IRenderable WithZOffset(int newOffset) { return new PolygonAnnotationRenderable(vertices, effectivePos, width, color); } public IRenderable OffsetBy(WVec vec) { return new PolygonAnnotationRenderable(vertices.Select(v => v + vec).ToArray(), effectivePos + vec, width, color); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/RailgunRenderable.cs b/OpenRA.Mods.Common/Graphics/RailgunRenderable.cs index 68a1906b1a..9e8f6d4b95 100644 --- a/OpenRA.Mods.Common/Graphics/RailgunRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/RailgunRenderable.cs @@ -41,11 +41,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return pos; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new RailgunHelixRenderable(pos, zOffset, railgun, info, ticks); } public IRenderable WithZOffset(int newOffset) { return new RailgunHelixRenderable(pos, newOffset, railgun, info, ticks); } public IRenderable OffsetBy(WVec vec) { return new RailgunHelixRenderable(pos + vec, zOffset, railgun, info, ticks); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/RangeCircleAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/RangeCircleAnnotationRenderable.cs index c58e660172..e686b13f10 100644 --- a/OpenRA.Mods.Common/Graphics/RangeCircleAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/RangeCircleAnnotationRenderable.cs @@ -40,11 +40,9 @@ namespace OpenRA.Mods.Common.Graphics } public WPos Pos { get { return centerPosition; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new RangeCircleAnnotationRenderable(centerPosition, radius, zOffset, color, width, borderColor, borderWidth); } public IRenderable WithZOffset(int newOffset) { return new RangeCircleAnnotationRenderable(centerPosition, radius, newOffset, color, width, borderColor, borderWidth); } public IRenderable OffsetBy(WVec vec) { return new RangeCircleAnnotationRenderable(centerPosition + vec, radius, zOffset, color, width, borderColor, borderWidth); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/SelectionBarsAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/SelectionBarsAnnotationRenderable.cs index 2058fdffc6..0a495cd18b 100644 --- a/OpenRA.Mods.Common/Graphics/SelectionBarsAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/SelectionBarsAnnotationRenderable.cs @@ -42,11 +42,9 @@ namespace OpenRA.Mods.Common.Graphics public bool DisplayHealth { get { return displayHealth; } } public bool DisplayExtra { get { return displayExtra; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return this; } public IRenderable WithZOffset(int newOffset) { return this; } public IRenderable OffsetBy(WVec vec) { return new SelectionBarsAnnotationRenderable(pos + vec, actor, decorationBounds); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/SelectionBoxAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/SelectionBoxAnnotationRenderable.cs index af8ac870fe..def02d382a 100644 --- a/OpenRA.Mods.Common/Graphics/SelectionBoxAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/SelectionBoxAnnotationRenderable.cs @@ -32,11 +32,9 @@ namespace OpenRA.Mods.Common.Graphics public WPos Pos { get { return pos; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return 0; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return this; } public IRenderable WithZOffset(int newOffset) { return this; } public IRenderable OffsetBy(WVec vec) { return new SelectionBoxAnnotationRenderable(pos + vec, decorationBounds, color); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/TextAnnotationRenderable.cs b/OpenRA.Mods.Common/Graphics/TextAnnotationRenderable.cs index d0916f5005..a6b42f9a2b 100644 --- a/OpenRA.Mods.Common/Graphics/TextAnnotationRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/TextAnnotationRenderable.cs @@ -43,11 +43,9 @@ namespace OpenRA.Mods.Common.Graphics text) { } public WPos Pos { get { return pos; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new TextAnnotationRenderable(font, pos, zOffset, color, text); } public IRenderable WithZOffset(int newOffset) { return new TextAnnotationRenderable(font, pos, zOffset, color, text); } public IRenderable OffsetBy(WVec vec) { return new TextAnnotationRenderable(font, pos + vec, zOffset, color, text); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Graphics/UIModelRenderable.cs b/OpenRA.Mods.Common/Graphics/UIModelRenderable.cs index 649d4d6d4f..6b560df394 100644 --- a/OpenRA.Mods.Common/Graphics/UIModelRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/UIModelRenderable.cs @@ -17,7 +17,7 @@ using OpenRA.Primitives; namespace OpenRA.Mods.Common.Graphics { - public struct UIModelRenderable : IRenderable + public struct UIModelRenderable : IRenderable, IPalettedRenderable { readonly IEnumerable models; readonly WPos effectiveWorldPos; @@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Graphics public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return false; } } - public IRenderable WithPalette(PaletteReference newPalette) + public IPalettedRenderable WithPalette(PaletteReference newPalette) { return new UIModelRenderable( models, effectiveWorldPos, screenPos, zOffset, camera, scale, diff --git a/OpenRA.Mods.Common/Graphics/UITextRenderable.cs b/OpenRA.Mods.Common/Graphics/UITextRenderable.cs index c148f37419..b305c9e5c3 100644 --- a/OpenRA.Mods.Common/Graphics/UITextRenderable.cs +++ b/OpenRA.Mods.Common/Graphics/UITextRenderable.cs @@ -45,11 +45,9 @@ namespace OpenRA.Mods.Common.Graphics text) { } public WPos Pos { get { return effectiveWorldPos; } } - public PaletteReference Palette { get { return null; } } public int ZOffset { get { return zOffset; } } public bool IsDecoration { get { return true; } } - public IRenderable WithPalette(PaletteReference newPalette) { return new UITextRenderable(font, effectiveWorldPos, screenPos, zOffset, color, text); } public IRenderable WithZOffset(int newOffset) { return new UITextRenderable(font, effectiveWorldPos, screenPos, zOffset, color, text); } public IRenderable OffsetBy(WVec vec) { return new UITextRenderable(font, effectiveWorldPos + vec, screenPos, zOffset, color, text); } public IRenderable AsDecoration() { return this; } diff --git a/OpenRA.Mods.Common/Traits/Buildings/ActorPreviewPlaceBuildingPreview.cs b/OpenRA.Mods.Common/Traits/Buildings/ActorPreviewPlaceBuildingPreview.cs index 08e61b0802..f46e410bf5 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/ActorPreviewPlaceBuildingPreview.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/ActorPreviewPlaceBuildingPreview.cs @@ -89,7 +89,7 @@ namespace OpenRA.Mods.Common.Traits .SelectMany(p => p.Render(wr, centerPosition)); if (palette != null) - previewRenderables = previewRenderables.Select(a => a.IsDecoration ? a : a.WithPalette(palette)); + previewRenderables = previewRenderables.Select(a => !a.IsDecoration && a is IPalettedRenderable ? ((IPalettedRenderable)a).WithPalette(palette) : a); if (info.FootprintUnderPreview != PlaceBuildingCellType.None) foreach (var r in RenderFootprint(wr, topLeft, footprint, info.FootprintUnderPreview)) diff --git a/OpenRA.Mods.Common/Traits/Cloak.cs b/OpenRA.Mods.Common/Traits/Cloak.cs index 9d0b4e0884..5b41024b9f 100644 --- a/OpenRA.Mods.Common/Traits/Cloak.cs +++ b/OpenRA.Mods.Common/Traits/Cloak.cs @@ -135,7 +135,7 @@ namespace OpenRA.Mods.Common.Traits if (palette == null) return r; else - return r.Select(a => a.IsDecoration ? a : a.WithPalette(palette)); + return r.Select(a => !a.IsDecoration && a is IPalettedRenderable ? ((IPalettedRenderable)a).WithPalette(palette) : a); } else return SpriteRenderable.None; diff --git a/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs b/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs index fe35572e11..d56e033f41 100644 --- a/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs @@ -45,8 +45,8 @@ namespace OpenRA.Mods.Common.Traits { yield return a; - if (!a.IsDecoration) - yield return a.WithPalette(wr.Palette(Info.Palette)) + if (!a.IsDecoration && a is IPalettedRenderable) + yield return ((IPalettedRenderable)a).WithPalette(wr.Palette(Info.Palette)) .WithZOffset(a.ZOffset + 1) .AsDecoration(); } diff --git a/OpenRA.Mods.Common/Traits/Render/WithShadow.cs b/OpenRA.Mods.Common/Traits/Render/WithShadow.cs index cba39779fc..d777c107ba 100644 --- a/OpenRA.Mods.Common/Traits/Render/WithShadow.cs +++ b/OpenRA.Mods.Common/Traits/Render/WithShadow.cs @@ -49,8 +49,8 @@ namespace OpenRA.Mods.Common.Traits.Render // Contrails shouldn't cast shadows var height = self.World.Map.DistanceAboveTerrain(self.CenterPosition).Length; - var shadowSprites = r.Where(s => !s.IsDecoration) - .Select(a => a.WithPalette(wr.Palette(info.Palette)) + var shadowSprites = r.Where(s => !s.IsDecoration && s is IPalettedRenderable) + .Select(a => ((IPalettedRenderable)a).WithPalette(wr.Palette(info.Palette)) .OffsetBy(info.Offset - new WVec(0, 0, height)) .WithZOffset(a.ZOffset + (height + info.ZOffset)) .AsDecoration()); diff --git a/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs b/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs index 1d682d8f08..a5d4c0f86f 100644 --- a/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs +++ b/OpenRA.Mods.Common/Traits/World/EditorActorPreview.cs @@ -118,8 +118,8 @@ namespace OpenRA.Mods.Common.Traits if (Selected) { var highlight = worldRenderer.Palette("highlight"); - var overlay = items.Where(r => !r.IsDecoration) - .Select(r => r.WithPalette(highlight)); + var overlay = items.Where(r => !r.IsDecoration && r is IPalettedRenderable) + .Select(r => ((IPalettedRenderable)r).WithPalette(highlight)); return items.Concat(overlay); }