From dade84db85b470d1124425510db45e34993903dc Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 20 Apr 2016 16:36:27 +0100 Subject: [PATCH 1/8] Remove leftover dead fragile alliances code. --- .../Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs | 8 -------- 1 file changed, 8 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs index 1557b00866..ba6728b7a2 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Ingame/MenuButtonsChromeLogic.cs @@ -64,14 +64,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic } } - var diplomacy = widget.GetOrNull("DIPLOMACY_BUTTON"); - if (diplomacy != null) - { - diplomacy.Visible = !world.Map.Visibility.HasFlag(MapVisibility.MissionSelector) && world.Players.Any(a => a != world.LocalPlayer && !a.NonCombatant); - diplomacy.IsDisabled = () => disableSystemButtons; - diplomacy.OnClick = () => OpenMenuPanel(diplomacy); - } - var debug = widget.GetOrNull("DEBUG_BUTTON"); if (debug != null) { From a0b5b5ce66f5270c98fc7124041a380e7fc45bc2 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 20 Apr 2016 00:00:26 -0400 Subject: [PATCH 2/8] Move initial map exploration to Shroud. --- OpenRA.Game/Traits/Player/DeveloperMode.cs | 4 ++-- OpenRA.Game/Traits/World/Shroud.cs | 10 ++++++++-- OpenRA.Game/World.cs | 4 ---- .../Traits/Crates/RevealMapCrateAction.cs | 4 ++-- OpenRA.Mods.RA/Traits/GpsWatcher.cs | 4 ++-- 5 files changed, 14 insertions(+), 12 deletions(-) diff --git a/OpenRA.Game/Traits/Player/DeveloperMode.cs b/OpenRA.Game/Traits/Player/DeveloperMode.cs index ac628dc1cb..430b46d0a1 100644 --- a/OpenRA.Game/Traits/Player/DeveloperMode.cs +++ b/OpenRA.Game/Traits/Player/DeveloperMode.cs @@ -107,7 +107,7 @@ namespace OpenRA.Traits if (EnableAll) { - self.Owner.Shroud.ExploreAll(self.World); + self.Owner.Shroud.ExploreAll(); var amount = order.ExtraData != 0 ? (int)order.ExtraData : info.Cash; self.Trait().GiveCash(amount); @@ -177,7 +177,7 @@ namespace OpenRA.Traits case "DevGiveExploration": { - self.Owner.Shroud.ExploreAll(self.World); + self.Owner.Shroud.ExploreAll(); break; } diff --git a/OpenRA.Game/Traits/World/Shroud.cs b/OpenRA.Game/Traits/World/Shroud.cs index 7fbbc62c0c..b73b1a287d 100644 --- a/OpenRA.Game/Traits/World/Shroud.cs +++ b/OpenRA.Game/Traits/World/Shroud.cs @@ -33,7 +33,7 @@ namespace OpenRA.Traits public object Create(ActorInitializer init) { return new Shroud(init.Self); } } - public class Shroud : ISync + public class Shroud : ISync, INotifyCreated { public event Action> CellsChanged; @@ -79,6 +79,12 @@ namespace OpenRA.Traits explored = new CellLayer(map); } + void INotifyCreated.Created(Actor self) + { + if (!self.World.LobbyInfo.GlobalSettings.Shroud) + self.World.AddFrameEndTask(w => ExploreAll()); + } + void Invalidate(IEnumerable changed) { if (CellsChanged != null) @@ -241,7 +247,7 @@ namespace OpenRA.Traits Invalidate(changed); } - public void ExploreAll(World world) + public void ExploreAll() { var changed = new List(); foreach (var puv in map.ProjectedCellBounds) diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index f8075d122e..058f019a12 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -184,10 +184,6 @@ namespace OpenRA MapUid = Map.Uid, MapTitle = Map.Title }; - - if (!LobbyInfo.GlobalSettings.Shroud) - foreach (var player in Players) - player.Shroud.ExploreAll(this); } public void AddToMaps(Actor self, IOccupySpace ios) diff --git a/OpenRA.Mods.Common/Traits/Crates/RevealMapCrateAction.cs b/OpenRA.Mods.Common/Traits/Crates/RevealMapCrateAction.cs index 3b2c8bb5ab..69577b55c5 100644 --- a/OpenRA.Mods.Common/Traits/Crates/RevealMapCrateAction.cs +++ b/OpenRA.Mods.Common/Traits/Crates/RevealMapCrateAction.cs @@ -36,10 +36,10 @@ namespace OpenRA.Mods.Common.Traits { foreach (var player in collector.World.Players) if (collector.Owner.IsAlliedWith(player)) - player.Shroud.ExploreAll(player.World); + player.Shroud.ExploreAll(); } else - collector.Owner.Shroud.ExploreAll(collector.World); + collector.Owner.Shroud.ExploreAll(); base.Activate(collector); } diff --git a/OpenRA.Mods.RA/Traits/GpsWatcher.cs b/OpenRA.Mods.RA/Traits/GpsWatcher.cs index 9d5b287e25..9ff24f79bf 100644 --- a/OpenRA.Mods.RA/Traits/GpsWatcher.cs +++ b/OpenRA.Mods.RA/Traits/GpsWatcher.cs @@ -72,7 +72,7 @@ namespace OpenRA.Mods.RA.Traits i.Trait.RefreshGranted(); if ((Granted || GrantedAllies) && atek.Owner.IsAlliedWith(owner)) - atek.Owner.Shroud.ExploreAll(atek.World); + atek.Owner.Shroud.ExploreAll(); } void RefreshGranted() @@ -84,7 +84,7 @@ namespace OpenRA.Mods.RA.Traits GrantedAllies = owner.World.ActorsHavingTrait(g => g.Granted).Any(p => p.Owner.IsAlliedWith(owner)); if (Granted || GrantedAllies) - owner.Shroud.ExploreAll(owner.World); + owner.Shroud.ExploreAll(); if (wasGranted != Granted || wasGrantedAllies != GrantedAllies) foreach (var tp in notifyOnRefresh.ToList()) From 1eba0bea133200da58c4427523243262c3e33900 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 20 Apr 2016 00:09:29 -0400 Subject: [PATCH 3/8] Prepare Shroud code for trait-defined lobby options. --- OpenRA.Game/Traits/World/Shroud.cs | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/OpenRA.Game/Traits/World/Shroud.cs b/OpenRA.Game/Traits/World/Shroud.cs index b73b1a287d..874a94d31a 100644 --- a/OpenRA.Game/Traits/World/Shroud.cs +++ b/OpenRA.Game/Traits/World/Shroud.cs @@ -67,6 +67,9 @@ namespace OpenRA.Traits } } + bool fogEnabled; + public bool FogEnabled { get { return !Disabled && fogEnabled; } } + public int Hash { get; private set; } public Shroud(Actor self) @@ -81,7 +84,9 @@ namespace OpenRA.Traits void INotifyCreated.Created(Actor self) { - if (!self.World.LobbyInfo.GlobalSettings.Shroud) + fogEnabled = self.World.LobbyInfo.GlobalSettings.Fog; + var shroudEnabled = self.World.LobbyInfo.GlobalSettings.Shroud; + if (!shroudEnabled) self.World.AddFrameEndTask(w => ExploreAll()); } @@ -304,15 +309,13 @@ namespace OpenRA.Traits public bool IsExplored(PPos puv) { - if (!ShroudEnabled) + if (Disabled) return map.Contains(puv); var uv = (MPos)puv; return explored.Contains(uv) && explored[uv] && (generatedShroudCount[uv] == 0 || visibleCount[uv] > 0); } - public bool ShroudEnabled { get { return !Disabled; } } - public bool IsVisible(WPos pos) { return IsVisible(map.ProjectedCellCovering(pos)); @@ -345,8 +348,6 @@ namespace OpenRA.Traits return visibleCount.Contains(uv) && visibleCount[uv] > 0; } - public bool FogEnabled { get { return !Disabled && self.World.LobbyInfo.GlobalSettings.Fog; } } - public bool Contains(PPos uv) { // Check that uv is inside the map area. There is nothing special From 7e49ae7eb01f4cdb9902d4fadf8087068321a481 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Wed, 20 Apr 2016 09:20:42 +0200 Subject: [PATCH 4/8] Prepare DeveloperMode code for trait-defined lobby options. --- OpenRA.Game/Traits/Player/DeveloperMode.cs | 222 ++++++++++-------- OpenRA.Game/World.cs | 5 - OpenRA.Mods.Common/Commands/DevCommands.cs | 7 +- OpenRA.Mods.Common/Traits/GainsExperience.cs | 7 +- .../Traits/Player/ClassicProductionQueue.cs | 2 +- .../Traits/Player/ProductionQueue.cs | 8 +- 6 files changed, 134 insertions(+), 117 deletions(-) diff --git a/OpenRA.Game/Traits/Player/DeveloperMode.cs b/OpenRA.Game/Traits/Player/DeveloperMode.cs index 430b46d0a1..5ac6e3d387 100644 --- a/OpenRA.Game/Traits/Player/DeveloperMode.cs +++ b/OpenRA.Game/Traits/Player/DeveloperMode.cs @@ -59,16 +59,26 @@ namespace OpenRA.Traits public object Create(ActorInitializer init) { return new DeveloperMode(this); } } - public class DeveloperMode : IResolveOrder, ISync + public class DeveloperMode : IResolveOrder, ISync, INotifyCreated { - DeveloperModeInfo info; - [Sync] public bool FastCharge; - [Sync] public bool AllTech; - [Sync] public bool FastBuild; - [Sync] public bool DisableShroud; - [Sync] public bool PathDebug; - [Sync] public bool UnlimitedPower; - [Sync] public bool BuildAnywhere; + readonly DeveloperModeInfo info; + public bool Enabled { get; private set; } + + [Sync] bool fastCharge; + [Sync] bool allTech; + [Sync] bool fastBuild; + [Sync] bool disableShroud; + [Sync] bool pathDebug; + [Sync] bool unlimitedPower; + [Sync] bool buildAnywhere; + + public bool FastCharge { get { return Enabled && fastCharge; } } + public bool AllTech { get { return Enabled && allTech; } } + public bool FastBuild { get { return Enabled && fastBuild; } } + public bool DisableShroud { get { return Enabled && disableShroud; } } + public bool PathDebug { get { return Enabled && pathDebug; } } + public bool UnlimitedPower { get { return Enabled && unlimitedPower; } } + public bool BuildAnywhere { get { return Enabled && buildAnywhere; } } // Client side only public bool ShowCombatGeometry; @@ -76,128 +86,134 @@ namespace OpenRA.Traits public bool ShowDepthPreview; public bool ShowActorTags; - public bool EnableAll; + bool enableAll; public DeveloperMode(DeveloperModeInfo info) { this.info = info; - FastBuild = info.FastBuild; - FastCharge = info.FastCharge; - DisableShroud = info.DisableShroud; - PathDebug = info.PathDebug; - UnlimitedPower = info.UnlimitedPower; - BuildAnywhere = info.BuildAnywhere; + fastBuild = info.FastBuild; + fastCharge = info.FastCharge; + disableShroud = info.DisableShroud; + pathDebug = info.PathDebug; + unlimitedPower = info.UnlimitedPower; + buildAnywhere = info.BuildAnywhere; + ShowCombatGeometry = info.ShowCombatGeometry; ShowDebugGeometry = info.ShowDebugGeometry; ShowDepthPreview = info.ShowDepthPreview; ShowActorTags = info.ShowActorTags; } + void INotifyCreated.Created(Actor self) + { + Enabled = self.World.LobbyInfo.GlobalSettings.AllowCheats || self.World.LobbyInfo.IsSinglePlayer; + } + public void ResolveOrder(Actor self, Order order) { - if (!self.World.AllowDevCommands) + if (!Enabled) return; switch (order.OrderString) { case "DevAll": - { - EnableAll ^= true; - AllTech = FastCharge = FastBuild = DisableShroud = UnlimitedPower = BuildAnywhere = EnableAll; + { + enableAll ^= true; + allTech = fastCharge = fastBuild = disableShroud = unlimitedPower = buildAnywhere = enableAll; - if (EnableAll) - { - self.Owner.Shroud.ExploreAll(); - - var amount = order.ExtraData != 0 ? (int)order.ExtraData : info.Cash; - self.Trait().GiveCash(amount); - } - else - { - self.Owner.Shroud.ResetExploration(); - } - - self.Owner.Shroud.Disabled = DisableShroud; - if (self.World.LocalPlayer == self.Owner) - self.World.RenderPlayer = DisableShroud ? null : self.Owner; - - break; - } - - case "DevEnableTech": - { - AllTech ^= true; - break; - } - - case "DevFastCharge": - { - FastCharge ^= true; - break; - } - - case "DevFastBuild": - { - FastBuild ^= true; - break; - } - - case "DevGiveCash": - { - var amount = order.ExtraData != 0 ? (int)order.ExtraData : info.Cash; - self.Trait().GiveCash(amount); - break; - } - - case "DevGrowResources": - { - foreach (var a in self.World.ActorsWithTrait()) - { - for (var i = 0; i < info.ResourceGrowth; i++) - a.Trait.Seed(a.Actor); - } - - break; - } - - case "DevVisibility": - { - DisableShroud ^= true; - self.Owner.Shroud.Disabled = DisableShroud; - if (self.World.LocalPlayer == self.Owner) - self.World.RenderPlayer = DisableShroud ? null : self.Owner; - break; - } - - case "DevPathDebug": - { - PathDebug ^= true; - break; - } - - case "DevGiveExploration": + if (enableAll) { self.Owner.Shroud.ExploreAll(); - break; - } - case "DevResetExploration": + var amount = order.ExtraData != 0 ? (int)order.ExtraData : info.Cash; + self.Trait().GiveCash(amount); + } + else { self.Owner.Shroud.ResetExploration(); - break; } + self.Owner.Shroud.Disabled = DisableShroud; + if (self.World.LocalPlayer == self.Owner) + self.World.RenderPlayer = DisableShroud ? null : self.Owner; + + break; + } + + case "DevEnableTech": + { + allTech ^= true; + break; + } + + case "DevFastCharge": + { + fastCharge ^= true; + break; + } + + case "DevFastBuild": + { + fastBuild ^= true; + break; + } + + case "DevGiveCash": + { + var amount = order.ExtraData != 0 ? (int)order.ExtraData : info.Cash; + self.Trait().GiveCash(amount); + break; + } + + case "DevGrowResources": + { + foreach (var a in self.World.ActorsWithTrait()) + { + for (var i = 0; i < info.ResourceGrowth; i++) + a.Trait.Seed(a.Actor); + } + + break; + } + + case "DevVisibility": + { + disableShroud ^= true; + self.Owner.Shroud.Disabled = DisableShroud; + if (self.World.LocalPlayer == self.Owner) + self.World.RenderPlayer = DisableShroud ? null : self.Owner; + break; + } + + case "DevPathDebug": + { + pathDebug ^= true; + break; + } + + case "DevGiveExploration": + { + self.Owner.Shroud.ExploreAll(); + break; + } + + case "DevResetExploration": + { + self.Owner.Shroud.ResetExploration(); + break; + } + case "DevUnlimitedPower": - { - UnlimitedPower ^= true; - break; - } + { + unlimitedPower ^= true; + break; + } case "DevBuildAnywhere": - { - BuildAnywhere ^= true; - break; - } + { + buildAnywhere ^= true; + break; + } default: return; diff --git a/OpenRA.Game/World.cs b/OpenRA.Game/World.cs index 058f019a12..c358be5dab 100644 --- a/OpenRA.Game/World.cs +++ b/OpenRA.Game/World.cs @@ -85,11 +85,6 @@ namespace OpenRA get { return OrderManager.Connection is ReplayConnection; } } - public bool AllowDevCommands - { - get { return LobbyInfo.GlobalSettings.AllowCheats || LobbyInfo.IsSinglePlayer; } - } - void SetLocalPlayer(Player localPlayer) { if (localPlayer == null) diff --git a/OpenRA.Mods.Common/Commands/DevCommands.cs b/OpenRA.Mods.Common/Commands/DevCommands.cs index e1d9b9dc7a..d06eb0d174 100644 --- a/OpenRA.Mods.Common/Commands/DevCommands.cs +++ b/OpenRA.Mods.Common/Commands/DevCommands.cs @@ -24,10 +24,15 @@ namespace OpenRA.Mods.Common.Commands public class DevCommands : IChatCommand, IWorldLoaded { World world; + DeveloperMode developerMode; public void WorldLoaded(World w, WorldRenderer wr) { world = w; + + if (world.LocalPlayer != null) + developerMode = world.LocalPlayer.PlayerActor.Trait(); + var console = world.WorldActor.Trait(); var help = world.WorldActor.Trait(); @@ -55,7 +60,7 @@ namespace OpenRA.Mods.Common.Commands if (world.LocalPlayer == null) return; - if (!world.AllowDevCommands) + if (!developerMode.Enabled) { Game.Debug("Cheats are disabled."); return; diff --git a/OpenRA.Mods.Common/Traits/GainsExperience.cs b/OpenRA.Mods.Common/Traits/GainsExperience.cs index f884601f76..7c0a55c7f9 100644 --- a/OpenRA.Mods.Common/Traits/GainsExperience.cs +++ b/OpenRA.Mods.Common/Traits/GainsExperience.cs @@ -97,11 +97,12 @@ namespace OpenRA.Mods.Common.Traits public void ResolveOrder(Actor self, Order order) { - if (!self.World.AllowDevCommands) - return; - if (order.OrderString == "DevLevelUp") { + var developerMode = self.Owner.PlayerActor.Trait(); + if (!developerMode.Enabled) + return; + if ((int)order.ExtraData > 0) GiveLevels((int)order.ExtraData); else diff --git a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs index 7e2a14b062..ebbc5c6839 100644 --- a/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ClassicProductionQueue.cs @@ -125,7 +125,7 @@ namespace OpenRA.Mods.Common.Traits public override int GetBuildTime(ActorInfo unit, BuildableInfo bi = null) { - if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().FastBuild) + if (developerMode.FastBuild) return 0; var time = unit.GetBuildTime() * Info.BuildSpeed / 100; diff --git a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs index 594ce5d707..51c92e46de 100644 --- a/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs +++ b/OpenRA.Mods.Common/Traits/Player/ProductionQueue.cs @@ -204,7 +204,7 @@ namespace OpenRA.Mods.Common.Traits public virtual IEnumerable AllItems() { - if (self.World.AllowDevCommands && developerMode.AllTech) + if (developerMode.AllTech) return producible.Keys; return allProducibles; @@ -214,7 +214,7 @@ namespace OpenRA.Mods.Common.Traits { if (!Enabled) return Enumerable.Empty(); - if (self.World.AllowDevCommands && developerMode.AllTech) + if (developerMode.AllTech) return producible.Keys; return buildableProducibles; @@ -226,7 +226,7 @@ namespace OpenRA.Mods.Common.Traits if (!producible.TryGetValue(actor, out ps)) return false; - return ps.Buildable || (self.World.AllowDevCommands && developerMode.AllTech); + return ps.Buildable || developerMode.AllTech; } public virtual void Tick(Actor self) @@ -316,7 +316,7 @@ namespace OpenRA.Mods.Common.Traits public virtual int GetBuildTime(ActorInfo unit, BuildableInfo bi = null) { - if (self.World.AllowDevCommands && self.Owner.PlayerActor.Trait().FastBuild) + if (developerMode.FastBuild) return 0; var time = unit.GetBuildTime() * Info.BuildSpeed / 100; From c412e4e86c14d858c3bc8c4b52caeacdecd5fcbe Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 24 Apr 2016 15:34:53 +0100 Subject: [PATCH 5/8] Prepare MapCreeps code for trait-defined lobby options. --- OpenRA.Mods.Common/Traits/SpawnActorOnDeath.cs | 5 +++-- OpenRA.Mods.Common/Traits/World/MapCreeps.cs | 10 +++++++++- OpenRA.Mods.D2k/Traits/World/WormManager.cs | 13 ++++++++++--- 3 files changed, 22 insertions(+), 6 deletions(-) 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()) From e3bc73a1689932f6942e0f8ae91aa422bf202fff Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 24 Apr 2016 15:35:28 +0100 Subject: [PATCH 6/8] Prepare ally build adjacency code for trait-defined lobby options. --- OpenRA.Mods.Common/Traits/Buildings/BaseProvider.cs | 10 ++++++---- OpenRA.Mods.Common/Traits/Buildings/Building.cs | 10 ++++++---- OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs | 10 +++++++++- 3 files changed, 21 insertions(+), 9 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/Buildings/BaseProvider.cs b/OpenRA.Mods.Common/Traits/Buildings/BaseProvider.cs index 6a8760d765..599138d4e1 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/BaseProvider.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/BaseProvider.cs @@ -30,10 +30,12 @@ namespace OpenRA.Mods.Common.Traits public class BaseProvider : ITick, IPostRenderSelection, ISelectionBar { public readonly BaseProviderInfo Info; - DeveloperMode devMode; - Actor self; + readonly DeveloperMode devMode; + readonly Actor self; + int total; int progress; + bool allyBuildEnabled; public BaseProvider(Actor self, BaseProviderInfo info) { @@ -41,6 +43,7 @@ namespace OpenRA.Mods.Common.Traits this.self = self; devMode = self.Owner.PlayerActor.Trait(); progress = total = info.InitialDelay; + allyBuildEnabled = self.World.WorldActor.Trait().AllyBuildRadiusEnabled; } public void Tick(Actor self) @@ -61,8 +64,7 @@ namespace OpenRA.Mods.Common.Traits bool ValidRenderPlayer() { - var allyBuildRadius = self.World.LobbyInfo.GlobalSettings.AllyBuildRadius; - return self.Owner == self.World.RenderPlayer || (allyBuildRadius && self.Owner.IsAlliedWith(self.World.RenderPlayer)); + return self.Owner == self.World.RenderPlayer || (allyBuildEnabled && self.Owner.IsAlliedWith(self.World.RenderPlayer)); } public IEnumerable RenderAfterWorld(WorldRenderer wr) diff --git a/OpenRA.Mods.Common/Traits/Buildings/Building.cs b/OpenRA.Mods.Common/Traits/Buildings/Building.cs index 0e8a995917..16d4cd6299 100644 --- a/OpenRA.Mods.Common/Traits/Buildings/Building.cs +++ b/OpenRA.Mods.Common/Traits/Buildings/Building.cs @@ -43,9 +43,11 @@ namespace OpenRA.Mods.Common.Traits public Actor FindBaseProvider(World world, Player p, CPos topLeft) { var center = world.Map.CenterOfCell(topLeft) + FootprintUtils.CenterOffset(world, this); + var allyBuildEnabled = world.WorldActor.Trait().AllyBuildRadiusEnabled; + foreach (var bp in world.ActorsWithTrait()) { - var validOwner = bp.Actor.Owner == p || (world.LobbyInfo.GlobalSettings.AllyBuildRadius && bp.Actor.Owner.Stances[p] == Stance.Ally); + var validOwner = bp.Actor.Owner == p || (allyBuildEnabled && bp.Actor.Owner.Stances[p] == Stance.Ally); if (!validOwner || !bp.Trait.Ready()) continue; @@ -76,7 +78,7 @@ namespace OpenRA.Mods.Common.Traits var nearnessCandidates = new List(); var bi = world.WorldActor.Trait(); - var allyBuildRadius = world.LobbyInfo.GlobalSettings.AllyBuildRadius; + var allyBuildEnabled = world.WorldActor.Trait().AllyBuildRadiusEnabled; for (var y = scanStart.Y; y < scanEnd.Y; y++) { @@ -89,14 +91,14 @@ namespace OpenRA.Mods.Common.Traits if (buildingAtPos == null) { var unitsAtPos = world.ActorMap.GetActorsAt(pos).Where(a => a.IsInWorld - && (a.Owner == p || (allyBuildRadius && a.Owner.Stances[p] == Stance.Ally)) + && (a.Owner == p || (allyBuildEnabled && a.Owner.Stances[p] == Stance.Ally)) && a.Info.HasTraitInfo()); if (unitsAtPos.Any()) nearnessCandidates.Add(pos); } else if (buildingAtPos.IsInWorld && buildingAtPos.Info.HasTraitInfo() - && (buildingAtPos.Owner == p || (allyBuildRadius && buildingAtPos.Owner.Stances[p] == Stance.Ally))) + && (buildingAtPos.Owner == p || (allyBuildEnabled && buildingAtPos.Owner.Stances[p] == Stance.Ally))) nearnessCandidates.Add(pos); } } diff --git a/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs b/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs index d3becc3a00..1bad95edf3 100644 --- a/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs +++ b/OpenRA.Mods.Common/Traits/World/MapBuildRadius.cs @@ -24,5 +24,13 @@ namespace OpenRA.Mods.Common.Traits public readonly bool AllyBuildRadiusLocked = false; } - public class MapBuildRadius { } + public class MapBuildRadius : INotifyCreated + { + public bool AllyBuildRadiusEnabled { get; private set; } + + void INotifyCreated.Created(Actor self) + { + AllyBuildRadiusEnabled = self.World.LobbyInfo.GlobalSettings.AllyBuildRadius; + } + } } From 0a7c80ef6ef81334552df6c7e0204652ec1c136e Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sun, 24 Apr 2016 15:35:37 +0100 Subject: [PATCH 7/8] Prepare short game code for trait-defined lobby options. --- OpenRA.Mods.Common/PlayerExtensions.cs | 3 ++- OpenRA.Mods.Common/Traits/World/MapOptions.cs | 10 +++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/OpenRA.Mods.Common/PlayerExtensions.cs b/OpenRA.Mods.Common/PlayerExtensions.cs index 5438879b60..f45386a330 100644 --- a/OpenRA.Mods.Common/PlayerExtensions.cs +++ b/OpenRA.Mods.Common/PlayerExtensions.cs @@ -18,7 +18,8 @@ namespace OpenRA.Mods.Common { public static bool HasNoRequiredUnits(this Player player) { - if (player.World.LobbyInfo.GlobalSettings.ShortGame) + var mapOptions = player.World.WorldActor.Trait(); + if (mapOptions.ShortGame) return !player.World.ActorsHavingTrait(t => t.Info.RequiredForShortGame).Any(a => a.Owner == player); return !player.World.ActorsHavingTrait().Any(a => a.Owner == player && a.IsInWorld); } diff --git a/OpenRA.Mods.Common/Traits/World/MapOptions.cs b/OpenRA.Mods.Common/Traits/World/MapOptions.cs index a86fc39046..51611e7108 100644 --- a/OpenRA.Mods.Common/Traits/World/MapOptions.cs +++ b/OpenRA.Mods.Common/Traits/World/MapOptions.cs @@ -39,5 +39,13 @@ namespace OpenRA.Mods.Common.Traits public readonly bool DifficultyLocked = false; } - public class MapOptions { } + public class MapOptions : INotifyCreated + { + public bool ShortGame { get; private set; } + + void INotifyCreated.Created(Actor self) + { + ShortGame = self.World.LobbyInfo.GlobalSettings.ShortGame; + } + } } From 35af6b5b9139773cb092066e9b3b40896d7871f2 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 14 May 2016 18:54:37 +0100 Subject: [PATCH 8/8] Apply minor style fixes to DeveloperMode. --- OpenRA.Game/Traits/Player/DeveloperMode.cs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/OpenRA.Game/Traits/Player/DeveloperMode.cs b/OpenRA.Game/Traits/Player/DeveloperMode.cs index 5ac6e3d387..e3a1271006 100644 --- a/OpenRA.Game/Traits/Player/DeveloperMode.cs +++ b/OpenRA.Game/Traits/Player/DeveloperMode.cs @@ -129,9 +129,7 @@ namespace OpenRA.Traits self.Trait().GiveCash(amount); } else - { self.Owner.Shroud.ResetExploration(); - } self.Owner.Shroud.Disabled = DisableShroud; if (self.World.LocalPlayer == self.Owner) @@ -168,10 +166,8 @@ namespace OpenRA.Traits case "DevGrowResources": { foreach (var a in self.World.ActorsWithTrait()) - { for (var i = 0; i < info.ResourceGrowth; i++) a.Trait.Seed(a.Actor); - } break; } @@ -182,6 +178,7 @@ namespace OpenRA.Traits self.Owner.Shroud.Disabled = DisableShroud; if (self.World.LocalPlayer == self.Owner) self.World.RenderPlayer = DisableShroud ? null : self.Owner; + break; }