"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

@@ -93,9 +93,6 @@ namespace OpenRA
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

@@ -7,6 +7,8 @@ namespace OpenRA.Widgets
class BackgroundWidget : Widget class BackgroundWidget : Widget
{ {
public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer) public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer)
{
if (Visible)
{ {
string collection = "dialog"; string collection = "dialog";
@@ -40,6 +42,7 @@ namespace OpenRA.Widgets
rgbaRenderer.Flush(); rgbaRenderer.Flush();
renderer.Device.DisableScissor(); 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)
@@ -28,6 +28,8 @@ namespace OpenRA.Widgets
} }
public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer) public override void Draw(SpriteRenderer rgbaRenderer, Renderer renderer)
{
if (Visible)
{ {
string collection = "dialog2"; string collection = "dialog2";
@@ -63,6 +65,7 @@ namespace OpenRA.Widgets
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.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(); 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)
{
if (Visible)
{ {
Rectangle r = Bounds; Rectangle r = Bounds;
renderer.Device.EnableScissor(r.Left, r.Top, r.Width, r.Height); 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);
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(); 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)
{ {
if (Visible)
foreach (var child in Children) foreach (var child in Children)
child.Draw(rgbaRenderer, renderer); 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,4 +1,6 @@
Background: Container:
Children:
Background@MAINMENU_BG:
Id:MAINMENU_BG Id:MAINMENU_BG
X:400 X:400
Y:200 Y:200
@@ -12,6 +14,7 @@ Background:
Width:160 Width:160
Height:25 Height:25
Text:OpenRA Main Menu Text:OpenRA Main Menu
Align:Center
Button@MAINMENU_BUTTON_JOIN: Button@MAINMENU_BUTTON_JOIN:
Id:MAINMENU_BUTTON_JOIN Id:MAINMENU_BUTTON_JOIN
X:445 X:445
@@ -27,7 +30,7 @@ Background:
Width:160 Width:160
Height:25 Height:25
Text:Create Game Text:Create Game
Action:CreateServerButtonAction Action:OpenCreateServerMenuButtonAction
Button@MAINMENU_BUTTON_QUIT: Button@MAINMENU_BUTTON_QUIT:
Id:MAINMENU_BUTTON_QUIT Id:MAINMENU_BUTTON_QUIT
X:445 X:445
@@ -36,3 +39,48 @@ Background:
Height:25 Height:25
Text:Quit Text:Quit
Action:QuitButtonAction 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