Install map button (does not verify that maps are valid).

This commit is contained in:
Paul Chote
2011-01-23 20:32:26 +13:00
parent 4c053dae24
commit 580b9014b3
4 changed files with 67 additions and 10 deletions

View File

@@ -21,7 +21,7 @@ namespace OpenRA
{ {
public readonly Manifest Manifest; public readonly Manifest Manifest;
public readonly ObjectCreator ObjectCreator; public readonly ObjectCreator ObjectCreator;
public readonly Dictionary<string, MapStub> AvailableMaps; public Dictionary<string, MapStub> AvailableMaps {get; private set;}
public readonly WidgetLoader WidgetLoader; public readonly WidgetLoader WidgetLoader;
public ILoadScreen LoadScreen = null; public ILoadScreen LoadScreen = null;
public SheetBuilder SheetBuilder; public SheetBuilder SheetBuilder;
@@ -37,11 +37,14 @@ namespace OpenRA
LoadScreen = ObjectCreator.CreateObject<ILoadScreen>(Manifest.LoadScreen); LoadScreen = ObjectCreator.CreateObject<ILoadScreen>(Manifest.LoadScreen);
LoadScreen.Init(); LoadScreen.Init();
LoadScreen.Display(); LoadScreen.Display();
AvailableMaps = FindMaps( Manifest.Mods );
WidgetLoader = new WidgetLoader( this ); WidgetLoader = new WidgetLoader( this );
} }
public void ReloadMaps()
{
AvailableMaps = FindMaps( Manifest.Mods );
}
public void LoadInitialAssets() public void LoadInitialAssets()
{ {
// all this manipulation of static crap here is nasty and breaks // all this manipulation of static crap here is nasty and breaks
@@ -50,6 +53,7 @@ namespace OpenRA
foreach (var dir in Manifest.Folders) foreach (var dir in Manifest.Folders)
FileSystem.Mount(dir); FileSystem.Mount(dir);
ReloadMaps();
Palette = new HardwarePalette(); Palette = new HardwarePalette();
ChromeProvider.Initialize( Manifest.Chrome ); ChromeProvider.Initialize( Manifest.Chrome );
SheetBuilder = new SheetBuilder( TextureChannel.Red ); SheetBuilder = new SheetBuilder( TextureChannel.Red );

View File

@@ -13,12 +13,15 @@ using System.Linq;
using OpenRA.FileFormats; using OpenRA.FileFormats;
using OpenRA.Network; using OpenRA.Network;
using OpenRA.Widgets; using OpenRA.Widgets;
using System.IO;
namespace OpenRA.Mods.RA.Widgets.Delegates namespace OpenRA.Mods.RA.Widgets.Delegates
{ {
public class MapChooserDelegate : IWidgetDelegate public class MapChooserDelegate : IWidgetDelegate
{ {
MapStub Map = null; MapStub Map = null;
Widget scrollpanel;
Widget itemTemplate;
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
internal MapChooserDelegate( internal MapChooserDelegate(
@@ -31,7 +34,6 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
else else
Map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Value; Map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Value;
var ml = bg.GetWidget<ScrollPanelWidget>("MAP_LIST");
bg.GetWidget<MapPreviewWidget>("MAPCHOOSER_MAP_PREVIEW").Map = () => Map; bg.GetWidget<MapPreviewWidget>("MAPCHOOSER_MAP_PREVIEW").Map = () => Map;
bg.GetWidget<LabelWidget>("CURMAP_TITLE").GetText = () => Map.Title; bg.GetWidget<LabelWidget>("CURMAP_TITLE").GetText = () => Map.Title;
bg.GetWidget<LabelWidget>("CURMAP_AUTHOR").GetText = () => Map.Author; bg.GetWidget<LabelWidget>("CURMAP_AUTHOR").GetText = () => Map.Author;
@@ -41,20 +43,28 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
bg.GetWidget<LabelWidget>("CURMAP_THEATER").GetText = () => Rules.TileSets[Map.Tileset].Name; bg.GetWidget<LabelWidget>("CURMAP_THEATER").GetText = () => Rules.TileSets[Map.Tileset].Name;
bg.GetWidget<LabelWidget>("CURMAP_PLAYERS").GetText = () => Map.PlayerCount.ToString(); bg.GetWidget<LabelWidget>("CURMAP_PLAYERS").GetText = () => Map.PlayerCount.ToString();
bg.GetWidget("BUTTON_OK").OnMouseUp = mi => bg.GetWidget<ButtonWidget>("BUTTON_OK").OnMouseUp = mi =>
{ {
orderManager.IssueOrder(Order.Command("map " + Map.Uid)); orderManager.IssueOrder(Order.Command("map " + Map.Uid));
Widget.CloseWindow(); Widget.CloseWindow();
return true; return true;
}; };
bg.GetWidget("BUTTON_CANCEL").OnMouseUp = mi => bg.GetWidget<ButtonWidget>("BUTTON_CANCEL").OnMouseUp = mi =>
{ {
Widget.CloseWindow(); Widget.CloseWindow();
return true; return true;
}; };
var itemTemplate = ml.GetWidget<ContainerWidget>("MAP_TEMPLATE"); bg.GetWidget<ButtonWidget>("BUTTON_INSTALL").OnMouseUp = mi => InstallMap();
scrollpanel = bg.GetWidget<ScrollPanelWidget>("MAP_LIST");
itemTemplate = scrollpanel.GetWidget<ContainerWidget>("MAP_TEMPLATE");
EnumerateMaps();
}
void EnumerateMaps()
{
scrollpanel.RemoveChildren();
foreach (var kv in Game.modData.AvailableMaps.OrderBy(kv => kv.Value.Title).OrderBy(kv => kv.Value.PlayerCount)) foreach (var kv in Game.modData.AvailableMaps.OrderBy(kv => kv.Value.Title).OrderBy(kv => kv.Value.PlayerCount))
{ {
var map = kv.Value; var map = kv.Value;
@@ -69,8 +79,35 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
template.GetWidget<LabelWidget>("TITLE").GetText = () => map.Title; template.GetWidget<LabelWidget>("TITLE").GetText = () => map.Title;
template.GetWidget<LabelWidget>("PLAYERS").GetText = () => "{0}".F(map.PlayerCount); template.GetWidget<LabelWidget>("PLAYERS").GetText = () => "{0}".F(map.PlayerCount);
template.GetWidget<LabelWidget>("TYPE").GetText = () => map.Type; template.GetWidget<LabelWidget>("TYPE").GetText = () => map.Type;
ml.AddChild(template); scrollpanel.AddChild(template);
} }
} }
bool InstallMap()
{
Game.Utilities.PromptFilepathAsync("Select MAIN.MIX on the CD", path =>
{
if (!string.IsNullOrEmpty(path))
Game.RunAfterTick(() => InstallMapInner(path));
});
return true;
}
void InstallMapInner(string path)
{
var toPath = "{0}{1}maps{1}{2}{1}{3}"
.F(Game.SupportDir,Path.DirectorySeparatorChar,
Game.modData.Manifest.Mods[0],
Path.GetFileName(path));
// Create directory if required
var dir = Path.GetDirectoryName(toPath);
if (!Directory.Exists(dir))
Directory.CreateDirectory(dir);
File.Copy(path, toPath, true);
Game.modData.ReloadMaps();
EnumerateMaps();
}
} }
} }

View File

@@ -626,3 +626,11 @@ Background@MAP_CHOOSER:
Height:25 Height:25
Text:Cancel Text:Cancel
Bold:True Bold:True
Button@BUTTON_INSTALL:
Id:BUTTON_INSTALL
X:20
Y:PARENT_BOTTOM-49
Width:120
Height:25
Text:Install Map
Bold:True

View File

@@ -626,3 +626,11 @@ Background@MAP_CHOOSER:
Height:25 Height:25
Text:Cancel Text:Cancel
Bold:True Bold:True
Button@BUTTON_INSTALL:
Id:BUTTON_INSTALL
X:20
Y:PARENT_BOTTOM-49
Width:120
Height:25
Text:Install Map
Bold:True