Add IActorPreviewInitInfo interface.

This commit is contained in:
Paul Chote
2017-06-28 18:16:14 +01:00
committed by RoosterDragon
parent e10b64d62c
commit b2c3a55c12
4 changed files with 21 additions and 1 deletions

View File

@@ -198,6 +198,8 @@ namespace OpenRA.Mods.Common.Orders
{ {
if (!initialized) if (!initialized)
{ {
var actor = rules.Actors[building];
var td = new TypeDictionary() var td = new TypeDictionary()
{ {
new FactionInit(faction), new FactionInit(faction),
@@ -205,7 +207,11 @@ namespace OpenRA.Mods.Common.Orders
new HideBibPreviewInit() new HideBibPreviewInit()
}; };
var init = new ActorPreviewInitializer(rules.Actors[building], wr, td); foreach (var api in actor.TraitInfos<IActorPreviewInitInfo>())
foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.PlaceBuilding))
td.Add(o);
var init = new ActorPreviewInitializer(actor, wr, td);
preview = rules.Actors[building].TraitInfos<IRenderActorPreviewInfo>() preview = rules.Actors[building].TraitInfos<IRenderActorPreviewInfo>()
.SelectMany(rpi => rpi.RenderPreview(init)) .SelectMany(rpi => rpi.RenderPreview(init))
.ToArray(); .ToArray();

View File

@@ -290,4 +290,12 @@ namespace OpenRA.Mods.Common.Traits
{ {
Order IssueDeployOrder(Actor self); Order IssueDeployOrder(Actor self);
} }
public enum ActorPreviewType { PlaceBuilding, ColorPicker, MapEditorSidebar }
[RequireExplicitImplementation]
public interface IActorPreviewInitInfo : ITraitInfo
{
IEnumerable<object> ActorPreviewInits(ActorInfo ai, ActorPreviewType type);
}
} }

View File

@@ -33,6 +33,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
td.Add(new HideBibPreviewInit()); td.Add(new HideBibPreviewInit());
td.Add(new OwnerInit(world.WorldActor.Owner)); td.Add(new OwnerInit(world.WorldActor.Owner));
td.Add(new FactionInit(world.WorldActor.Owner.PlayerReference.Faction)); td.Add(new FactionInit(world.WorldActor.Owner.PlayerReference.Faction));
foreach (var api in actor.TraitInfos<IActorPreviewInitInfo>())
foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.ColorPicker))
td.Add(o);
if (preview != null) if (preview != null)
preview.SetPreview(actor, td); preview.SetPreview(actor, td);

View File

@@ -109,6 +109,9 @@ namespace OpenRA.Mods.Common.Widgets.Logic
td.Add(new HideBibPreviewInit()); td.Add(new HideBibPreviewInit());
td.Add(new OwnerInit(selectedOwner.Name)); td.Add(new OwnerInit(selectedOwner.Name));
td.Add(new FactionInit(selectedOwner.Faction)); td.Add(new FactionInit(selectedOwner.Faction));
foreach (var api in actor.TraitInfos<IActorPreviewInitInfo>())
foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.MapEditorSidebar))
td.Add(o);
try try
{ {