diff --git a/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs b/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs index 5524f94a18..bdc9eb0a74 100644 --- a/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs +++ b/OpenRA.Mods.Common/Widgets/ProductionPaletteWidget.cs @@ -101,8 +101,18 @@ namespace OpenRA.Mods.Common.Widgets public ProductionQueue CurrentQueue { - get { return currentQueue; } - set { currentQueue = value; RefreshIcons(); } + get + { + return currentQueue; + } + set + { + currentQueue = value; + if (currentQueue != null) + UpdateCachedProductionIconOverlays(); + + RefreshIcons(); + } } public override Rectangle EventBounds { get { return eventBounds; } } @@ -115,6 +125,9 @@ namespace OpenRA.Mods.Common.Widgets SpriteFont overlayFont, symbolFont; float2 iconOffset, holdOffset, readyOffset, timeOffset, queuedOffset, infiniteOffset; + Player cachedQueueOwner; + IProductionIconOverlay[] pios; + [CustomLintableHotkeyNames] public static IEnumerable LinterHotkeyNames(MiniYamlNode widgetNode, Action emitError, Action emitWarning) { @@ -225,7 +238,12 @@ namespace OpenRA.Mods.Common.Widgets CurrentQueue = null; if (CurrentQueue != null) + { + if (CurrentQueue.Actor.Owner != cachedQueueOwner) + UpdateCachedProductionIconOverlays(); + RefreshIcons(); + } } public override void MouseEntered() @@ -413,6 +431,12 @@ namespace OpenRA.Mods.Common.Widgets return true; } + void UpdateCachedProductionIconOverlays() + { + cachedQueueOwner = CurrentQueue.Actor.Owner; + pios = cachedQueueOwner.PlayerActor.TraitsImplementing().ToArray(); + } + public void RefreshIcons() { icons = new Dictionary(); @@ -480,8 +504,6 @@ namespace OpenRA.Mods.Common.Widgets var buildableItems = CurrentQueue.BuildableItems(); - var pios = currentQueue.Actor.Owner.PlayerActor.TraitsImplementing(); - // Icons Game.Renderer.EnableAntialiasingFilter(); foreach (var icon in icons.Values)