diff --git a/OpenRA.Game/Map/Map.cs b/OpenRA.Game/Map/Map.cs index e083b29c32..2b0e6ec38a 100644 --- a/OpenRA.Game/Map/Map.cs +++ b/OpenRA.Game/Map/Map.cs @@ -558,11 +558,21 @@ namespace OpenRA return xy.Clamp(new Rectangle(r.X, r.Y, r.Width - 1, r.Height - 1)); } - public CPos ChooseRandomCell(MersenneTwister r) + public CPos ChooseRandomCell(MersenneTwister rand) { return new CPos( - r.Next(Bounds.Left, Bounds.Right), - r.Next(Bounds.Top, Bounds.Bottom)); + rand.Next(Bounds.Left, Bounds.Right), + rand.Next(Bounds.Top, Bounds.Bottom)); + } + + public CPos ChooseRandomEdgeCell(MersenneTwister rand) + { + var isX = rand.Next(2) == 0; + var edge = rand.Next(2) == 0; + + return new CPos( + isX ? rand.Next(Bounds.Left, Bounds.Right) : (edge ? Bounds.Left : Bounds.Right), + !isX ? rand.Next(Bounds.Top, Bounds.Bottom) : (edge ? Bounds.Top : Bounds.Bottom)); } public WRange DistanceToEdge(WPos pos, WVec dir) diff --git a/OpenRA.Game/WorldUtils.cs b/OpenRA.Game/WorldUtils.cs index 6b8aac0d0b..478e18fe75 100644 --- a/OpenRA.Game/WorldUtils.cs +++ b/OpenRA.Game/WorldUtils.cs @@ -55,18 +55,6 @@ namespace OpenRA } } - public static CPos ChooseRandomEdgeCell(this World w) - { - var isX = w.SharedRandom.Next(2) == 0; - var edge = w.SharedRandom.Next(2) == 0; - - return new CPos( - isX ? w.SharedRandom.Next(w.Map.Bounds.Left, w.Map.Bounds.Right) - : (edge ? w.Map.Bounds.Left : w.Map.Bounds.Right), - !isX ? w.SharedRandom.Next(w.Map.Bounds.Top, w.Map.Bounds.Bottom) - : (edge ? w.Map.Bounds.Top : w.Map.Bounds.Bottom)); - } - public static bool HasVoices(this Actor a) { var selectable = a.Info.Traits.GetOrDefault(); diff --git a/OpenRA.Mods.RA/CrateSpawner.cs b/OpenRA.Mods.RA/CrateSpawner.cs index 98e9cb9ff3..f4d218086a 100644 --- a/OpenRA.Mods.RA/CrateSpawner.cs +++ b/OpenRA.Mods.RA/CrateSpawner.cs @@ -89,8 +89,8 @@ namespace OpenRA.Mods.RA if (info.DeliveryAircraft != null) { var crate = w.CreateActor(false, crateActor, new TypeDictionary { new OwnerInit(w.WorldActor.Owner) }); - var startPos = w.ChooseRandomEdgeCell(); - var altitude = self.World.Map.Rules.Actors[info.DeliveryAircraft].Traits.Get().CruiseAltitude; + var startPos = w.Map.ChooseRandomEdgeCell(w.SharedRandom); + var altitude = w.Map.Rules.Actors[info.DeliveryAircraft].Traits.Get().CruiseAltitude; var plane = w.CreateActor(info.DeliveryAircraft, new TypeDictionary { new CenterPositionInit(startPos.CenterPosition + new WVec(WRange.Zero, WRange.Zero, altitude)), diff --git a/OpenRA.Mods.RA/Scripting/Global/MapGlobal.cs b/OpenRA.Mods.RA/Scripting/Global/MapGlobal.cs index c9b42bd726..881c2d6310 100644 --- a/OpenRA.Mods.RA/Scripting/Global/MapGlobal.cs +++ b/OpenRA.Mods.RA/Scripting/Global/MapGlobal.cs @@ -52,7 +52,7 @@ namespace OpenRA.Mods.RA.Scripting [Desc("Returns a random cell on the visible border of the map.")] public CPos RandomEdgeCell() { - return context.World.ChooseRandomEdgeCell(); + return context.World.Map.ChooseRandomEdgeCell(context.World.SharedRandom); } [Desc("Returns true if there is only one human player.")] diff --git a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs index c8d88d43bb..76bfc98db5 100644 --- a/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs +++ b/OpenRA.Mods.RA/Scripting/LuaScriptInterface.cs @@ -345,7 +345,7 @@ namespace OpenRA.Mods.RA.Scripting [LuaGlobal] public CPos GetRandomEdgeCell() { - return world.ChooseRandomEdgeCell(); + return world.Map.ChooseRandomEdgeCell(world.SharedRandom); } [LuaGlobal] diff --git a/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs b/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs index 6644fd40b3..b09ce2dd5f 100644 --- a/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/ParatroopersPower.cs @@ -39,7 +39,7 @@ namespace OpenRA.Mods.RA var info = (ParatroopersPowerInfo)Info; var items = info.DropItems; - var startPos = self.World.ChooseRandomEdgeCell(); + var startPos = self.World.Map.ChooseRandomEdgeCell(self.World.SharedRandom); self.World.AddFrameEndTask(w => { diff --git a/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs b/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs index 00a16c0649..7af7fc93b4 100644 --- a/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs +++ b/OpenRA.Mods.RA/SupportPowers/SpyPlanePower.cs @@ -29,7 +29,7 @@ namespace OpenRA.Mods.RA { base.Activate(self, order, manager); - var enterCell = self.World.ChooseRandomEdgeCell(); + var enterCell = self.World.Map.ChooseRandomEdgeCell(self.World.SharedRandom); var altitude = self.World.Map.Rules.Actors["u2"].Traits.Get().CruiseAltitude; var plane = self.World.CreateActor("u2", new TypeDictionary