Support multiple turrets in the editor.

This commit is contained in:
Paul Chote
2020-06-08 23:43:53 +01:00
committed by reaperrr
parent c6c3a8c60d
commit 571eb7614f

View File

@@ -38,18 +38,11 @@ namespace OpenRA.Mods.Common.Traits
IEnumerable<ActorInit> IActorPreviewInitInfo.ActorPreviewInits(ActorInfo ai, ActorPreviewType type) IEnumerable<ActorInit> IActorPreviewInitInfo.ActorPreviewInits(ActorInfo ai, ActorPreviewType type)
{ {
// HACK: The ActorInit system does not support multiple instances of the same type
// Make sure that we only return one TurretFacingInit, even for actors with multiple turrets
if (ai.TraitInfos<TurretedInfo>().FirstOrDefault() == this)
yield return new TurretFacingInit(this, PreviewFacing); yield return new TurretFacingInit(this, PreviewFacing);
} }
IEnumerable<EditorActorOption> IEditorActorOptions.ActorOptions(ActorInfo ai, World world) IEnumerable<EditorActorOption> IEditorActorOptions.ActorOptions(ActorInfo ai, World world)
{ {
// TODO: Handle multiple turrets properly (will probably require a rewrite of the Init system)
if (ai.TraitInfos<TurretedInfo>().FirstOrDefault() != this)
yield break;
yield return new EditorActorSlider("Turret", EditorTurretFacingDisplayOrder, 0, 255, 8, yield return new EditorActorSlider("Turret", EditorTurretFacingDisplayOrder, 0, 255, 8,
actor => actor =>
{ {
@@ -66,10 +59,7 @@ namespace OpenRA.Mods.Common.Traits
(actor, value) => (actor, value) =>
{ {
actor.RemoveInit<TurretFacingsInit>(); actor.RemoveInit<TurretFacingsInit>();
actor.ReplaceInit(new TurretFacingInit(this, (int)value), this);
// Force a single global turret facing for multi-turret actors
actor.RemoveInits<TurretFacingInit>();
actor.AddInit(new TurretFacingInit((int)value));
}); });
} }