Pass random to ChooseInitialMap.

This commit is contained in:
Paul Chote
2016-03-29 22:36:48 +01:00
parent fee899f63d
commit b5c2703eba
5 changed files with 12 additions and 9 deletions

View File

@@ -402,7 +402,7 @@ namespace OpenRA
{ {
while (true) while (true)
{ {
Settings.Server.Map = ModData.MapCache.ChooseInitialMap(Settings.Server.Map); Settings.Server.Map = ModData.MapCache.ChooseInitialMap(Settings.Server.Map, CosmeticRandom);
Settings.Save(); Settings.Save();
CreateServer(Settings.Server.Clone()); CreateServer(Settings.Server.Clone());

View File

@@ -20,6 +20,7 @@ using System.Threading;
using OpenRA.FileSystem; using OpenRA.FileSystem;
using OpenRA.Graphics; using OpenRA.Graphics;
using OpenRA.Primitives; using OpenRA.Primitives;
using OpenRA.Support;
namespace OpenRA namespace OpenRA
{ {
@@ -237,11 +238,11 @@ namespace OpenRA
}); });
} }
public string ChooseInitialMap(string initialUid) public string ChooseInitialMap(string initialUid, MersenneTwister random)
{ {
if (string.IsNullOrEmpty(initialUid) || previews[initialUid].Status != MapStatus.Available) if (string.IsNullOrEmpty(initialUid) || previews[initialUid].Status != MapStatus.Available)
{ {
var selected = previews.Values.Where(x => x.SuitableForInitialMap).RandomOrDefault(Game.CosmeticRandom) ?? var selected = previews.Values.Where(x => x.SuitableForInitialMap).RandomOrDefault(random) ??
previews.Values.First(m => m.Status == MapStatus.Available && m.Visibility.HasFlag(MapVisibility.Lobby)); previews.Values.First(m => m.Status == MapStatus.Available && m.Visibility.HasFlag(MapVisibility.Lobby));
return selected.Uid; return selected.Uid;
} }

View File

@@ -380,7 +380,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
void StartSkirmishGame() void StartSkirmishGame()
{ {
var map = Game.ModData.MapCache.ChooseInitialMap(Game.Settings.Server.Map); var map = Game.ModData.MapCache.ChooseInitialMap(Game.Settings.Server.Map, Game.CosmeticRandom);
Game.Settings.Server.Map = map; Game.Settings.Server.Map = map;
Game.Settings.Save(); Game.Settings.Save();

View File

@@ -126,12 +126,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
if (initialMap == null && tabMaps.Keys.Contains(initialTab) && tabMaps[initialTab].Any()) if (initialMap == null && tabMaps.Keys.Contains(initialTab) && tabMaps[initialTab].Any())
{ {
selectedUid = Game.ModData.MapCache.ChooseInitialMap(tabMaps[initialTab].Select(mp => mp.Uid).First()); selectedUid = Game.ModData.MapCache.ChooseInitialMap(tabMaps[initialTab].Select(mp => mp.Uid).First(),
Game.CosmeticRandom);
currentTab = initialTab; currentTab = initialTab;
} }
else else
{ {
selectedUid = Game.ModData.MapCache.ChooseInitialMap(initialMap); selectedUid = Game.ModData.MapCache.ChooseInitialMap(initialMap, Game.CosmeticRandom);
currentTab = tabMaps.Keys.FirstOrDefault(k => tabMaps[k].Select(mp => mp.Uid).Contains(selectedUid)); currentTab = tabMaps.Keys.FirstOrDefault(k => tabMaps[k].Select(mp => mp.Uid).Contains(selectedUid));
} }
@@ -313,7 +314,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
modData.MapCache[map].Delete(); modData.MapCache[map].Delete();
if (selectedUid == map) if (selectedUid == map)
selectedUid = Game.ModData.MapCache.ChooseInitialMap(tabMaps[currentTab].Select(mp => mp.Uid).FirstOrDefault()); selectedUid = Game.ModData.MapCache.ChooseInitialMap(tabMaps[currentTab].Select(mp => mp.Uid).FirstOrDefault(),
Game.CosmeticRandom);
} }
catch (Exception ex) catch (Exception ex)
{ {
@@ -348,7 +350,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{ {
maps.Do(m => DeleteMap(m)); maps.Do(m => DeleteMap(m));
if (after != null) if (after != null)
after(Game.ModData.MapCache.ChooseInitialMap(null)); after(Game.ModData.MapCache.ChooseInitialMap(null, Game.CosmeticRandom));
}, },
confirmText: "Delete", confirmText: "Delete",
onCancel: () => { }); onCancel: () => { });

View File

@@ -32,7 +32,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
this.onExit = onExit; this.onExit = onExit;
var settings = Game.Settings; var settings = Game.Settings;
preview = modData.MapCache[modData.MapCache.ChooseInitialMap(Game.Settings.Server.Map)]; preview = modData.MapCache[modData.MapCache.ChooseInitialMap(Game.Settings.Server.Map, Game.CosmeticRandom)];
panel.Get<ButtonWidget>("CREATE_BUTTON").OnClick = CreateAndJoin; panel.Get<ButtonWidget>("CREATE_BUTTON").OnClick = CreateAndJoin;