Port game speed selection to new lobby backend.

This commit is contained in:
Paul Chote
2016-07-02 10:51:55 +01:00
parent e858e13da7
commit 7caf636222
10 changed files with 52 additions and 118 deletions

View File

@@ -30,6 +30,12 @@ namespace OpenRA.Mods.Common.Traits
[Desc("Prevent the tech level from being changed in the lobby.")]
public readonly bool TechLevelLocked = false;
[Desc("Default game speed.")]
public readonly string GameSpeed = "default";
[Desc("Prevent the game speed from being changed in the lobby.")]
public readonly bool GameSpeedLocked = false;
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
{
yield return new LobbyBooleanOption("shortgame", "Short Game", ShortGameEnabled, ShortGameLocked);
@@ -41,6 +47,14 @@ namespace OpenRA.Mods.Common.Traits
yield return new LobbyOption("techlevel", "Tech Level",
new ReadOnlyDictionary<string, string>(techLevels),
TechLevel, TechLevelLocked);
var gameSpeeds = Game.ModData.Manifest.Get<GameSpeeds>().Speeds
.ToDictionary(s => s.Key, s => s.Value.Name);
// NOTE: The server hardcodes special-case logic for this option id
yield return new LobbyOption("gamespeed", "Game Speed",
new ReadOnlyDictionary<string, string>(gameSpeeds),
GameSpeed, GameSpeedLocked);
}
public object Create(ActorInitializer init) { return new MapOptions(this); }
@@ -52,6 +66,7 @@ namespace OpenRA.Mods.Common.Traits
public bool ShortGame { get; private set; }
public string TechLevel { get; private set; }
public GameSpeed GameSpeed { get; private set; }
public MapOptions(MapOptionsInfo info)
{
@@ -65,6 +80,11 @@ namespace OpenRA.Mods.Common.Traits
TechLevel = self.World.LobbyInfo.GlobalSettings
.OptionOrDefault("techlevel", info.TechLevel);
var speed = self.World.LobbyInfo.GlobalSettings
.OptionOrDefault("gamespeed", info.GameSpeed);
GameSpeed = Game.ModData.Manifest.Get<GameSpeeds>().Speeds[speed];
}
}
}