Store map packages in MapPreview.
This commit is contained in:
@@ -75,7 +75,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var mapDirectories = modData.Manifest.MapFolders
|
||||
.ToDictionary(kv => makeMapDirectory(kv.Key), kv => Enum<MapClassification>.Parse(kv.Value));
|
||||
|
||||
var mapPath = map.Package.Name;
|
||||
var mapPath = map.Package != null ? map.Package.Name : null;
|
||||
var directoryDropdown = widget.Get<DropDownButtonWidget>("DIRECTORY_DROPDOWN");
|
||||
{
|
||||
Func<string, ScrollItemWidget, ScrollItemWidget> setupItem = (option, template) =>
|
||||
|
||||
@@ -737,14 +737,15 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
if (MapPreview.Uid == uid)
|
||||
return;
|
||||
|
||||
MapPreview = Game.ModData.MapCache[uid];
|
||||
var modData = Game.ModData;
|
||||
MapPreview = modData.MapCache[uid];
|
||||
Map = null;
|
||||
if (MapPreview.Status == MapStatus.Available)
|
||||
{
|
||||
// Maps need to be validated and pre-loaded before they can be accessed
|
||||
new Thread(_ =>
|
||||
{
|
||||
var currentMap = Map = new Map(MapPreview.Path);
|
||||
var currentMap = Map = new Map(modData, MapPreview.Package);
|
||||
currentMap.PreloadRules();
|
||||
Game.RunAfterTick(() =>
|
||||
{
|
||||
|
||||
@@ -284,7 +284,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
|
||||
string DeleteMap(string map)
|
||||
{
|
||||
var path = Game.ModData.MapCache[map].Path;
|
||||
var path = Game.ModData.MapCache[map].Package.Name;
|
||||
try
|
||||
{
|
||||
if (File.Exists(path))
|
||||
|
||||
@@ -41,7 +41,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
readonly ScrollPanelWidget missionList;
|
||||
readonly ScrollItemWidget headerTemplate;
|
||||
readonly ScrollItemWidget template;
|
||||
readonly Cache<MapPreview, Map> mapCache = new Cache<MapPreview, Map>(p => new Map(p.Path));
|
||||
readonly Cache<MapPreview, Map> mapCache;
|
||||
|
||||
MapPreview selectedMapPreview;
|
||||
Map selectedMap;
|
||||
@@ -55,6 +55,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
public MissionBrowserLogic(Widget widget, World world, Action onStart, Action onExit)
|
||||
{
|
||||
modData = Game.ModData;
|
||||
mapCache = new Cache<MapPreview, Map>(p => new Map(modData, p.Package));
|
||||
this.onStart = onStart;
|
||||
|
||||
missionList = widget.Get<ScrollPanelWidget>("MISSION_LIST");
|
||||
@@ -108,8 +109,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
||||
var missionMapPaths = kv.Value.Nodes.Select(n => Path.GetFullPath(n.Key)).ToList();
|
||||
|
||||
var previews = modData.MapCache
|
||||
.Where(p => p.Status == MapStatus.Available && missionMapPaths.Contains(Path.GetFullPath(p.Path)))
|
||||
.OrderBy(p => missionMapPaths.IndexOf(Path.GetFullPath(p.Path)));
|
||||
.Where(p => p.Status == MapStatus.Available && missionMapPaths.Contains(p.Package.Name))
|
||||
.OrderBy(p => missionMapPaths.IndexOf(p.Package.Name));
|
||||
|
||||
CreateMissionGroup(kv.Key, previews);
|
||||
allPreviews.AddRange(previews);
|
||||
|
||||
Reference in New Issue
Block a user