"Create Server" submenu

This commit is contained in:
Paul Chote
2010-03-14 23:26:34 +13:00
parent ddf331cfed
commit ef306cbcd5
8 changed files with 217 additions and 116 deletions

View File

@@ -92,10 +92,7 @@ namespace OpenRA
Sheet mapChooserSheet; Sheet mapChooserSheet;
Sprite mapChooserSprite; Sprite mapChooserSprite;
int mapOffset = 0; int mapOffset = 0;
Widget rootWidget;
public Chrome(Renderer r) public Chrome(Renderer r)
{ {
this.renderer = r; this.renderer = r;
@@ -136,7 +133,7 @@ namespace OpenRA
var widgetYaml = MiniYaml.FromFile("mods/cnc/menus.yaml"); var widgetYaml = MiniYaml.FromFile("mods/cnc/menus.yaml");
// Hack around a bug in MiniYaml // Hack around a bug in MiniYaml
widgetYaml.Values.FirstOrDefault().Value = widgetYaml.Keys.FirstOrDefault(); widgetYaml.Values.FirstOrDefault().Value = widgetYaml.Keys.FirstOrDefault();
rootWidget = WidgetLoader.LoadWidget(widgetYaml.Values.FirstOrDefault()); WidgetLoader.rootWidget = WidgetLoader.LoadWidget(widgetYaml.Values.FirstOrDefault());
} }
List<string> visibleTabs = new List<string>(); List<string> visibleTabs = new List<string>();
@@ -427,7 +424,7 @@ namespace OpenRA
public void DrawMainMenu( World world ) public void DrawMainMenu( World world )
{ {
rootWidget.Draw(rgbaRenderer,renderer); WidgetLoader.rootWidget.Draw(rgbaRenderer,renderer);
} }
public void DrawLobby( World world ) public void DrawLobby( World world )
@@ -1051,7 +1048,7 @@ namespace OpenRA
int2 lastMousePos; int2 lastMousePos;
public bool HandleInput(World world, MouseInput mi) public bool HandleInput(World world, MouseInput mi)
{ {
if (rootWidget.HandleInput(mi)) if (WidgetLoader.rootWidget.HandleInput(mi))
return true; return true;
if (mi.Event == MouseInputEvent.Move) if (mi.Event == MouseInputEvent.Move)

View File

@@ -8,39 +8,42 @@ namespace OpenRA.Widgets
{ {
public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer) public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer)
{ {
string collection = "dialog"; if (Visible)
Rectangle r = Bounds;
renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height);
string[] images = { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background" };
var ss = Graphics.Util.MakeArray(9, n => ChromeProvider.GetImage(renderer, collection,images[n]));
for( var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[8].size.X )
for( var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[8].size.Y )
rgbaRenderer.DrawSprite(ss[8], new float2(x, y), "chrome");
//draw borders
for (var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[2].size.Y)
{ {
rgbaRenderer.DrawSprite(ss[2], new float2(r.Left, y), "chrome"); string collection = "dialog";
rgbaRenderer.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), "chrome");
Rectangle r = Bounds;
renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height);
string[] images = { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background" };
var ss = Graphics.Util.MakeArray(9, n => ChromeProvider.GetImage(renderer, collection,images[n]));
for( var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[8].size.X )
for( var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[8].size.Y )
rgbaRenderer.DrawSprite(ss[8], new float2(x, y), "chrome");
//draw borders
for (var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[2].size.Y)
{
rgbaRenderer.DrawSprite(ss[2], new float2(r.Left, y), "chrome");
rgbaRenderer.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), "chrome");
}
for (var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[0].size.X)
{
rgbaRenderer.DrawSprite(ss[0], new float2(x, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), "chrome");
}
rgbaRenderer.DrawSprite(ss[4], new float2(r.Left, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), "chrome");
rgbaRenderer.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), "chrome");
rgbaRenderer.Flush();
renderer.Device.DisableScissor();
} }
for (var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[0].size.X)
{
rgbaRenderer.DrawSprite(ss[0], new float2(x, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), "chrome");
}
rgbaRenderer.DrawSprite(ss[4], new float2(r.Left, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), "chrome");
rgbaRenderer.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), "chrome");
rgbaRenderer.Flush();
renderer.Device.DisableScissor();
base.Draw(rgbaRenderer,renderer); base.Draw(rgbaRenderer,renderer);
} }
} }

View File

