From b2c3a55c12e2e35bf99a6f0aecd14774a88538f2 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 28 Jun 2017 18:16:14 +0100 Subject: [PATCH] Add IActorPreviewInitInfo interface. --- OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs | 8 +++++++- OpenRA.Mods.Common/TraitsInterfaces.cs | 8 ++++++++ OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs | 3 +++ .../Widgets/Logic/Editor/ActorSelectorLogic.cs | 3 +++ 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs index a25706fd36..717e47b8f7 100644 --- a/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs +++ b/OpenRA.Mods.Common/Orders/PlaceBuildingOrderGenerator.cs @@ -198,6 +198,8 @@ namespace OpenRA.Mods.Common.Orders { if (!initialized) { + var actor = rules.Actors[building]; + var td = new TypeDictionary() { new FactionInit(faction), @@ -205,7 +207,11 @@ namespace OpenRA.Mods.Common.Orders new HideBibPreviewInit() }; - var init = new ActorPreviewInitializer(rules.Actors[building], wr, td); + foreach (var api in actor.TraitInfos()) + foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.PlaceBuilding)) + td.Add(o); + + var init = new ActorPreviewInitializer(actor, wr, td); preview = rules.Actors[building].TraitInfos() .SelectMany(rpi => rpi.RenderPreview(init)) .ToArray(); diff --git a/OpenRA.Mods.Common/TraitsInterfaces.cs b/OpenRA.Mods.Common/TraitsInterfaces.cs index fccf1fb169..e15f00da4f 100644 --- a/OpenRA.Mods.Common/TraitsInterfaces.cs +++ b/OpenRA.Mods.Common/TraitsInterfaces.cs @@ -290,4 +290,12 @@ namespace OpenRA.Mods.Common.Traits { Order IssueDeployOrder(Actor self); } + + public enum ActorPreviewType { PlaceBuilding, ColorPicker, MapEditorSidebar } + + [RequireExplicitImplementation] + public interface IActorPreviewInitInfo : ITraitInfo + { + IEnumerable ActorPreviewInits(ActorInfo ai, ActorPreviewType type); + } } diff --git a/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs index 679759950b..2ef06a2f28 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ColorPickerLogic.cs @@ -33,6 +33,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic td.Add(new HideBibPreviewInit()); td.Add(new OwnerInit(world.WorldActor.Owner)); td.Add(new FactionInit(world.WorldActor.Owner.PlayerReference.Faction)); + foreach (var api in actor.TraitInfos()) + foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.ColorPicker)) + td.Add(o); if (preview != null) preview.SetPreview(actor, td); diff --git a/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs index 0df6710afa..e85878bc6c 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Editor/ActorSelectorLogic.cs @@ -109,6 +109,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic td.Add(new HideBibPreviewInit()); td.Add(new OwnerInit(selectedOwner.Name)); td.Add(new FactionInit(selectedOwner.Faction)); + foreach (var api in actor.TraitInfos()) + foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.MapEditorSidebar)) + td.Add(o); try {