diff --git a/OpenRA.Mods.Common/Traits/World/DomainIndex.cs b/OpenRA.Mods.Common/Traits/World/DomainIndex.cs index 6cf3ace648..ed1d40c8d5 100644 --- a/OpenRA.Mods.Common/Traits/World/DomainIndex.cs +++ b/OpenRA.Mods.Common/Traits/World/DomainIndex.cs @@ -44,8 +44,7 @@ namespace OpenRA.Mods.Common.Traits if (p1.Layer != 0 || p2.Layer != 0) return true; - // HACK: Workaround until we can generalize movement classes - if (li is SubterraneanLocomotorInfo || li is JumpjetLocomotorInfo) + if (li.DisableDomainPassabilityCheck) return true; var movementClass = li.GetMovementClass(tileSet); diff --git a/OpenRA.Mods.Common/Traits/World/JumpjetLocomotor.cs b/OpenRA.Mods.Common/Traits/World/JumpjetLocomotor.cs index 4f1932737d..5fd6f5be1c 100644 --- a/OpenRA.Mods.Common/Traits/World/JumpjetLocomotor.cs +++ b/OpenRA.Mods.Common/Traits/World/JumpjetLocomotor.cs @@ -25,6 +25,8 @@ namespace OpenRA.Mods.Common.Traits [Desc("Can this actor transition on slopes?")] public readonly bool JumpjetTransitionOnRamps = true; + public override bool DisableDomainPassabilityCheck { get { return true; } } + public override object Create(ActorInitializer init) { return new JumpjetLocomotor(init.Self, this); } } diff --git a/OpenRA.Mods.Common/Traits/World/Locomotor.cs b/OpenRA.Mods.Common/Traits/World/Locomotor.cs index ebd7fcb27b..4ed9a626e5 100644 --- a/OpenRA.Mods.Common/Traits/World/Locomotor.cs +++ b/OpenRA.Mods.Common/Traits/World/Locomotor.cs @@ -287,6 +287,8 @@ namespace OpenRA.Mods.Common.Traits return true; } + public virtual bool DisableDomainPassabilityCheck { get { return false; } } + public virtual object Create(ActorInitializer init) { return new Locomotor(init.Self, this); } } diff --git a/OpenRA.Mods.Common/Traits/World/SubterraneanLocomotor.cs b/OpenRA.Mods.Common/Traits/World/SubterraneanLocomotor.cs index 5bd69f3faf..807e1cd60b 100644 --- a/OpenRA.Mods.Common/Traits/World/SubterraneanLocomotor.cs +++ b/OpenRA.Mods.Common/Traits/World/SubterraneanLocomotor.cs @@ -29,6 +29,8 @@ namespace OpenRA.Mods.Common.Traits [Desc("Depth at which the subterranian condition is applied.")] public readonly WDist SubterraneanTransitionDepth = new WDist(-1024); + public override bool DisableDomainPassabilityCheck { get { return true; } } + public override object Create(ActorInitializer init) { return new SubterraneanLocomotor(init.Self, this); } }