create widgets on demand
This commit is contained in:
@@ -279,6 +279,35 @@ namespace OpenRA
|
|||||||
|
|
||||||
JoinLocal();
|
JoinLocal();
|
||||||
StartGame(modData.Manifest.ShellmapUid);
|
StartGame(modData.Manifest.ShellmapUid);
|
||||||
|
|
||||||
|
Game.BeforeGameStart = () => Widget.OpenWindow("INGAME_ROOT");
|
||||||
|
|
||||||
|
Game.ConnectionStateChanged = () =>
|
||||||
|
{
|
||||||
|
Widget.CloseWindow();
|
||||||
|
switch( Game.orderManager.Connection.ConnectionState )
|
||||||
|
{
|
||||||
|
case ConnectionState.PreConnecting:
|
||||||
|
Widget.OpenWindow("MAINMENU_BG");
|
||||||
|
break;
|
||||||
|
case ConnectionState.Connecting:
|
||||||
|
Widget.OpenWindow("CONNECTING_BG");
|
||||||
|
break;
|
||||||
|
case ConnectionState.NotConnected:
|
||||||
|
Widget.OpenWindow("CONNECTION_FAILED_BG");
|
||||||
|
break;
|
||||||
|
case ConnectionState.Connected:
|
||||||
|
var lobby = Widget.OpenWindow("SERVER_LOBBY");
|
||||||
|
lobby.GetWidget<ChatDisplayWidget>("CHAT_DISPLAY").ClearChat();
|
||||||
|
lobby.GetWidget("CHANGEMAP_BUTTON").Visible = true;
|
||||||
|
lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true;
|
||||||
|
lobby.GetWidget("DISCONNECT_BUTTON").Visible = true;
|
||||||
|
//r.GetWidget("INGAME_ROOT").GetWidget<ChatDisplayWidget>("CHAT_DISPLAY").ClearChat();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Widget.OpenWindow("MAINMENU_BG");
|
||||||
|
|
||||||
ResetTimer();
|
ResetTimer();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ namespace OpenRA
|
|||||||
public readonly SheetBuilder SheetBuilder;
|
public readonly SheetBuilder SheetBuilder;
|
||||||
public readonly CursorSheetBuilder CursorSheetBuilder;
|
public readonly CursorSheetBuilder CursorSheetBuilder;
|
||||||
public readonly Dictionary<string, MapStub> AvailableMaps;
|
public readonly Dictionary<string, MapStub> AvailableMaps;
|
||||||
|
public readonly WidgetLoader WidgetLoader;
|
||||||
public ILoadScreen LoadScreen = null;
|
public ILoadScreen LoadScreen = null;
|
||||||
|
|
||||||
public ModData( params string[] mods )
|
public ModData( params string[] mods )
|
||||||
@@ -39,6 +40,7 @@ namespace OpenRA
|
|||||||
SheetBuilder = new SheetBuilder( TextureChannel.Red );
|
SheetBuilder = new SheetBuilder( TextureChannel.Red );
|
||||||
CursorSheetBuilder = new CursorSheetBuilder( this );
|
CursorSheetBuilder = new CursorSheetBuilder( this );
|
||||||
AvailableMaps = FindMaps( mods );
|
AvailableMaps = FindMaps( mods );
|
||||||
|
WidgetLoader = new WidgetLoader( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Do this nicer
|
// TODO: Do this nicer
|
||||||
|
|||||||
@@ -14,56 +14,37 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
{
|
{
|
||||||
public class ConnectionDialogsDelegate : IWidgetDelegate
|
public class ConnectionDialogsDelegate : IWidgetDelegate
|
||||||
{
|
{
|
||||||
public ConnectionDialogsDelegate()
|
[ObjectCreator.UseCtor]
|
||||||
|
public ConnectionDialogsDelegate( [ObjectCreator.Param( "widget" )] Widget widget )
|
||||||
{
|
{
|
||||||
var r = Widget.RootWidget;
|
widget.GetWidget("CONNECTION_BUTTON_ABORT").OnMouseUp = mi => {
|
||||||
r.GetWidget("CONNECTION_BUTTON_ABORT").OnMouseUp = mi => {
|
widget.GetWidget("CONNECTION_BUTTON_ABORT").Parent.Visible = false;
|
||||||
r.GetWidget("CONNECTION_BUTTON_ABORT").Parent.Visible = false;
|
|
||||||
Game.Disconnect();
|
Game.Disconnect();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
r.GetWidget("CONNECTION_BUTTON_CANCEL").OnMouseUp = mi => {
|
|
||||||
r.GetWidget("CONNECTION_BUTTON_CANCEL").Parent.Visible = false;
|
widget.GetWidget<LabelWidget>("CONNECTING_DESC").GetText = () =>
|
||||||
|
"Connecting to {0}:{1}...".F(Game.CurrentHost, Game.CurrentPort);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ConnectionFailedDelegate : IWidgetDelegate
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public ConnectionFailedDelegate( [ObjectCreator.Param( "widget" )] Widget widget )
|
||||||
|
{
|
||||||
|
widget.GetWidget("CONNECTION_BUTTON_CANCEL").OnMouseUp = mi => {
|
||||||
|
widget.GetWidget("CONNECTION_BUTTON_CANCEL").Parent.Visible = false;
|
||||||
Game.Disconnect();
|
Game.Disconnect();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
r.GetWidget("CONNECTION_BUTTON_RETRY").OnMouseUp = mi => {
|
widget.GetWidget("CONNECTION_BUTTON_RETRY").OnMouseUp = mi => {
|
||||||
Game.JoinServer(Game.CurrentHost, Game.CurrentPort);
|
Game.JoinServer(Game.CurrentHost, Game.CurrentPort);
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
r.GetWidget<LabelWidget>("CONNECTING_DESC").GetText = () =>
|
widget.GetWidget<LabelWidget>("CONNECTION_FAILED_DESC").GetText = () =>
|
||||||
"Connecting to {0}:{1}...".F(Game.CurrentHost, Game.CurrentPort);
|
|
||||||
|
|
||||||
r.GetWidget<LabelWidget>("CONNECTION_FAILED_DESC").GetText = () =>
|
|
||||||
"Could not connect to {0}:{1}".F(Game.CurrentHost, Game.CurrentPort);
|
"Could not connect to {0}:{1}".F(Game.CurrentHost, Game.CurrentPort);
|
||||||
|
|
||||||
Game.ConnectionStateChanged += () =>
|
|
||||||
{
|
|
||||||
Widget.CloseWindow();
|
|
||||||
switch( Game.orderManager.Connection.ConnectionState )
|
|
||||||
{
|
|
||||||
case ConnectionState.PreConnecting:
|
|
||||||
Widget.OpenWindow("MAINMENU_BG");
|
|
||||||
break;
|
|
||||||
case ConnectionState.Connecting:
|
|
||||||
Widget.OpenWindow("CONNECTING_BG");
|
|
||||||
break;
|
|
||||||
case ConnectionState.NotConnected:
|
|
||||||
Widget.OpenWindow("CONNECTION_FAILED_BG");
|
|
||||||
break;
|
|
||||||
case ConnectionState.Connected:
|
|
||||||
Widget.OpenWindow("SERVER_LOBBY");
|
|
||||||
|
|
||||||
var lobby = r.GetWidget("SERVER_LOBBY");
|
|
||||||
lobby.GetWidget<ChatDisplayWidget>("CHAT_DISPLAY").ClearChat();
|
|
||||||
lobby.GetWidget("CHANGEMAP_BUTTON").Visible = true;
|
|
||||||
lobby.GetWidget("LOCKTEAMS_CHECKBOX").Visible = true;
|
|
||||||
lobby.GetWidget("DISCONNECT_BUTTON").Visible = true;
|
|
||||||
r.GetWidget("INGAME_ROOT").GetWidget<ChatDisplayWidget>("CHAT_DISPLAY").ClearChat();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,25 +15,17 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
{
|
{
|
||||||
public class CreateServerMenuDelegate : IWidgetDelegate
|
public class CreateServerMenuDelegate : IWidgetDelegate
|
||||||
{
|
{
|
||||||
public CreateServerMenuDelegate()
|
[ObjectCreator.UseCtor]
|
||||||
|
public CreateServerMenuDelegate( [ObjectCreator.Param( "widget" )] Widget cs )
|
||||||
{
|
{
|
||||||
var settings = Game.Settings;
|
var settings = Game.Settings;
|
||||||
|
|
||||||
var r = Widget.RootWidget;
|
|
||||||
var cs = r.GetWidget("CREATESERVER_BG");
|
|
||||||
r.GetWidget("MAINMENU_BUTTON_CREATE").OnMouseUp = mi => {
|
|
||||||
Widget.OpenWindow("CREATESERVER_BG");
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
cs.GetWidget("BUTTON_CANCEL").OnMouseUp = mi => {
|
cs.GetWidget("BUTTON_CANCEL").OnMouseUp = mi => {
|
||||||
Widget.CloseWindow();
|
Widget.CloseWindow();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
cs.GetWidget("BUTTON_START").OnMouseUp = mi => {
|
cs.GetWidget("BUTTON_START").OnMouseUp = mi => {
|
||||||
Widget.OpenWindow("SERVER_LOBBY");
|
|
||||||
|
|
||||||
var map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Key;
|
var map = Game.modData.AvailableMaps.FirstOrDefault(m => m.Value.Selectable).Key;
|
||||||
|
|
||||||
settings.Server.Name = cs.GetWidget<TextFieldWidget>("GAME_TITLE").Text;
|
settings.Server.Name = cs.GetWidget<TextFieldWidget>("GAME_TITLE").Text;
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
public static Color CurrentColorPreview1;
|
public static Color CurrentColorPreview1;
|
||||||
public static Color CurrentColorPreview2;
|
public static Color CurrentColorPreview2;
|
||||||
|
|
||||||
public LobbyDelegate()
|
[ObjectCreator.UseCtor]
|
||||||
|
public LobbyDelegate( [ObjectCreator.Param( "widget" )] Widget lobby )
|
||||||
{
|
{
|
||||||
Game.LobbyInfoChanged += UpdateCurrentMap;
|
Game.LobbyInfoChanged += UpdateCurrentMap;
|
||||||
UpdateCurrentMap();
|
UpdateCurrentMap();
|
||||||
@@ -35,9 +36,7 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
CurrentColorPreview1 = Game.Settings.Player.Color1;
|
CurrentColorPreview1 = Game.Settings.Player.Color1;
|
||||||
CurrentColorPreview2 = Game.Settings.Player.Color2;
|
CurrentColorPreview2 = Game.Settings.Player.Color2;
|
||||||
|
|
||||||
var r = Widget.RootWidget;
|
Players = lobby.GetWidget("PLAYERS");
|
||||||
var lobby = r.GetWidget("SERVER_LOBBY");
|
|
||||||
Players = Widget.RootWidget.GetWidget("SERVER_LOBBY").GetWidget("PLAYERS");
|
|
||||||
LocalPlayerTemplate = Players.GetWidget("TEMPLATE_LOCAL");
|
LocalPlayerTemplate = Players.GetWidget("TEMPLATE_LOCAL");
|
||||||
RemotePlayerTemplate = Players.GetWidget("TEMPLATE_REMOTE");
|
RemotePlayerTemplate = Players.GetWidget("TEMPLATE_REMOTE");
|
||||||
EmptySlotTemplate = Players.GetWidget("TEMPLATE_EMPTY");
|
EmptySlotTemplate = Players.GetWidget("TEMPLATE_EMPTY");
|
||||||
@@ -74,8 +73,7 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
var mapButton = lobby.GetWidget("CHANGEMAP_BUTTON");
|
var mapButton = lobby.GetWidget("CHANGEMAP_BUTTON");
|
||||||
mapButton.OnMouseUp = mi =>
|
mapButton.OnMouseUp = mi =>
|
||||||
{
|
{
|
||||||
r.GetWidget("MAP_CHOOSER").SpecialOneArg(MapUid);
|
Widget.OpenWindow("MAP_CHOOSER").SpecialOneArg(MapUid); // WTF
|
||||||
Widget.OpenWindow("MAP_CHOOSER");
|
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -14,13 +14,17 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
{
|
{
|
||||||
public class MainMenuButtonsDelegate : IWidgetDelegate
|
public class MainMenuButtonsDelegate : IWidgetDelegate
|
||||||
{
|
{
|
||||||
public MainMenuButtonsDelegate()
|
[ObjectCreator.UseCtor]
|
||||||
|
public MainMenuButtonsDelegate( [ObjectCreator.Param( "widget" )] Widget widget )
|
||||||
{
|
{
|
||||||
// Main menu is the default window
|
// Main menu is the default window
|
||||||
Widget.WindowList.Push("MAINMENU_BG");
|
widget.GetWidget( "MAINMENU_BUTTON_JOIN" ).OnMouseUp = mi => { Widget.OpenWindow( "JOINSERVER_BG" ); return true; };
|
||||||
Widget.RootWidget.GetWidget("MAINMENU_BUTTON_QUIT").OnMouseUp = mi => { Game.Exit(); return true; };
|
widget.GetWidget( "MAINMENU_BUTTON_CREATE" ).OnMouseUp = mi => { Widget.OpenWindow( "CREATESERVER_BG" ); return true; };
|
||||||
|
widget.GetWidget( "MAINMENU_BUTTON_SETTINGS" ).OnMouseUp = mi => { Widget.OpenWindow( "SETTINGS_MENU" ); return true; };
|
||||||
|
widget.GetWidget( "MAINMENU_BUTTON_MUSIC" ).OnMouseUp = mi => { Widget.OpenWindow( "MUSIC_MENU" ); return true; };
|
||||||
|
widget.GetWidget( "MAINMENU_BUTTON_QUIT" ).OnMouseUp = mi => { Game.Exit(); return true; };
|
||||||
|
|
||||||
var version = Widget.RootWidget.GetWidget("MAINMENU_BG").GetWidget<LabelWidget>("VERSION_STRING");
|
var version = widget.GetWidget<LabelWidget>("VERSION_STRING");
|
||||||
|
|
||||||
if (FileSystem.Exists("VERSION"))
|
if (FileSystem.Exists("VERSION"))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,10 +17,10 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
public class MapChooserDelegate : IWidgetDelegate
|
public class MapChooserDelegate : IWidgetDelegate
|
||||||
{
|
{
|
||||||
MapStub Map = null;
|
MapStub Map = null;
|
||||||
public MapChooserDelegate()
|
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public MapChooserDelegate( [ObjectCreator.Param( "widget" )] Widget bg )
|
||||||
{
|
{
|
||||||
var r = Widget.RootWidget;
|
|
||||||
var bg = r.GetWidget("MAP_CHOOSER");
|
|
||||||
bg.SpecialOneArg = (map) => RefreshMapList(map);
|
bg.SpecialOneArg = (map) => RefreshMapList(map);
|
||||||
var ml = bg.GetWidget<ListBoxWidget>("MAP_LIST");
|
var ml = bg.GetWidget<ListBoxWidget>("MAP_LIST");
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,6 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
Widget.RootWidget.GetWidget("MAINMENU_BUTTON_MUSIC").OnMouseUp = mi => {
|
|
||||||
Widget.OpenWindow("MUSIC_MENU");
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
bg.GetWidget("BUTTON_PLAY").OnMouseUp = mi =>
|
bg.GetWidget("BUTTON_PLAY").OnMouseUp = mi =>
|
||||||
{
|
{
|
||||||
if (CurrentSong == null)
|
if (CurrentSong == null)
|
||||||
|
|||||||
@@ -23,29 +23,21 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
GameServer currentServer = null;
|
GameServer currentServer = null;
|
||||||
Widget ServerTemplate;
|
Widget ServerTemplate;
|
||||||
|
|
||||||
public ServerBrowserDelegate()
|
[ObjectCreator.UseCtor]
|
||||||
|
public ServerBrowserDelegate( [ObjectCreator.Param( "widget" )] Widget widget )
|
||||||
{
|
{
|
||||||
var r = Widget.RootWidget;
|
var bg = widget.GetWidget("JOINSERVER_BG");
|
||||||
var bg = r.GetWidget("JOINSERVER_BG");
|
|
||||||
var dc = r.GetWidget("DIRECTCONNECT_BG");
|
|
||||||
|
|
||||||
MasterServerQuery.OnComplete += games => RefreshServerList(games);
|
MasterServerQuery.OnComplete += games => RefreshServerList(games);
|
||||||
|
|
||||||
r.GetWidget("MAINMENU_BUTTON_JOIN").OnMouseUp = mi =>
|
widget.GetWidget("JOINSERVER_PROGRESS_TITLE").Visible = true;
|
||||||
{
|
widget.GetWidget<LabelWidget>("JOINSERVER_PROGRESS_TITLE").Text = "Fetching game list...";
|
||||||
Widget.OpenWindow("JOINSERVER_BG");
|
|
||||||
|
|
||||||
r.GetWidget("JOINSERVER_PROGRESS_TITLE").Visible = true;
|
|
||||||
r.GetWidget<LabelWidget>("JOINSERVER_PROGRESS_TITLE").Text = "Fetching game list...";
|
|
||||||
|
|
||||||
bg.Children.RemoveAll(a => GameButtons.Contains(a));
|
bg.Children.RemoveAll(a => GameButtons.Contains(a));
|
||||||
GameButtons.Clear();
|
GameButtons.Clear();
|
||||||
|
|
||||||
MasterServerQuery.Refresh(Game.Settings.Server.MasterServer);
|
MasterServerQuery.Refresh(Game.Settings.Server.MasterServer);
|
||||||
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
bg.GetWidget("SERVER_INFO").IsVisible = () => currentServer != null;
|
bg.GetWidget("SERVER_INFO").IsVisible = () => currentServer != null;
|
||||||
var preview = bg.GetWidget<MapPreviewWidget>("MAP_PREVIEW");
|
var preview = bg.GetWidget<MapPreviewWidget>("MAP_PREVIEW");
|
||||||
preview.Map = () => CurrentMap();
|
preview.Map = () => CurrentMap();
|
||||||
@@ -70,8 +62,8 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
|
|
||||||
bg.GetWidget("REFRESH_BUTTON").OnMouseUp = mi =>
|
bg.GetWidget("REFRESH_BUTTON").OnMouseUp = mi =>
|
||||||
{
|
{
|
||||||
r.GetWidget("JOINSERVER_PROGRESS_TITLE").Visible = true;
|
widget.GetWidget("JOINSERVER_PROGRESS_TITLE").Visible = true;
|
||||||
r.GetWidget<LabelWidget>("JOINSERVER_PROGRESS_TITLE").Text = "Fetching game list...";
|
widget.GetWidget<LabelWidget>("JOINSERVER_PROGRESS_TITLE").Text = "Fetching game list...";
|
||||||
|
|
||||||
bg.Children.RemoveAll(a => GameButtons.Contains(a));
|
bg.Children.RemoveAll(a => GameButtons.Contains(a));
|
||||||
GameButtons.Clear();
|
GameButtons.Clear();
|
||||||
@@ -90,8 +82,6 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
bg.GetWidget("DIRECTCONNECT_BUTTON").OnMouseUp = mi =>
|
bg.GetWidget("DIRECTCONNECT_BUTTON").OnMouseUp = mi =>
|
||||||
{
|
{
|
||||||
Widget.CloseWindow();
|
Widget.CloseWindow();
|
||||||
|
|
||||||
dc.GetWidget<TextFieldWidget>("SERVER_ADDRESS").Text = Game.Settings.Player.LastServer;
|
|
||||||
Widget.OpenWindow("DIRECTCONNECT_BG");
|
Widget.OpenWindow("DIRECTCONNECT_BG");
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
@@ -123,29 +113,6 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
Game.JoinServer(currentServer.Address.Split(':')[0], int.Parse(currentServer.Address.Split(':')[1]));
|
Game.JoinServer(currentServer.Address.Split(':')[0], int.Parse(currentServer.Address.Split(':')[1]));
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Direct Connect
|
|
||||||
dc.GetWidget("JOIN_BUTTON").OnMouseUp = mi =>
|
|
||||||
{
|
|
||||||
|
|
||||||
var address = dc.GetWidget<TextFieldWidget>("SERVER_ADDRESS").Text;
|
|
||||||
var cpts = address.Split(':').ToArray();
|
|
||||||
if (cpts.Length != 2)
|
|
||||||
return true;
|
|
||||||
|
|
||||||
Game.Settings.Player.LastServer = address;
|
|
||||||
Game.Settings.Save();
|
|
||||||
|
|
||||||
Widget.CloseWindow();
|
|
||||||
Game.JoinServer(cpts[0], int.Parse(cpts[1]));
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
dc.GetWidget("CANCEL_BUTTON").OnMouseUp = mi =>
|
|
||||||
{
|
|
||||||
Widget.CloseWindow();
|
|
||||||
return r.GetWidget("MAINMENU_BUTTON_JOIN").OnMouseUp(mi);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MapStub CurrentMap()
|
MapStub CurrentMap()
|
||||||
@@ -205,4 +172,37 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class DirectConnectDelegate : IWidgetDelegate
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public DirectConnectDelegate( [ObjectCreator.Param( "widget" )] Widget widget )
|
||||||
|
{
|
||||||
|
var dc = widget.GetWidget("DIRECTCONNECT_BG");
|
||||||
|
|
||||||
|
dc.GetWidget<TextFieldWidget>("SERVER_ADDRESS").Text = Game.Settings.Player.LastServer;
|
||||||
|
|
||||||
|
dc.GetWidget("JOIN_BUTTON").OnMouseUp = mi =>
|
||||||
|
{
|
||||||
|
|
||||||
|
var address = dc.GetWidget<TextFieldWidget>("SERVER_ADDRESS").Text;
|
||||||
|
var cpts = address.Split(':').ToArray();
|
||||||
|
if (cpts.Length != 2)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
Game.Settings.Player.LastServer = address;
|
||||||
|
Game.Settings.Save();
|
||||||
|
|
||||||
|
Widget.CloseWindow();
|
||||||
|
Game.JoinServer(cpts[0], int.Parse(cpts[1]));
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
dc.GetWidget("CANCEL_BUTTON").OnMouseUp = mi =>
|
||||||
|
{
|
||||||
|
Widget.CloseWindow();
|
||||||
|
return widget.GetWidget("MAINMENU_BUTTON_JOIN").OnMouseUp(mi);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -153,14 +153,6 @@ namespace OpenRA.Widgets.Delegates
|
|||||||
Widget.CloseWindow();
|
Widget.CloseWindow();
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Menu Buttons
|
|
||||||
Widget.RootWidget.GetWidget("MAINMENU_BUTTON_SETTINGS").OnMouseUp = mi => {
|
|
||||||
Widget.OpenWindow("SETTINGS_MENU");
|
|
||||||
return true;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
string open = null;
|
string open = null;
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ namespace OpenRA.Widgets
|
|||||||
public string Width = "0";
|
public string Width = "0";
|
||||||
public string Height = "0";
|
public string Height = "0";
|
||||||
public string Delegate = null;
|
public string Delegate = null;
|
||||||
|
public string EventHandler = null;
|
||||||
public bool ClickThrough = true;
|
public bool ClickThrough = true;
|
||||||
public bool Visible = true;
|
public bool Visible = true;
|
||||||
public readonly List<Widget> Children = new List<Widget>();
|
public readonly List<Widget> Children = new List<Widget>();
|
||||||
@@ -35,7 +36,7 @@ namespace OpenRA.Widgets
|
|||||||
public Widget Parent = null;
|
public Widget Parent = null;
|
||||||
|
|
||||||
static List<string> Delegates = new List<string>();
|
static List<string> Delegates = new List<string>();
|
||||||
public static Stack<string> WindowList = new Stack<string>();
|
public static Stack<Widget> WindowList = new Stack<Widget>();
|
||||||
|
|
||||||
// Common Funcs that most widgets will want
|
// Common Funcs that most widgets will want
|
||||||
public Action<object> SpecialOneArg = (arg) => {};
|
public Action<object> SpecialOneArg = (arg) => {};
|
||||||
@@ -48,23 +49,12 @@ namespace OpenRA.Widgets
|
|||||||
|
|
||||||
public Widget() { IsVisible = () => Visible; }
|
public Widget() { IsVisible = () => Visible; }
|
||||||
|
|
||||||
public static Widget RootWidget {
|
public static Widget RootWidget
|
||||||
get
|
|
||||||
{
|
{
|
||||||
if (rootWidget == null)
|
get { return rootWidget; }
|
||||||
{
|
set { rootWidget = value; }
|
||||||
rootWidget = new ContainerWidget();
|
|
||||||
foreach( var file in Game.modData.Manifest.ChromeLayout.Select( a => MiniYaml.FromFile( a ) ) )
|
|
||||||
foreach( var w in file )
|
|
||||||
rootWidget.AddChild( WidgetLoader.LoadWidget( w ) );
|
|
||||||
|
|
||||||
rootWidget.Initialize();
|
|
||||||
rootWidget.InitDelegates();
|
|
||||||
}
|
}
|
||||||
return rootWidget;
|
private static Widget rootWidget = new ContainerWidget();
|
||||||
}
|
|
||||||
}
|
|
||||||
private static Widget rootWidget = null;
|
|
||||||
|
|
||||||
public Widget(Widget widget)
|
public Widget(Widget widget)
|
||||||
{
|
{
|
||||||
@@ -132,14 +122,15 @@ namespace OpenRA.Widgets
|
|||||||
Evaluator.Evaluate(Y, substitutions),
|
Evaluator.Evaluate(Y, substitutions),
|
||||||
width,
|
width,
|
||||||
height);
|
height);
|
||||||
|
}
|
||||||
|
|
||||||
// Non-static func definitions
|
public void PostInit()
|
||||||
|
{
|
||||||
if (Delegate != null && !Delegates.Contains(Delegate))
|
if( Delegate != null )
|
||||||
Delegates.Add(Delegate);
|
{
|
||||||
|
var createDict = new Dictionary<string, object> { { "widget", this } };
|
||||||
foreach (var child in Children)
|
Game.modData.ObjectCreator.CreateObject<IWidgetDelegate>( Delegate, createDict );
|
||||||
child.Initialize();
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void InitDelegates()
|
public void InitDelegates()
|
||||||
@@ -324,18 +315,17 @@ namespace OpenRA.Widgets
|
|||||||
|
|
||||||
public static void CloseWindow()
|
public static void CloseWindow()
|
||||||
{
|
{
|
||||||
RootWidget.GetWidget(WindowList.Pop()).Visible = false;
|
RootWidget.Children.Remove( WindowList.Pop() );
|
||||||
if (WindowList.Count > 0)
|
if( WindowList.Count > 0 )
|
||||||
RootWidget.GetWidget(WindowList.Peek()).Visible = true;
|
rootWidget.Children.Add( WindowList.Peek() );
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Widget OpenWindow(string id)
|
public static Widget OpenWindow(string id)
|
||||||
{
|
{
|
||||||
if (WindowList.Count > 0)
|
var window = Game.modData.WidgetLoader.LoadWidget( rootWidget, id );
|
||||||
RootWidget.GetWidget(WindowList.Peek()).Visible = false;
|
if( WindowList.Count > 0 )
|
||||||
WindowList.Push(id);
|
rootWidget.Children.Remove( WindowList.Peek() );
|
||||||
var window = RootWidget.GetWidget(id);
|
WindowList.Push( window );
|
||||||
window.Visible = true;
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,29 +8,57 @@
|
|||||||
*/
|
*/
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using System.Linq;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using OpenRA.FileFormats;
|
using OpenRA.FileFormats;
|
||||||
using OpenRA.Widgets;
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
namespace OpenRA
|
namespace OpenRA
|
||||||
{
|
{
|
||||||
class WidgetLoader
|
public class WidgetLoader
|
||||||
{
|
{
|
||||||
public static Widget LoadWidget(MiniYamlNode node)
|
// foreach( var file in Game.modData.Manifest.ChromeLayout.Select( a => MiniYaml.FromFile( a ) ) )
|
||||||
|
// foreach( var w in file )
|
||||||
|
// rootWidget.AddChild( WidgetLoader.LoadWidget( w ) );
|
||||||
|
|
||||||
|
// rootWidget.Initialize();
|
||||||
|
// rootWidget.InitDelegates();
|
||||||
|
|
||||||
|
Dictionary<string, MiniYamlNode> widgets = new Dictionary<string, MiniYamlNode>();
|
||||||
|
|
||||||
|
public WidgetLoader( ModData modData )
|
||||||
|
{
|
||||||
|
foreach( var file in modData.Manifest.ChromeLayout.Select( a => MiniYaml.FromFile( a ) ) )
|
||||||
|
foreach( var w in file )
|
||||||
|
widgets.Add( w.Key.Substring( w.Key.IndexOf( '@' ) + 1 ), w );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Widget LoadWidget( Widget parent, string w )
|
||||||
|
{
|
||||||
|
return LoadWidget( parent, widgets[ w ] );
|
||||||
|
}
|
||||||
|
|
||||||
|
public Widget LoadWidget( Widget parent, MiniYamlNode node)
|
||||||
{
|
{
|
||||||
var widget = NewWidget(node.Key);
|
var widget = NewWidget(node.Key);
|
||||||
|
parent.AddChild( widget );
|
||||||
|
|
||||||
|
foreach (var child in node.Value.Nodes)
|
||||||
|
if (child.Key != "Children")
|
||||||
|
FieldLoader.LoadField(widget, child.Key, child.Value.Value);
|
||||||
|
|
||||||
|
widget.Initialize();
|
||||||
|
|
||||||
foreach (var child in node.Value.Nodes)
|
foreach (var child in node.Value.Nodes)
|
||||||
{
|
|
||||||
if (child.Key == "Children")
|
if (child.Key == "Children")
|
||||||
foreach (var c in child.Value.Nodes)
|
foreach (var c in child.Value.Nodes)
|
||||||
widget.AddChild(LoadWidget(c));
|
LoadWidget( widget, c);
|
||||||
else
|
|
||||||
FieldLoader.LoadField(widget, child.Key, child.Value.Value);
|
widget.PostInit();
|
||||||
}
|
|
||||||
return widget;
|
return widget;
|
||||||
}
|
}
|
||||||
|
|
||||||
static Widget NewWidget(string widgetType)
|
Widget NewWidget(string widgetType)
|
||||||
{
|
{
|
||||||
widgetType = widgetType.Split('@')[0];
|
widgetType = widgetType.Split('@')[0];
|
||||||
return Game.CreateObject<Widget>(widgetType + "Widget");
|
return Game.CreateObject<Widget>(widgetType + "Widget");
|
||||||
|
|||||||
@@ -21,9 +21,6 @@ namespace OpenRA.Mods.RA.Widgets.Delegates
|
|||||||
var gameRoot = r.GetWidget("INGAME_ROOT");
|
var gameRoot = r.GetWidget("INGAME_ROOT");
|
||||||
var optionsBG = gameRoot.GetWidget("INGAME_OPTIONS_BG");
|
var optionsBG = gameRoot.GetWidget("INGAME_OPTIONS_BG");
|
||||||
|
|
||||||
Game.BeforeGameStart += () => Widget.OpenWindow("INGAME_ROOT");
|
|
||||||
Game.AfterGameStart += () => gameRoot.GetWidget<RadarBinWidget>("INGAME_RADAR_BIN").SetWorld(Game.world);
|
|
||||||
|
|
||||||
r.GetWidget("INGAME_OPTIONS_BUTTON").OnMouseUp = mi => {
|
r.GetWidget("INGAME_OPTIONS_BUTTON").OnMouseUp = mi => {
|
||||||
optionsBG.Visible = !optionsBG.Visible;
|
optionsBG.Visible = !optionsBG.Visible;
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -163,6 +163,9 @@ namespace OpenRA.Mods.RA.Widgets
|
|||||||
int updateTicks = 0;
|
int updateTicks = 0;
|
||||||
public override void Tick(World w)
|
public override void Tick(World w)
|
||||||
{
|
{
|
||||||
|
if( world != w )
|
||||||
|
SetWorld( w );
|
||||||
|
|
||||||
var hasRadarNew = world.Queries.OwnedBy[world.LocalPlayer]
|
var hasRadarNew = world.Queries.OwnedBy[world.LocalPlayer]
|
||||||
.WithTrait<ProvidesRadar>()
|
.WithTrait<ProvidesRadar>()
|
||||||
.Any(a => a.Trait.IsActive);
|
.Any(a => a.Trait.IsActive);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Background@SERVER_LOBBY:
|
|||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:800
|
Width:800
|
||||||
Height:600
|
Height:600
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
Label@LOBBY_TITLE:
|
Label@LOBBY_TITLE:
|
||||||
X:0
|
X:0
|
||||||
@@ -396,7 +396,7 @@ Background@MAP_CHOOSER:
|
|||||||
Delegate:MapChooserDelegate
|
Delegate:MapChooserDelegate
|
||||||
Width:800
|
Width:800
|
||||||
Height:600
|
Height:600
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
Label@MAPCHOOSER_TITLE:
|
Label@MAPCHOOSER_TITLE:
|
||||||
X:0
|
X:0
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Container@INGAME_ROOT:
|
Container@INGAME_ROOT:
|
||||||
Id:INGAME_ROOT
|
Id:INGAME_ROOT
|
||||||
Delegate:IngameChromeDelegate
|
Delegate:IngameChromeDelegate
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
WorldInteractionController:
|
WorldInteractionController:
|
||||||
X:0
|
X:0
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ Background@MUSIC_MENU:
|
|||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width: 450
|
Width: 450
|
||||||
Height: 250
|
Height: 250
|
||||||
Visible: false
|
Visible: true
|
||||||
Children:
|
Children:
|
||||||
Label@SETTINGS_LABEL_TITLE:
|
Label@SETTINGS_LABEL_TITLE:
|
||||||
Id:SETTINGS_LABEL_TITLE
|
Id:SETTINGS_LABEL_TITLE
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Background@CREATESERVER_BG:
|
|||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:400
|
Width:400
|
||||||
Height:240
|
Height:240
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
Label@LABEL_TITLE:
|
Label@LABEL_TITLE:
|
||||||
Id:LABEL_TITLE
|
Id:LABEL_TITLE
|
||||||
@@ -100,7 +100,7 @@ Background@JOINSERVER_BG:
|
|||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:700
|
Width:700
|
||||||
Height:410
|
Height:410
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
Label@JOINSERVER_LABEL_TITLE:
|
Label@JOINSERVER_LABEL_TITLE:
|
||||||
Id:JOINSERVER_LABEL_TITLE
|
Id:JOINSERVER_LABEL_TITLE
|
||||||
@@ -252,7 +252,7 @@ Background@DIRECTCONNECT_BG:
|
|||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:400
|
Width:400
|
||||||
Height:155
|
Height:155
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
Label@DIRECTCONNECT_LABEL_TITLE:
|
Label@DIRECTCONNECT_LABEL_TITLE:
|
||||||
Id:DIRECTCONNECT_LABEL_TITLE
|
Id:DIRECTCONNECT_LABEL_TITLE
|
||||||
@@ -296,12 +296,12 @@ Background@DIRECTCONNECT_BG:
|
|||||||
Bold:True
|
Bold:True
|
||||||
Background@CONNECTION_FAILED_BG:
|
Background@CONNECTION_FAILED_BG:
|
||||||
Id:CONNECTION_FAILED_BG
|
Id:CONNECTION_FAILED_BG
|
||||||
Delegate:ConnectionDialogsDelegate
|
Delegate:ConnectionFailedDelegate
|
||||||
X:(WINDOW_RIGHT - WIDTH)/2
|
X:(WINDOW_RIGHT - WIDTH)/2
|
||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:450
|
Width:450
|
||||||
Height:150
|
Height:150
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
Label@CONNECTION_FAILED_TITLE:
|
Label@CONNECTION_FAILED_TITLE:
|
||||||
Id:CONNECTION_FAILED_TITLE
|
Id:CONNECTION_FAILED_TITLE
|
||||||
@@ -343,7 +343,7 @@ Background@CONNECTING_BG:
|
|||||||
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
Y:(WINDOW_BOTTOM - HEIGHT)/2
|
||||||
Width:450
|
Width:450
|
||||||
Height:150
|
Height:150
|
||||||
Visible:false
|
Visible:true
|
||||||
Children:
|
Children:
|
||||||
Label@CONNECTING_TITLE:
|
Label@CONNECTING_TITLE:
|
||||||
Id:CONNECTING_TITLE
|
Id:CONNECTING_TITLE
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Background@SETTINGS_MENU:
|
|||||||
Y:(WINDOW_BOTTOM- HEIGHT)/2
|
Y:(WINDOW_BOTTOM- HEIGHT)/2
|
||||||
Width: 450
|
Width: 450
|
||||||
Height: 350
|
Height: 350
|
||||||
Visible: false
|
Visible: true
|
||||||
Children:
|
Children:
|
||||||
Label@SETTINGS_LABEL_TITLE:
|
Label@SETTINGS_LABEL_TITLE:
|
||||||
Id:SETTINGS_LABEL_TITLE
|
Id:SETTINGS_LABEL_TITLE
|
||||||
|
|||||||
Reference in New Issue
Block a user