@@ -8,7 +8,7 @@ namespace OpenRA.Widgets
{ {
class ButtonWidget : Widget class ButtonWidget : Widget
{ {
public readonly string Text = null; public readonly string Text = "";
public readonly string Action = null; public readonly string Action = null;
public override bool HandleInput(MouseInput mi) public override bool HandleInput(MouseInput mi)
@@ -29,41 +29,44 @@ namespace OpenRA.Widgets
public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer) public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer)
{ {
string collection = "dialog2"; if (Visible)
Rectangle r = Bounds;
renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height);
string[] images = { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background" };
var ss = Graphics.Util.MakeArray(9, n => ChromeProvider.GetImage(renderer, collection,images[n]));
for( var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[8].size.X )
for( var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[8].size.Y )
rgbaRenderer.DrawSprite(ss[8], new float2(x, y), "chrome");
//draw borders
for (var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[2].size.Y)
{ {
rgbaRenderer.DrawSprite(ss[2], new float2(r.Left, y), "chrome"); string collection = "dialog2";
rgbaRenderer.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), "chrome");
Rectangle r = Bounds;
renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height);
string[] images = { "border-t", "border-b", "border-l", "border-r", "corner-tl", "corner-tr", "corner-bl", "corner-br", "background" };
var ss = Graphics.Util.MakeArray(9, n => ChromeProvider.GetImage(renderer, collection,images[n]));
for( var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[8].size.X )
for( var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[8].size.Y )
rgbaRenderer.DrawSprite(ss[8], new float2(x, y), "chrome");
//draw borders
for (var y = r.Top + (int)ss[0].size.Y; y < r.Bottom - (int)ss[1].size.Y; y += (int)ss[2].size.Y)
{
rgbaRenderer.DrawSprite(ss[2], new float2(r.Left, y), "chrome");
rgbaRenderer.DrawSprite(ss[3], new float2(r.Right - ss[3].size.X, y), "chrome");
}
for (var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[0].size.X)
{
rgbaRenderer.DrawSprite(ss[0], new float2(x, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), "chrome");
}
rgbaRenderer.DrawSprite(ss[4], new float2(r.Left, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), "chrome");
rgbaRenderer.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), "chrome");
rgbaRenderer.Flush();
renderer.BoldFont.DrawText(rgbaRenderer, Text, new int2(X+Width/2, Y+Height/2) - new int2(renderer.BoldFont.Measure(Text).X / 2, renderer.BoldFont.Measure(Text).Y/2), Color.White);
renderer.Device.DisableScissor();
} }
for (var x = r.Left + (int)ss[2].size.X; x < r.Right - (int)ss[3].size.X; x += (int)ss[0].size.X)
{
rgbaRenderer.DrawSprite(ss[0], new float2(x, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[1], new float2(x, r.Bottom - ss[1].size.Y), "chrome");
}
rgbaRenderer.DrawSprite(ss[4], new float2(r.Left, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[5], new float2(r.Right - ss[5].size.X, r.Top), "chrome");
rgbaRenderer.DrawSprite(ss[6], new float2(r.Left, r.Bottom - ss[6].size.Y), "chrome");
rgbaRenderer.DrawSprite(ss[7], new float2(r.Right - ss[7].size.X, r.Bottom - ss[7].size.Y), "chrome");
rgbaRenderer.Flush();
renderer.BoldFont.DrawText(rgbaRenderer, Text, new int2(X+Width/2, Y+Height/2) - new int2(renderer.BoldFont.Measure(Text).X / 2, renderer.BoldFont.Measure(Text).Y/2), Color.White);
renderer.Device.DisableScissor();
base.Draw(rgbaRenderer,renderer); base.Draw(rgbaRenderer,renderer);
} }
} }

View File

@@ -7,13 +7,25 @@ namespace OpenRA.Widgets
class LabelWidget : Widget class LabelWidget : Widget
{ {
public readonly string Text = null; public readonly string Text = null;
public readonly string Align = "Left";
public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer) public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer)
{ {
Rectangle r = Bounds; if (Visible)
renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height); {
renderer.BoldFont.DrawText(rgbaRenderer, Text, new int2(X+Width/2, Y+Height/2) - new int2(renderer.BoldFont.Measure(Text).X / 2, renderer.BoldFont.Measure(Text).Y/2), Color.White); Rectangle r = Bounds;
renderer.Device.DisableScissor(); renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height);
int2 bounds = renderer.BoldFont.Measure(Text);
int2 position = new int2(X,Y);
if (Align == "Center")
position = new int2(X+Width/2, Y+Height/2) - new int2(bounds.X / 2, bounds.Y/2);
renderer.BoldFont.DrawText(rgbaRenderer, Text, position, Color.White);
renderer.Device.DisableScissor();
}
base.Draw(rgbaRenderer,renderer); base.Draw(rgbaRenderer,renderer);
} }
} }

View File

