Use the map save dialog to set new map properties.

This commit is contained in:
Paul Chote
2015-06-20 19:30:59 +01:00
parent cd1fdb9b36
commit b2050ae1aa
3 changed files with 32 additions and 24 deletions

View File

@@ -68,26 +68,25 @@ namespace OpenRA.Mods.Common.Widgets.Logic
map.PlayerDefinitions = new MapPlayers(map.Rules, map.SpawnPoints.Value.Length).ToMiniYaml(); map.PlayerDefinitions = new MapPlayers(map.Rules, map.SpawnPoints.Value.Length).ToMiniYaml();
map.FixOpenAreas(modRules); map.FixOpenAreas(modRules);
var userMapFolder = Game.ModData.Manifest.MapFolders.First(f => f.Value == "User").Key; Action<string> afterSave = uid =>
{
ConnectionLogic.Connect(System.Net.IPAddress.Loopback.ToString(),
Game.CreateLocalServer(uid), "",
() => Game.LoadEditor(uid),
() => { Game.CloseServer(); onExit(); });
// Ignore optional flag Ui.CloseWindow();
if (userMapFolder.StartsWith("~")) onSelect(uid);
userMapFolder = userMapFolder.Substring(1); };
var mapDir = Platform.ResolvePath(userMapFolder); Ui.OpenWindow("SAVE_MAP_PANEL", new WidgetArgs()
Directory.CreateDirectory(mapDir); {
var tempLocation = Path.Combine(mapDir, "temp") + ".oramap"; { "onSave", afterSave },
map.Save(tempLocation); // TODO: load it right away and save later properly { "onExit", () => { Ui.CloseWindow(); onExit(); } },
{ "map", map },
var newMap = new Map(tempLocation); { "playerDefinitions", map.PlayerDefinitions },
Game.ModData.MapCache[newMap.Uid].UpdateFromMap(newMap, MapClassification.User); { "actorDefinitions", map.ActorDefinitions }
});
ConnectionLogic.Connect(System.Net.IPAddress.Loopback.ToString(),
Game.CreateLocalServer(newMap.Uid),
"",
() => { Game.LoadEditor(newMap.Uid); },
() => { Game.CloseServer(); onExit(); });
onSelect(newMap.Uid);
}; };
} }
} }

View File

@@ -20,7 +20,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public class SaveMapLogic public class SaveMapLogic
{ {
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public SaveMapLogic(Widget widget, Action onExit, Map map, EditorActorLayer editorActorLayer) public SaveMapLogic(Widget widget, Action<string> onSave, Action onExit, Map map, List<MiniYamlNode> playerDefinitions, List<MiniYamlNode> actorDefinitions)
{ {
var title = widget.Get<TextFieldWidget>("TITLE"); var title = widget.Get<TextFieldWidget>("TITLE");
title.Text = map.Title; title.Text = map.Title;
@@ -73,7 +73,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
return item; return item;
}; };
var mapDirectory = Platform.UnresolvePath(Path.GetDirectoryName(map.Path)); var mapDirectory = map.Path != null ? Platform.UnresolvePath(Path.GetDirectoryName(map.Path)) : null;
var initialDirectory = mapDirectories.Keys.FirstOrDefault(f => f == mapDirectory); var initialDirectory = mapDirectories.Keys.FirstOrDefault(f => f == mapDirectory);
if (initialDirectory == null) if (initialDirectory == null)
@@ -125,8 +125,13 @@ namespace OpenRA.Mods.Common.Widgets.Logic
map.Description = description.Text; map.Description = description.Text;
map.Author = author.Text; map.Author = author.Text;
map.Visibility = (MapVisibility)Enum.Parse(typeof(MapVisibility), visibilityDropdown.Text); map.Visibility = (MapVisibility)Enum.Parse(typeof(MapVisibility), visibilityDropdown.Text);
map.ActorDefinitions = editorActorLayer.Save();
map.PlayerDefinitions = editorActorLayer.Players.ToMiniYaml(); if (actorDefinitions != null)
map.ActorDefinitions = actorDefinitions;
if (playerDefinitions != null)
map.PlayerDefinitions = playerDefinitions;
map.RequiresMod = Game.ModData.Manifest.Mod.Id; map.RequiresMod = Game.ModData.Manifest.Mod.Id;
var combinedPath = Platform.ResolvePath(Path.Combine(directoryDropdown.Text, filename.Text + fileTypes[typeDropdown.Text])); var combinedPath = Platform.ResolvePath(Path.Combine(directoryDropdown.Text, filename.Text + fileTypes[typeDropdown.Text]));
@@ -145,7 +150,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Console.WriteLine("Saved current map at {0}", combinedPath); Console.WriteLine("Saved current map at {0}", combinedPath);
Ui.CloseWindow(); Ui.CloseWindow();
onExit();
onSave(map.Uid);
}; };
} }
} }

View File

@@ -102,11 +102,14 @@ namespace OpenRA.Mods.Common.Widgets.Logic
saveMapButton.OnClick = () => saveMapButton.OnClick = () =>
{ {
hideMenu = true; hideMenu = true;
var editorActorLayer = world.WorldActor.Trait<EditorActorLayer>();
Ui.OpenWindow("SAVE_MAP_PANEL", new WidgetArgs() Ui.OpenWindow("SAVE_MAP_PANEL", new WidgetArgs()
{ {
{ "onSave", (Action<string>)(_ => hideMenu = false) },
{ "onExit", () => hideMenu = false }, { "onExit", () => hideMenu = false },
{ "map", world.Map }, { "map", world.Map },
{ "editorActorLayer", world.WorldActor.Trait<EditorActorLayer>() } { "playerDefinitions", editorActorLayer.Players.ToMiniYaml() },
{ "actorDefinitions", editorActorLayer.Save() }
}); });
}; };