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)
{
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<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>()
.SelectMany(rpi => rpi.RenderPreview(init))
.ToArray();

View File

@@ -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<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 OwnerInit(world.WorldActor.Owner));
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)
preview.SetPreview(actor, td);

View File

@@ -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<IActorPreviewInitInfo>())
foreach (var o in api.ActorPreviewInits(actor, ActorPreviewType.MapEditorSidebar))
td.Add(o);
try
{