@@ -12,7 +12,7 @@ namespace OpenRA.Widgets
public readonly int Y = 0; public readonly int Y = 0;
public readonly int Width = 0; public readonly int Width = 0;
public readonly int Height = 0; public readonly int Height = 0;
public bool Visible = true;
public readonly List<Widget> Children = new List<Widget>(); public readonly List<Widget> Children = new List<Widget>();
public Rectangle Bounds public Rectangle Bounds
{ {
@@ -32,12 +32,16 @@ namespace OpenRA.Widgets
public virtual void Draw(SpriteRenderer rgbaRenderer, Renderer renderer) public virtual void Draw(SpriteRenderer rgbaRenderer, Renderer renderer)
{ {
foreach (var child in Children) if (Visible)
child.Draw(rgbaRenderer, renderer); foreach (var child in Children)
child.Draw(rgbaRenderer, renderer);
} }
public virtual bool HandleInput(MouseInput mi) public virtual bool HandleInput(MouseInput mi)
{ {
if (!Visible)
return false;
bool caught = false; bool caught = false;
if (ClickRect.Contains(mi.Location.X,mi.Location.Y)) if (ClickRect.Contains(mi.Location.X,mi.Location.Y))
{ {
@@ -56,6 +60,19 @@ namespace OpenRA.Widgets
{ {
Children.Add( child ); Children.Add( child );
} }
public Widget GetWidget(string id)
{
if (this.Id == id)
return this;
foreach (var child in Children)
if (child.GetWidget(id) != null)
return child;
return null;
}
} }
class ContainerWidget : Widget { } class ContainerWidget : Widget { }
} }

View File

@@ -25,7 +25,27 @@ namespace OpenRA.Widgets.Actions
} }
} }
public class CreateServerButtonAction : IWidgetAction public class OpenCreateServerMenuButtonAction : IWidgetAction
{
public bool OnClick(MouseInput mi)
{
WidgetLoader.rootWidget.GetWidget("MAINMENU_BG").Visible = false;
WidgetLoader.rootWidget.GetWidget("CREATESERVER_BG").Visible = true;
return true;
}
}
public class CloseCreateServerMenuButtonAction : IWidgetAction
{
public bool OnClick(MouseInput mi)
{
WidgetLoader.rootWidget.GetWidget("MAINMENU_BG").Visible = true;
WidgetLoader.rootWidget.GetWidget("CREATESERVER_BG").Visible = false;
return true;
}
}
public class CreateServerMenuButtonAction : IWidgetAction
{ {
public bool OnClick(MouseInput mi) public bool OnClick(MouseInput mi)
{ {

View File

@@ -37,6 +37,7 @@ namespace OpenRA
WidgetActionAssemblies = asms.ToArray(); WidgetActionAssemblies = asms.ToArray();
} }
public static Widget rootWidget;
public static Widget LoadWidget( MiniYaml node ) public static Widget LoadWidget( MiniYaml node )
{ {
var widget = NewWidget( node.Value ); var widget = NewWidget( node.Value );

View File

@@ -1,38 +1,86 @@
Background: Container:
Id:MAINMENU_BG
X:400
Y:200
Width:250
Height:200
Children: Children:
Label@MAINMENU_LABEL_TITLE: Background@MAINMENU_BG:
Id:MAINMENU_LABEL_TITLE Id:MAINMENU_BG
X:445 X:400
Y:220 Y:200
Width:160 Width:250
Height:25 Height:200
Text:OpenRA Main Menu Children:
Button@MAINMENU_BUTTON_JOIN: Label@MAINMENU_LABEL_TITLE:
Id:MAINMENU_BUTTON_JOIN Id:MAINMENU_LABEL_TITLE
X:445 X:445
Y:270 Y:220
Width:160 Width:160
Height:25 Height:25
Text:Join Game Text:OpenRA Main Menu
Action:JoinServerButtonAction Align:Center
Button@MAINMENU_BUTTON_CREATE: Button@MAINMENU_BUTTON_JOIN:
Id:MAINMENU_BUTTON_CREATE Id:MAINMENU_BUTTON_JOIN
X:445 X:445
Y:305 Y:270
Width:160 Width:160
Height:25 Height:25
Text:Create Game Text:Join Game
Action:CreateServerButtonAction Action:JoinServerButtonAction
Button@MAINMENU_BUTTON_QUIT: Button@MAINMENU_BUTTON_CREATE:
Id:MAINMENU_BUTTON_QUIT Id:MAINMENU_BUTTON_CREATE
X:445 X:445
Y:340 Y:305
Width:160 Width:160
Height:25 Height:25
Text:Quit Text:Create Game
Action:QuitButtonAction Action:OpenCreateServerMenuButtonAction
Button@MAINMENU_BUTTON_QUIT:
Id:MAINMENU_BUTTON_QUIT
X:445
Y:340
Width:160
Height:25
Text:Quit
Action:QuitButtonAction
Background@CREATESERVER_BG:
Id:CREATESERVER_BG
X:300
Y:200
Width:450
Height:145
Visible:false
Children:
Label@CREATESERVER_LABEL_TITLE:
Id:CREATESERVER_LABEL_TITLE
X:445
Y:220
Width:160
Height:25
Text:Create Server
Align:Center
Button@CREATESERVER_CHECKBOX_HIDDEN:
Id:CREATESERVER_CHECKBOX_HIDDEN
X:400
Y:260
Width:20
Height:20
Label@CREATESERVER_LABEL_HIDDENGAME:
Id:CREATESERVER_LABEL_HIDDENGAME
X:435
Y:260
Width:300
Height:25
Text:Hide from Server Browser
Button@CREATESERVER_BUTTON_CANCEL:
Id:CREATESERVER_BUTTON_CANCEL
X:400
Y:300
Width:160
Height:25
Text:Cancel
Action:CloseCreateServerMenuButtonAction
Button@CREATESERVER_BUTTON_START:
Id:CREATESERVER_BUTTON_START
X:570
Y:300
Width:160
Height:25
Text:Create
Action:CreateServerMenuButtonAction