Remove direct access to MapPreview.Rules.
This commit is contained in:
@@ -86,11 +86,13 @@ namespace OpenRA
|
|||||||
public MapVisibility Visibility;
|
public MapVisibility Visibility;
|
||||||
|
|
||||||
Lazy<Ruleset> rules;
|
Lazy<Ruleset> rules;
|
||||||
public Ruleset Rules => rules?.Value;
|
|
||||||
public bool InvalidCustomRules { get; private set; }
|
public bool InvalidCustomRules { get; private set; }
|
||||||
public bool DefinesUnsafeCustomRules { get; private set; }
|
public bool DefinesUnsafeCustomRules { get; private set; }
|
||||||
public bool RulesLoaded { get; private set; }
|
public bool RulesLoaded { get; private set; }
|
||||||
|
|
||||||
|
public ActorInfo WorldActorInfo => rules?.Value.Actors[SystemActors.World];
|
||||||
|
public ActorInfo PlayerActorInfo => rules?.Value.Actors[SystemActors.Player];
|
||||||
|
|
||||||
public void SetRulesetGenerator(ModData modData, Func<(Ruleset Ruleset, bool DefinesUnsafeCustomRules)> generator)
|
public void SetRulesetGenerator(ModData modData, Func<(Ruleset Ruleset, bool DefinesUnsafeCustomRules)> generator)
|
||||||
{
|
{
|
||||||
InvalidCustomRules = false;
|
InvalidCustomRules = false;
|
||||||
@@ -154,16 +156,18 @@ namespace OpenRA
|
|||||||
public MapClassification Class => innerData.Class;
|
public MapClassification Class => innerData.Class;
|
||||||
public MapVisibility Visibility => innerData.Visibility;
|
public MapVisibility Visibility => innerData.Visibility;
|
||||||
|
|
||||||
public Ruleset Rules => innerData.Rules;
|
|
||||||
public bool InvalidCustomRules => innerData.InvalidCustomRules;
|
public bool InvalidCustomRules => innerData.InvalidCustomRules;
|
||||||
public bool RulesLoaded => innerData.RulesLoaded;
|
public bool RulesLoaded => innerData.RulesLoaded;
|
||||||
|
|
||||||
|
public ActorInfo WorldActorInfo => innerData.WorldActorInfo;
|
||||||
|
public ActorInfo PlayerActorInfo => innerData.PlayerActorInfo;
|
||||||
|
|
||||||
public bool DefinesUnsafeCustomRules
|
public bool DefinesUnsafeCustomRules
|
||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
// Force lazy rules to be evaluated
|
// Force lazy rules to be evaluated
|
||||||
var force = innerData.Rules;
|
var force = innerData.WorldActorInfo;
|
||||||
return innerData.DefinesUnsafeCustomRules;
|
return innerData.DefinesUnsafeCustomRules;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -338,7 +342,7 @@ namespace OpenRA
|
|||||||
|
|
||||||
public void PreloadRules()
|
public void PreloadRules()
|
||||||
{
|
{
|
||||||
var unused = Rules;
|
var unused = WorldActorInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateRemoteSearch(MapStatus status, MiniYaml yaml, Action<MapPreview> parseMetadata = null)
|
public void UpdateRemoteSearch(MapStatus status, MiniYaml yaml, Action<MapPreview> parseMetadata = null)
|
||||||
|
|||||||
@@ -1209,7 +1209,7 @@ namespace OpenRA.Server
|
|||||||
// The null padding is needed to keep the player indexes in sync with world.Players on the clients
|
// The null padding is needed to keep the player indexes in sync with world.Players on the clients
|
||||||
// This will need to change if future code wants to use worldPlayers for other purposes
|
// This will need to change if future code wants to use worldPlayers for other purposes
|
||||||
var playerRandom = new MersenneTwister(LobbyInfo.GlobalSettings.RandomSeed);
|
var playerRandom = new MersenneTwister(LobbyInfo.GlobalSettings.RandomSeed);
|
||||||
foreach (var cmpi in Map.Rules.Actors[SystemActors.World].TraitInfos<ICreatePlayersInfo>())
|
foreach (var cmpi in Map.WorldActorInfo.TraitInfos<ICreatePlayersInfo>())
|
||||||
cmpi.CreateServerPlayers(Map, LobbyInfo, worldPlayers, playerRandom);
|
cmpi.CreateServerPlayers(Map, LobbyInfo, worldPlayers, playerRandom);
|
||||||
|
|
||||||
if (recorder != null)
|
if (recorder != null)
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace OpenRA.Traits
|
|||||||
[Desc("Display order for the explore map checkbox in the lobby.")]
|
[Desc("Display order for the explore map checkbox in the lobby.")]
|
||||||
public readonly int ExploredMapCheckboxDisplayOrder = 0;
|
public readonly int ExploredMapCheckboxDisplayOrder = 0;
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption("explored", ExploredMapCheckboxLabel, ExploredMapCheckboxDescription,
|
yield return new LobbyBooleanOption("explored", ExploredMapCheckboxLabel, ExploredMapCheckboxDescription,
|
||||||
ExploredMapCheckboxVisible, ExploredMapCheckboxDisplayOrder, ExploredMapCheckboxEnabled, ExploredMapCheckboxLocked);
|
ExploredMapCheckboxVisible, ExploredMapCheckboxDisplayOrder, ExploredMapCheckboxEnabled, ExploredMapCheckboxLocked);
|
||||||
|
|||||||
@@ -530,7 +530,7 @@ namespace OpenRA.Traits
|
|||||||
[RequireExplicitImplementation]
|
[RequireExplicitImplementation]
|
||||||
public interface ILobbyOptions : ITraitInfoInterface
|
public interface ILobbyOptions : ITraitInfoInterface
|
||||||
{
|
{
|
||||||
IEnumerable<LobbyOption> LobbyOptions(Ruleset rules);
|
IEnumerable<LobbyOption> LobbyOptions(MapPreview map);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class LobbyOption
|
public class LobbyOption
|
||||||
|
|||||||
@@ -357,7 +357,7 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
}
|
}
|
||||||
|
|
||||||
var botType = parts[2];
|
var botType = parts[2];
|
||||||
var botInfo = server.Map.Rules.Actors[SystemActors.Player].TraitInfos<IBotInfo>()
|
var botInfo = server.Map.PlayerActorInfo.TraitInfos<IBotInfo>()
|
||||||
.FirstOrDefault(b => b.Type == botType);
|
.FirstOrDefault(b => b.Type == botType);
|
||||||
|
|
||||||
if (botInfo == null)
|
if (botInfo == null)
|
||||||
@@ -386,7 +386,7 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
|
|
||||||
// Pick a random color for the bot
|
// Pick a random color for the bot
|
||||||
var validator = server.ModData.Manifest.Get<ColorValidator>();
|
var validator = server.ModData.Manifest.Get<ColorValidator>();
|
||||||
var terrainColors = server.Map.Rules.TerrainInfo.RestrictedPlayerColors;
|
var terrainColors = server.ModData.DefaultTerrainInfo[server.Map.TileSet].RestrictedPlayerColors;
|
||||||
var playerColors = server.LobbyInfo.Clients.Select(c => c.Color)
|
var playerColors = server.LobbyInfo.Clients.Select(c => c.Color)
|
||||||
.Concat(server.Map.Players.Players.Values.Select(p => p.Color));
|
.Concat(server.Map.Players.Players.Values.Select(p => p.Color));
|
||||||
bot.Color = bot.PreferredColor = validator.RandomPresetColor(server.Random, terrainColors, playerColors);
|
bot.Color = bot.PreferredColor = validator.RandomPresetColor(server.Random, terrainColors, playerColors);
|
||||||
@@ -437,10 +437,10 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
.Where(ss => ss != null)
|
.Where(ss => ss != null)
|
||||||
.ToDictionary(ss => ss.PlayerReference, ss => ss);
|
.ToDictionary(ss => ss.PlayerReference, ss => ss);
|
||||||
|
|
||||||
LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map.Rules);
|
LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map);
|
||||||
|
|
||||||
// Reset client states
|
// Reset client states
|
||||||
var selectableFactions = server.Map.Rules.Actors[SystemActors.World].TraitInfos<FactionInfo>()
|
var selectableFactions = server.Map.WorldActorInfo.TraitInfos<FactionInfo>()
|
||||||
.Where(f => f.Selectable)
|
.Where(f => f.Selectable)
|
||||||
.Select(f => f.InternalName)
|
.Select(f => f.InternalName)
|
||||||
.ToList();
|
.ToList();
|
||||||
@@ -457,7 +457,7 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
// - Players who now lack a slot are made observers
|
// - Players who now lack a slot are made observers
|
||||||
// - Bots who now lack a slot are dropped
|
// - Bots who now lack a slot are dropped
|
||||||
// - Bots who are not defined in the map rules are dropped
|
// - Bots who are not defined in the map rules are dropped
|
||||||
var botTypes = server.Map.Rules.Actors[SystemActors.Player].TraitInfos<IBotInfo>().Select(t => t.Type);
|
var botTypes = server.Map.PlayerActorInfo.TraitInfos<IBotInfo>().Select(t => t.Type);
|
||||||
var slots = server.LobbyInfo.Slots.Keys.ToArray();
|
var slots = server.LobbyInfo.Slots.Keys.ToArray();
|
||||||
var i = 0;
|
var i = 0;
|
||||||
foreach (var os in oldSlots)
|
foreach (var os in oldSlots)
|
||||||
@@ -534,9 +534,9 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
var allOptions = server.Map.Rules.Actors[SystemActors.Player].TraitInfos<ILobbyOptions>()
|
var allOptions = server.Map.PlayerActorInfo.TraitInfos<ILobbyOptions>()
|
||||||
.Concat(server.Map.Rules.Actors[SystemActors.World].TraitInfos<ILobbyOptions>())
|
.Concat(server.Map.WorldActorInfo.TraitInfos<ILobbyOptions>())
|
||||||
.SelectMany(t => t.LobbyOptions(server.Map.Rules));
|
.SelectMany(t => t.LobbyOptions(server.Map));
|
||||||
|
|
||||||
// Overwrite keys with duplicate ids
|
// Overwrite keys with duplicate ids
|
||||||
var options = new Dictionary<string, LobbyOption>();
|
var options = new Dictionary<string, LobbyOption>();
|
||||||
@@ -775,7 +775,7 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
if (server.LobbyInfo.Slots[targetClient.Slot].LockFaction)
|
if (server.LobbyInfo.Slots[targetClient.Slot].LockFaction)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
var factions = server.Map.Rules.Actors[SystemActors.World].TraitInfos<FactionInfo>()
|
var factions = server.Map.WorldActorInfo.TraitInfos<FactionInfo>()
|
||||||
.Where(f => f.Selectable).Select(f => f.InternalName);
|
.Where(f => f.Selectable).Select(f => f.InternalName);
|
||||||
|
|
||||||
if (!factions.Contains(parts[1]))
|
if (!factions.Contains(parts[1]))
|
||||||
@@ -1018,7 +1018,7 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
.Where(s => s != null)
|
.Where(s => s != null)
|
||||||
.ToDictionary(s => s.PlayerReference, s => s);
|
.ToDictionary(s => s.PlayerReference, s => s);
|
||||||
|
|
||||||
LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map.Rules);
|
LoadMapSettings(server, server.LobbyInfo.GlobalSettings, server.Map);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1041,13 +1041,13 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void LoadMapSettings(S server, Session.Global gs, Ruleset rules)
|
public static void LoadMapSettings(S server, Session.Global gs, MapPreview map)
|
||||||
{
|
{
|
||||||
lock (server.LobbyInfo)
|
lock (server.LobbyInfo)
|
||||||
{
|
{
|
||||||
var options = rules.Actors[SystemActors.Player].TraitInfos<ILobbyOptions>()
|
var options = map.PlayerActorInfo.TraitInfos<ILobbyOptions>()
|
||||||
.Concat(rules.Actors[SystemActors.World].TraitInfos<ILobbyOptions>())
|
.Concat(map.WorldActorInfo.TraitInfos<ILobbyOptions>())
|
||||||
.SelectMany(t => t.LobbyOptions(rules));
|
.SelectMany(t => t.LobbyOptions(map));
|
||||||
|
|
||||||
foreach (var o in options)
|
foreach (var o in options)
|
||||||
{
|
{
|
||||||
@@ -1090,7 +1090,7 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
server.SendOrderTo(connectionToEcho, "Message", message);
|
server.SendOrderTo(connectionToEcho, "Message", message);
|
||||||
};
|
};
|
||||||
|
|
||||||
var terrainColors = server.Map.Rules.TerrainInfo.RestrictedPlayerColors;
|
var terrainColors = server.ModData.DefaultTerrainInfo[server.Map.TileSet].RestrictedPlayerColors;
|
||||||
var playerColors = server.LobbyInfo.Clients.Where(c => c.Index != playerIndex).Select(c => c.Color)
|
var playerColors = server.LobbyInfo.Clients.Where(c => c.Index != playerIndex).Select(c => c.Color)
|
||||||
.Concat(server.Map.Players.Players.Values.Select(p => p.Color)).ToList();
|
.Concat(server.Map.Players.Players.Values.Select(p => p.Color)).ToList();
|
||||||
|
|
||||||
@@ -1100,7 +1100,7 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
|
|
||||||
static string MissionBriefingOrDefault(S server)
|
static string MissionBriefingOrDefault(S server)
|
||||||
{
|
{
|
||||||
var missionData = server.Map.Rules.Actors[SystemActors.World].TraitInfoOrDefault<MissionDataInfo>();
|
var missionData = server.Map.WorldActorInfo.TraitInfoOrDefault<MissionDataInfo>();
|
||||||
if (missionData != null && !string.IsNullOrEmpty(missionData.Briefing))
|
if (missionData != null && !string.IsNullOrEmpty(missionData.Briefing))
|
||||||
return missionData.Briefing.Replace("\\n", "\n");
|
return missionData.Briefing.Replace("\\n", "\n");
|
||||||
|
|
||||||
|
|||||||
@@ -23,11 +23,11 @@ namespace OpenRA.Mods.Common.Server
|
|||||||
lock (server.LobbyInfo)
|
lock (server.LobbyInfo)
|
||||||
{
|
{
|
||||||
var defaults = new Session.Global();
|
var defaults = new Session.Global();
|
||||||
LobbyCommands.LoadMapSettings(server, defaults, server.Map.Rules);
|
LobbyCommands.LoadMapSettings(server, defaults, server.Map);
|
||||||
|
|
||||||
var options = server.Map.Rules.Actors[SystemActors.Player].TraitInfos<ILobbyOptions>()
|
var options = server.Map.PlayerActorInfo.TraitInfos<ILobbyOptions>()
|
||||||
.Concat(server.Map.Rules.Actors[SystemActors.World].TraitInfos<ILobbyOptions>())
|
.Concat(server.Map.WorldActorInfo.TraitInfos<ILobbyOptions>())
|
||||||
.SelectMany(t => t.LobbyOptions(server.Map.Rules))
|
.SelectMany(t => t.LobbyOptions(server.Map))
|
||||||
.ToDictionary(o => o.Id, o => o);
|
.ToDictionary(o => o.Id, o => o);
|
||||||
|
|
||||||
foreach (var kv in server.LobbyInfo.GlobalSettings.LobbyOptions)
|
foreach (var kv in server.LobbyInfo.GlobalSettings.LobbyOptions)
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Enable the path debug overlay by default.")]
|
[Desc("Enable the path debug overlay by default.")]
|
||||||
public readonly bool PathDebug;
|
public readonly bool PathDebug;
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption("cheats", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked);
|
yield return new LobbyBooleanOption("cheats", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Monetery value of each resource type.", "Dictionary of [resource type]: [value per unit].")]
|
[Desc("Monetery value of each resource type.", "Dictionary of [resource type]: [value per unit].")]
|
||||||
public readonly Dictionary<string, int> ResourceValues = new Dictionary<string, int>();
|
public readonly Dictionary<string, int> ResourceValues = new Dictionary<string, int>();
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
var startingCash = SelectableCash.ToDictionary(c => c.ToString(), c => "$" + c.ToString());
|
var startingCash = SelectableCash.ToDictionary(c => c.ToString(), c => "$" + c.ToString());
|
||||||
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
throw new YamlException("TimeLimitDefault must be a value from TimeLimitOptions");
|
throw new YamlException("TimeLimitDefault must be a value from TimeLimitOptions");
|
||||||
}
|
}
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
var timelimits = TimeLimitOptions.ToDictionary(c => c.ToString(), c =>
|
var timelimits = TimeLimitOptions.ToDictionary(c => c.ToString(), c =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Spawn and remove the plane this far outside the map.")]
|
[Desc("Spawn and remove the plane this far outside the map.")]
|
||||||
public readonly WDist Cordon = new WDist(5120);
|
public readonly WDist Cordon = new WDist(5120);
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption("crates", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked);
|
yield return new LobbyBooleanOption("crates", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,9 +28,8 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
void ICreatePlayersInfo.CreateServerPlayers(MapPreview map, Session lobbyInfo, List<GameInformation.Player> players, MersenneTwister playerRandom)
|
void ICreatePlayersInfo.CreateServerPlayers(MapPreview map, Session lobbyInfo, List<GameInformation.Player> players, MersenneTwister playerRandom)
|
||||||
{
|
{
|
||||||
var worldInfo = map.Rules.Actors[SystemActors.World];
|
var factions = map.WorldActorInfo.TraitInfos<FactionInfo>().ToArray();
|
||||||
var factions = worldInfo.TraitInfos<FactionInfo>().ToArray();
|
var assignSpawnLocations = map.WorldActorInfo.TraitInfoOrDefault<IAssignSpawnPointsInfo>();
|
||||||
var assignSpawnLocations = worldInfo.TraitInfoOrDefault<IAssignSpawnPointsInfo>();
|
|
||||||
var spawnState = assignSpawnLocations?.InitializeState(map, lobbyInfo);
|
var spawnState = assignSpawnLocations?.InitializeState(map, lobbyInfo);
|
||||||
|
|
||||||
// Create the unplayable map players -- neutral, shellmap, scripted, etc.
|
// Create the unplayable map players -- neutral, shellmap, scripted, etc.
|
||||||
@@ -42,7 +41,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create the regular playable players.
|
// Create the regular playable players.
|
||||||
var bots = map.Rules.Actors[SystemActors.Player].TraitInfos<IBotInfo>().ToArray();
|
var bots = map.PlayerActorInfo.TraitInfos<IBotInfo>().ToArray();
|
||||||
|
|
||||||
foreach (var kv in lobbyInfo.Slots)
|
foreach (var kv in lobbyInfo.Slots)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
IEnumerable<string> ITechTreePrerequisiteInfo.Prerequisites(ActorInfo info) { return Prerequisites; }
|
IEnumerable<string> ITechTreePrerequisiteInfo.Prerequisites(ActorInfo info) { return Prerequisites; }
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption(ID, Label, Description,
|
yield return new LobbyBooleanOption(ID, Label, Description,
|
||||||
Visible, DisplayOrder, Enabled, Locked);
|
Visible, DisplayOrder, Enabled, Locked);
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Display order for the build radius checkbox in the lobby.")]
|
[Desc("Display order for the build radius checkbox in the lobby.")]
|
||||||
public readonly int BuildRadiusCheckboxDisplayOrder = 0;
|
public readonly int BuildRadiusCheckboxDisplayOrder = 0;
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption("allybuild", AllyBuildRadiusCheckboxLabel, AllyBuildRadiusCheckboxDescription,
|
yield return new LobbyBooleanOption("allybuild", AllyBuildRadiusCheckboxLabel, AllyBuildRadiusCheckboxDescription,
|
||||||
AllyBuildRadiusCheckboxVisible, AllyBuildRadiusCheckboxDisplayOrder, AllyBuildRadiusCheckboxEnabled, AllyBuildRadiusCheckboxLocked);
|
AllyBuildRadiusCheckboxVisible, AllyBuildRadiusCheckboxDisplayOrder, AllyBuildRadiusCheckboxEnabled, AllyBuildRadiusCheckboxLocked);
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Display order for the creeps checkbox in the lobby.")]
|
[Desc("Display order for the creeps checkbox in the lobby.")]
|
||||||
public readonly int CheckboxDisplayOrder = 0;
|
public readonly int CheckboxDisplayOrder = 0;
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption("creeps", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked);
|
yield return new LobbyBooleanOption("creeps", CheckboxLabel, CheckboxDescription, CheckboxVisible, CheckboxDisplayOrder, CheckboxEnabled, CheckboxLocked);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -73,12 +73,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Display order for the game speed option in the lobby.")]
|
[Desc("Display order for the game speed option in the lobby.")]
|
||||||
public readonly int GameSpeedDropdownDisplayOrder = 0;
|
public readonly int GameSpeedDropdownDisplayOrder = 0;
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption("shortgame", ShortGameCheckboxLabel, ShortGameCheckboxDescription,
|
yield return new LobbyBooleanOption("shortgame", ShortGameCheckboxLabel, ShortGameCheckboxDescription,
|
||||||
ShortGameCheckboxVisible, ShortGameCheckboxDisplayOrder, ShortGameCheckboxEnabled, ShortGameCheckboxLocked);
|
ShortGameCheckboxVisible, ShortGameCheckboxDisplayOrder, ShortGameCheckboxEnabled, ShortGameCheckboxLocked);
|
||||||
|
|
||||||
var techLevels = rules.Actors[SystemActors.Player].TraitInfos<ProvidesTechPrerequisiteInfo>()
|
var techLevels = map.PlayerActorInfo.TraitInfos<ProvidesTechPrerequisiteInfo>()
|
||||||
.ToDictionary(t => t.Id, t => t.Name);
|
.ToDictionary(t => t.Id, t => t.Name);
|
||||||
|
|
||||||
if (techLevels.Any())
|
if (techLevels.Any())
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
|
|
||||||
public override object Create(ActorInitializer init) { return new MapStartingLocations(this); }
|
public override object Create(ActorInitializer init) { return new MapStartingLocations(this); }
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyBooleanOption(
|
yield return new LobbyBooleanOption(
|
||||||
"separateteamspawns",
|
"separateteamspawns",
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Display order for the option in the lobby.")]
|
[Desc("Display order for the option in the lobby.")]
|
||||||
public readonly int DisplayOrder = 0;
|
public readonly int DisplayOrder = 0;
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
yield return new LobbyOption(ID, Label, Description, Visible, DisplayOrder,
|
yield return new LobbyOption(ID, Label, Description, Visible, DisplayOrder,
|
||||||
Values, Default, Locked);
|
Values, Default, Locked);
|
||||||
|
|||||||
@@ -39,12 +39,12 @@ namespace OpenRA.Mods.Common.Traits
|
|||||||
[Desc("Display order for the starting units option in the lobby.")]
|
[Desc("Display order for the starting units option in the lobby.")]
|
||||||
public readonly int DropdownDisplayOrder = 0;
|
public readonly int DropdownDisplayOrder = 0;
|
||||||
|
|
||||||
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(Ruleset rules)
|
IEnumerable<LobbyOption> ILobbyOptions.LobbyOptions(MapPreview map)
|
||||||
{
|
{
|
||||||
var startingUnits = new Dictionary<string, string>();
|
var startingUnits = new Dictionary<string, string>();
|
||||||
|
|
||||||
// Duplicate classes are defined for different race variants
|
// Duplicate classes are defined for different race variants
|
||||||
foreach (var t in rules.Actors[SystemActors.World].TraitInfos<StartingUnitsInfo>())
|
foreach (var t in map.WorldActorInfo.TraitInfos<StartingUnitsInfo>())
|
||||||
startingUnits[t.Class] = t.ClassName;
|
startingUnits[t.Class] = t.ClassName;
|
||||||
|
|
||||||
if (startingUnits.Any())
|
if (startingUnits.Any())
|
||||||
|
|||||||
@@ -207,7 +207,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
slotsButton.OnMouseDown = _ =>
|
slotsButton.OnMouseDown = _ =>
|
||||||
{
|
{
|
||||||
var botTypes = map.Rules.Actors[SystemActors.Player].TraitInfos<IBotInfo>().Select(t => t.Type);
|
var botTypes = map.PlayerActorInfo.TraitInfos<IBotInfo>().Select(t => t.Type);
|
||||||
var options = new Dictionary<string, IEnumerable<DropDownOption>>();
|
var options = new Dictionary<string, IEnumerable<DropDownOption>>();
|
||||||
|
|
||||||
var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin);
|
var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin);
|
||||||
@@ -539,7 +539,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
if (addBotOnMapLoad)
|
if (addBotOnMapLoad)
|
||||||
{
|
{
|
||||||
var slot = orderManager.LobbyInfo.FirstEmptyBotSlot();
|
var slot = orderManager.LobbyInfo.FirstEmptyBotSlot();
|
||||||
var bot = currentMap.Rules.Actors[SystemActors.Player].TraitInfos<IBotInfo>().Select(t => t.Type).FirstOrDefault();
|
var bot = currentMap.PlayerActorInfo.TraitInfos<IBotInfo>().Select(t => t.Type).FirstOrDefault();
|
||||||
var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin);
|
var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin);
|
||||||
if (slot != null && bot != null)
|
if (slot != null && bot != null)
|
||||||
orderManager.IssueOrder(Order.Command("slot_bot {0} {1} {2}".F(slot, botController.Index, bot)));
|
orderManager.IssueOrder(Order.Command("slot_bot {0} {1} {2}".F(slot, botController.Index, bot)));
|
||||||
|
|||||||
@@ -73,14 +73,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
void RebuildOptions()
|
void RebuildOptions()
|
||||||
{
|
{
|
||||||
if (mapPreview == null || mapPreview.Rules == null || mapPreview.InvalidCustomRules)
|
if (mapPreview == null || mapPreview.WorldActorInfo == null || mapPreview.InvalidCustomRules)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
optionsContainer.RemoveChildren();
|
optionsContainer.RemoveChildren();
|
||||||
optionsContainer.Bounds.Height = 0;
|
optionsContainer.Bounds.Height = 0;
|
||||||
var allOptions = mapPreview.Rules.Actors[SystemActors.Player].TraitInfos<ILobbyOptions>()
|
var allOptions = mapPreview.PlayerActorInfo.TraitInfos<ILobbyOptions>()
|
||||||
.Concat(mapPreview.Rules.Actors[SystemActors.World].TraitInfos<ILobbyOptions>())
|
.Concat(mapPreview.WorldActorInfo.TraitInfos<ILobbyOptions>())
|
||||||
.SelectMany(t => t.LobbyOptions(mapPreview.Rules))
|
.SelectMany(t => t.LobbyOptions(mapPreview))
|
||||||
.Where(o => o.IsVisible)
|
.Where(o => o.IsVisible)
|
||||||
.OrderBy(o => o.DisplayOrder)
|
.OrderBy(o => o.DisplayOrder)
|
||||||
.ToArray();
|
.ToArray();
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
var bots = new List<SlotDropDownOption>();
|
var bots = new List<SlotDropDownOption>();
|
||||||
if (slot.AllowBots)
|
if (slot.AllowBots)
|
||||||
{
|
{
|
||||||
foreach (var b in map.Rules.Actors[SystemActors.Player].TraitInfos<IBotInfo>())
|
foreach (var b in map.PlayerActorInfo.TraitInfos<IBotInfo>())
|
||||||
{
|
{
|
||||||
var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin);
|
var botController = orderManager.LobbyInfo.Clients.FirstOrDefault(c => c.IsAdmin);
|
||||||
bots.Add(new SlotDropDownOption(b.Name,
|
bots.Add(new SlotDropDownOption(b.Name,
|
||||||
|
|||||||
@@ -219,7 +219,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
|
|
||||||
new Thread(() =>
|
new Thread(() =>
|
||||||
{
|
{
|
||||||
var mapDifficulty = preview.Rules.Actors[SystemActors.World].TraitInfos<ScriptLobbyDropdownInfo>()
|
var mapDifficulty = preview.WorldActorInfo.TraitInfos<ScriptLobbyDropdownInfo>()
|
||||||
.FirstOrDefault(sld => sld.ID == "difficulty");
|
.FirstOrDefault(sld => sld.ID == "difficulty");
|
||||||
|
|
||||||
if (mapDifficulty != null)
|
if (mapDifficulty != null)
|
||||||
@@ -229,7 +229,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
difficultyDisabled = mapDifficulty.Locked;
|
difficultyDisabled = mapDifficulty.Locked;
|
||||||
}
|
}
|
||||||
|
|
||||||
var missionData = preview.Rules.Actors[SystemActors.World].TraitInfoOrDefault<MissionDataInfo>();
|
var missionData = preview.WorldActorInfo.TraitInfoOrDefault<MissionDataInfo>();
|
||||||
if (missionData != null)
|
if (missionData != null)
|
||||||
{
|
{
|
||||||
briefingVideo = missionData.BriefingVideo;
|
briefingVideo = missionData.BriefingVideo;
|
||||||
@@ -383,7 +383,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
orders.Add(Order.Command("option gamespeed {0}".F(gameSpeed)));
|
orders.Add(Order.Command("option gamespeed {0}".F(gameSpeed)));
|
||||||
orders.Add(Order.Command("state {0}".F(Session.ClientState.Ready)));
|
orders.Add(Order.Command("state {0}".F(Session.ClientState.Ready)));
|
||||||
|
|
||||||
var missionData = selectedMap.Rules.Actors[SystemActors.World].TraitInfoOrDefault<MissionDataInfo>();
|
var missionData = selectedMap.WorldActorInfo.TraitInfoOrDefault<MissionDataInfo>();
|
||||||
if (missionData != null && missionData.StartVideo != null && modData.DefaultFileSystem.Exists(missionData.StartVideo))
|
if (missionData != null && missionData.StartVideo != null && modData.DefaultFileSystem.Exists(missionData.StartVideo))
|
||||||
{
|
{
|
||||||
var fsPlayer = fullscreenVideoPlayer.Get<VideoPlayerWidget>("PLAYER");
|
var fsPlayer = fullscreenVideoPlayer.Get<VideoPlayerWidget>("PLAYER");
|
||||||
|
|||||||
Reference in New Issue
Block a user