diff --git a/OpenRA.Mods.Common/Traits/SpawnActorOnDeath.cs b/OpenRA.Mods.Common/Traits/SpawnActorOnDeath.cs index e30783ad07..411687848b 100644 --- a/OpenRA.Mods.Common/Traits/SpawnActorOnDeath.cs +++ b/OpenRA.Mods.Common/Traits/SpawnActorOnDeath.cs @@ -52,17 +52,18 @@ namespace OpenRA.Mods.Common.Traits { readonly SpawnActorOnDeathInfo info; readonly string faction; + readonly bool enabled; public SpawnActorOnDeath(ActorInitializer init, SpawnActorOnDeathInfo info) { this.info = info; - + enabled = !info.RequiresLobbyCreeps || init.Self.World.WorldActor.Trait().Enabled; faction = init.Contains() ? init.Get() : init.Self.Owner.Faction.InternalName; } public void Killed(Actor self, AttackInfo e) { - if (info.RequiresLobbyCreeps && !self.World.LobbyInfo.GlobalSettings.Creeps) + if (!enabled) return; if (!self.IsInWorld) diff --git a/OpenRA.Mods.Common/Traits/World/MapCreeps.cs b/OpenRA.Mods.Common/Traits/World/MapCreeps.cs index 192976e15f..16455aead9 100644 --- a/OpenRA.Mods.Common/Traits/World/MapCreeps.cs +++ b/OpenRA.Mods.Common/Traits/World/MapCreeps.cs @@ -24,5 +24,13 @@ namespace OpenRA.Mods.Common.Traits public readonly bool Locked = false; } - public class MapCreeps { } + public class MapCreeps : INotifyCreated + { + public bool Enabled { get; private set; } + + void INotifyCreated.Created(Actor self) + { + Enabled = self.World.LobbyInfo.GlobalSettings.Creeps; + } + } } diff --git a/OpenRA.Mods.D2k/Traits/World/WormManager.cs b/OpenRA.Mods.D2k/Traits/World/WormManager.cs index 7d61ece5cb..6aec2af4a6 100644 --- a/OpenRA.Mods.D2k/Traits/World/WormManager.cs +++ b/OpenRA.Mods.D2k/Traits/World/WormManager.cs @@ -12,13 +12,14 @@ using System; using System.Collections.Generic; using System.Linq; +using OpenRA.Mods.Common.Traits; using OpenRA.Primitives; using OpenRA.Traits; namespace OpenRA.Mods.D2k.Traits { [Desc("Controls the spawning of sandworms. Attach this to the world actor.")] - class WormManagerInfo : ITraitInfo + class WormManagerInfo : ITraitInfo, Requires { [Desc("Minimum number of worms")] public readonly int Minimum = 0; @@ -38,11 +39,12 @@ namespace OpenRA.Mods.D2k.Traits public object Create(ActorInitializer init) { return new WormManager(init.Self, this); } } - class WormManager : ITick + class WormManager : ITick, INotifyCreated { readonly WormManagerInfo info; readonly Lazy spawnPointActors; + bool enabled; int spawnCountdown; int wormsPresent; @@ -52,9 +54,14 @@ namespace OpenRA.Mods.D2k.Traits spawnPointActors = Exts.Lazy(() => self.World.ActorsHavingTrait().ToArray()); } + void INotifyCreated.Created(Actor self) + { + enabled = self.Trait().Enabled; + } + public void Tick(Actor self) { - if (!self.World.LobbyInfo.GlobalSettings.Creeps) + if (!enabled) return; if (!spawnPointActors.Value.Any())