diff --git a/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs b/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs index d56e033f41..6554b089ce 100644 --- a/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs +++ b/OpenRA.Mods.Common/Traits/Modifiers/WithColoredOverlay.cs @@ -19,17 +19,23 @@ namespace OpenRA.Mods.Common.Traits [Desc("Display a colored overlay when a timed condition is active.")] public class WithColoredOverlayInfo : ConditionalTraitInfo { - [PaletteReference] - [Desc("Palette to use when rendering the overlay")] - public readonly string Palette = "invuln"; + [Desc("Color to overlay.")] + public readonly Color Color = Color.FromArgb(128, 128, 0, 0); public override object Create(ActorInitializer init) { return new WithColoredOverlay(this); } } public class WithColoredOverlay : ConditionalTrait, IRenderModifier { + readonly float3 tint; + readonly float alpha; + public WithColoredOverlay(WithColoredOverlayInfo info) - : base(info) { } + : base(info) + { + tint = new float3(info.Color.R, info.Color.G, info.Color.B) / 255f; + alpha = info.Color.A / 255f; + } IEnumerable IRenderModifier.ModifyRender(Actor self, WorldRenderer wr, IEnumerable r) { @@ -45,10 +51,8 @@ namespace OpenRA.Mods.Common.Traits { yield return a; - if (!a.IsDecoration && a is IPalettedRenderable) - yield return ((IPalettedRenderable)a).WithPalette(wr.Palette(Info.Palette)) - .WithZOffset(a.ZOffset + 1) - .AsDecoration(); + if (!a.IsDecoration && a is IModifyableRenderable ma) + yield return ma.WithTint(tint, ma.TintModifiers | TintModifiers.ReplaceColor).WithAlpha(alpha); } } diff --git a/OpenRA.Mods.Common/UpdateRules/Rules/20201213/ReplaceWithColoredOverlayPalette.cs b/OpenRA.Mods.Common/UpdateRules/Rules/20201213/ReplaceWithColoredOverlayPalette.cs new file mode 100644 index 0000000000..4156688b55 --- /dev/null +++ b/OpenRA.Mods.Common/UpdateRules/Rules/20201213/ReplaceWithColoredOverlayPalette.cs @@ -0,0 +1,49 @@ +#region Copyright & License Information +/* + * Copyright 2007-2020 The OpenRA Developers (see AUTHORS) + * 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 System.Collections.Generic; +using System.Linq; + +namespace OpenRA.Mods.Common.UpdateRules.Rules +{ + public class ReplaceWithColoredOverlayPalette : UpdateRule + { + public override string Name { get { return "WithColoredOverlay Palette changed to Color."; } } + + public override string Description + { + get + { + return "The Palette field has been removed from WithColoredOverlay. You must now specify the Color directly."; + } + } + + readonly List locations = new List(); + + public override IEnumerable AfterUpdate(ModData modData) + { + if (locations.Any()) + yield return "You must define new Color fields on the following traits:\n" + + UpdateUtils.FormatMessageList(locations); + + locations.Clear(); + } + + public override IEnumerable UpdateActorNode(ModData modData, MiniYamlNode actorNode) + { + foreach (var node in actorNode.ChildrenMatching("WithColoredOverlay")) + if (node.RemoveNodes("Palette") > 0) + locations.Add("{0}: {1} ({2})".F(actorNode.Key, node.Key, actorNode.Location.Filename)); + + yield break; + } + } +} diff --git a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs index 8ebb8689f0..93509d78ed 100644 --- a/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs +++ b/OpenRA.Mods.Common/UpdateRules/UpdatePath.cs @@ -86,6 +86,7 @@ namespace OpenRA.Mods.Common.UpdateRules // Bleed only changes here new RenameMPTraits(), new RemovePlayerHighlightPalette(), + new ReplaceWithColoredOverlayPalette(), }) }; diff --git a/mods/cnc/rules/defaults.yaml b/mods/cnc/rules/defaults.yaml index 628ed011eb..eedb947486 100644 --- a/mods/cnc/rules/defaults.yaml +++ b/mods/cnc/rules/defaults.yaml @@ -1019,7 +1019,7 @@ Tooltip: GenericName: Destroyed Vehicle WithColoredOverlay@IDISABLE: - Palette: disabled + Color: 000000B4 ScriptTriggers: Explodes: Weapon: UnitExplodeSmall @@ -1118,7 +1118,7 @@ ValidPowerStates: Low, Critical WithColoredOverlay@IDISABLE: RequiresCondition: lowpower - Palette: disabled + Color: 000000B4 ^Selectable: Selectable: diff --git a/mods/cnc/rules/palettes.yaml b/mods/cnc/rules/palettes.yaml index dbc891ba3c..193981de15 100644 --- a/mods/cnc/rules/palettes.yaml +++ b/mods/cnc/rules/palettes.yaml @@ -90,12 +90,6 @@ G: 255 B: 255 A: 64 - PaletteFromRGBA@disabled: - Name: disabled - R: 0 - G: 0 - B: 0 - A: 180 ShroudPalette@shroud: Name: shroud ShroudPalette@fog: diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 7376d82c6a..ccc579b053 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -269,7 +269,7 @@ TargetTypes: Ground, Vehicle RequiresForceFire: true WithColoredOverlay@IDISABLE: - Palette: disabled + Color: 000000B4 Explodes: Weapon: UnitExplodeMed EmptyWeapon: UnitExplodeMed @@ -510,7 +510,7 @@ ^DisableOnLowPower: WithColoredOverlay@IDISABLE: RequiresCondition: disabled - Palette: disabled + Color: 000000B4 GrantConditionOnPowerState@LOWPOWER: Condition: lowpower ValidPowerStates: Low, Critical diff --git a/mods/d2k/rules/palettes.yaml b/mods/d2k/rules/palettes.yaml index cf5c2594ca..c29e609a49 100644 --- a/mods/d2k/rules/palettes.yaml +++ b/mods/d2k/rules/palettes.yaml @@ -38,12 +38,6 @@ Scale: -1 Offset: 255 AllowModifiers: false - PaletteFromRGBA@disabled: - Name: disabled - R: 0 - G: 0 - B: 0 - A: 180 PaletteFromPaletteWithAlpha@effect75alpha: Name: effect75alpha BasePalette: effect diff --git a/mods/ra/rules/defaults.yaml b/mods/ra/rules/defaults.yaml index 30877fae3b..99f9f0f6ed 100644 --- a/mods/ra/rules/defaults.yaml +++ b/mods/ra/rules/defaults.yaml @@ -1011,7 +1011,7 @@ Types: Husk ForceHealthPercentage: 25 WithColoredOverlay@IDISABLE: - Palette: disabled + Color: 000000B4 Targetable: TargetTypes: GroundActor, Husk, NoAutoTarget RequiresForceFire: true @@ -1187,7 +1187,7 @@ ^DisableOnLowPower: WithColoredOverlay@IDISABLE: RequiresCondition: disabled - Palette: disabled + Color: 000000B4 GrantConditionOnPowerState@LOWPOWER: Condition: lowpower ValidPowerStates: Low, Critical @@ -1225,7 +1225,7 @@ ^DisabledByPowerOutage: WithColoredOverlay@IDISABLE: RequiresCondition: disabled - Palette: disabled + Color: 000000B4 GrantCondition@IDISABLE: RequiresCondition: power-outage Condition: disabled diff --git a/mods/ra/rules/palettes.yaml b/mods/ra/rules/palettes.yaml index 9706943b2a..d2da6bd035 100644 --- a/mods/ra/rules/palettes.yaml +++ b/mods/ra/rules/palettes.yaml @@ -64,24 +64,6 @@ G: 255 B: 255 A: 64 - PaletteFromRGBA@invuln: - Name: invuln - R: 128 - G: 0 - B: 0 - A: 128 - PaletteFromRGBA@invuln2: - Name: invuln2 - R: 0 - G: 0 - B: 128 - A: 128 - PaletteFromRGBA@disabled: - Name: disabled - R: 0 - G: 0 - B: 0 - A: 180 ShroudPalette@shroud: Name: shroud ShroudPalette@fog: diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index 983b1fc560..50c7b1a5ef 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -101,7 +101,7 @@ ^EmpVisualEffects: WithColoredOverlay@EMPDISABLE: - Palette: disabled + Color: 000000B4 WithIdleOverlay@EMPDISABLE: Sequence: emp-overlay Palette: effect @@ -1284,7 +1284,7 @@ ^DisableOnLowPower: WithColoredOverlay@IDISABLE: RequiresCondition: disabled - Palette: disabled + Color: 000000B4 GrantConditionOnPowerState@LOWPOWER: Condition: lowpower ValidPowerStates: Low, Critical @@ -1295,7 +1295,7 @@ ^DisableOnPowerDown: WithColoredOverlay@IDISABLE: RequiresCondition: disabled - Palette: disabled + Color: 000000B4 GrantCondition@IDISABLE: RequiresCondition: powerdown Condition: disabled diff --git a/mods/ts/rules/palettes.yaml b/mods/ts/rules/palettes.yaml index 06369e3c0f..77fda5e617 100644 --- a/mods/ts/rules/palettes.yaml +++ b/mods/ts/rules/palettes.yaml @@ -111,12 +111,6 @@ G: 255 B: 255 A: 64 - PaletteFromRGBA@disabled: - Name: disabled - R: 0 - G: 0 - B: 0 - A: 180 TSShroudPalette@shroud: Name: shroud VoxelNormalsPalette@normals: