Fix diplomacy/cheats menu stacking

This commit is contained in:
Paul Chote
2011-05-22 19:32:25 +12:00
parent cd756885a6
commit 7a2b78b1d8
3 changed files with 33 additions and 6 deletions

View File

@@ -18,6 +18,7 @@
*/ */
#endregion #endregion
using System;
using OpenRA.Traits; using OpenRA.Traits;
using OpenRA.Widgets; using OpenRA.Widgets;
@@ -27,6 +28,7 @@ namespace OpenRA.Mods.Cnc.Widgets
{ {
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public CncCheatsLogic([ObjectCreator.Param] Widget widget, public CncCheatsLogic([ObjectCreator.Param] Widget widget,
[ObjectCreator.Param] Action onExit,
[ObjectCreator.Param] World world) [ObjectCreator.Param] World world)
{ {
var panel = widget.GetWidget("CHEATS_PANEL"); var panel = widget.GetWidget("CHEATS_PANEL");
@@ -67,7 +69,7 @@ namespace OpenRA.Mods.Cnc.Widgets
panel.GetWidget<ButtonWidget>("GIVE_EXPLORATION_BUTTON").OnClick = () => panel.GetWidget<ButtonWidget>("GIVE_EXPLORATION_BUTTON").OnClick = () =>
world.IssueOrder(new Order("DevGiveExploration", world.LocalPlayer.PlayerActor, false)); world.IssueOrder(new Order("DevGiveExploration", world.LocalPlayer.PlayerActor, false));
panel.GetWidget<ButtonWidget>("CLOSE_BUTTON").OnClick = Widget.CloseWindow; panel.GetWidget<ButtonWidget>("CLOSE_BUTTON").OnClick = () => { Widget.CloseWindow(); onExit(); };
} }
public void Order(World world, string order) public void Order(World world, string order)

View File

@@ -25,11 +25,12 @@ namespace OpenRA.Mods.Cnc.Widgets
[ObjectCreator.UseCtor] [ObjectCreator.UseCtor]
public CncDiplomacyLogic([ObjectCreator.Param] Widget widget, public CncDiplomacyLogic([ObjectCreator.Param] Widget widget,
[ObjectCreator.Param] World world) [ObjectCreator.Param] Action onExit,
[ObjectCreator.Param] World world)
{ {
this.world = world; this.world = world;
var panel = widget.GetWidget("DIPLOMACY_PANEL"); var panel = widget.GetWidget("DIPLOMACY_PANEL");
panel.GetWidget<ButtonWidget>("BACK_BUTTON").OnClick = Widget.CloseWindow; panel.GetWidget<ButtonWidget>("BACK_BUTTON").OnClick = () => { Widget.CloseWindow(); onExit(); };
var scrollpanel = panel.GetWidget<ScrollPanelWidget>("PLAYER_LIST"); var scrollpanel = panel.GetWidget<ScrollPanelWidget>("PLAYER_LIST");
var itemTemplate = scrollpanel.GetWidget("PLAYER_TEMPLATE"); var itemTemplate = scrollpanel.GetWidget("PLAYER_TEMPLATE");

View File

@@ -19,6 +19,9 @@ namespace OpenRA.Mods.Cnc.Widgets
{ {
public class CncIngameChromeLogic : IWidgetDelegate public class CncIngameChromeLogic : IWidgetDelegate
{ {
enum MenuType { None, Diplomacy, Cheats }
MenuType menu = MenuType.None;
static bool staticSetup; static bool staticSetup;
Widget ingameRoot; Widget ingameRoot;
@@ -61,10 +64,23 @@ namespace OpenRA.Mods.Cnc.Widgets
var diplomacyButton = ingameRoot.GetWidget<ButtonWidget>("DIPLOMACY_BUTTON"); var diplomacyButton = ingameRoot.GetWidget<ButtonWidget>("DIPLOMACY_BUTTON");
var diplomacyAvailable = world.players.Values.Any(a => a != world.LocalPlayer && !a.NonCombatant); var diplomacyAvailable = world.players.Values.Any(a => a != world.LocalPlayer && !a.NonCombatant);
diplomacyButton.IsDisabled = () => !diplomacyAvailable; diplomacyButton.IsDisabled = () => !diplomacyAvailable;
diplomacyButton.OnClick = () => Game.OpenWindow("DIPLOMACY_PANEL", new WidgetArgs()); diplomacyButton.OnClick = () =>
{
if (menu != MenuType.None)
Widget.CloseWindow();
menu = MenuType.Diplomacy;
Game.OpenWindow("DIPLOMACY_PANEL", new WidgetArgs() {{"onExit", () => menu = MenuType.None }});
};
ingameRoot.GetWidget<ButtonWidget>("OPTIONS_BUTTON").OnClick = () => ingameRoot.GetWidget<ButtonWidget>("OPTIONS_BUTTON").OnClick = () =>
{ {
if (menu != MenuType.None)
{
Widget.CloseWindow();
menu = MenuType.None;
}
ingameRoot.IsVisible = () => false; ingameRoot.IsVisible = () => false;
Game.LoadWidget(world, "INGAME_MENU", Widget.RootWidget, new WidgetArgs() Game.LoadWidget(world, "INGAME_MENU", Widget.RootWidget, new WidgetArgs()
{ {
@@ -73,7 +89,15 @@ namespace OpenRA.Mods.Cnc.Widgets
}; };
var cheatsButton = ingameRoot.GetWidget<ButtonWidget>("CHEATS_BUTTON"); var cheatsButton = ingameRoot.GetWidget<ButtonWidget>("CHEATS_BUTTON");
cheatsButton.OnClick = () => Game.OpenWindow("CHEATS_PANEL", new WidgetArgs()); cheatsButton.OnClick = () =>
{
if (menu != MenuType.None)
Widget.CloseWindow();
menu = MenuType.Diplomacy;
Game.OpenWindow("CHEATS_PANEL", new WidgetArgs() {{"onExit", () => menu = MenuType.None }});
};
cheatsButton.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats; cheatsButton.IsVisible = () => world.LobbyInfo.GlobalSettings.AllowCheats;
var postgameBG = ingameRoot.GetWidget("POSTGAME_BG"); var postgameBG = ingameRoot.GetWidget("POSTGAME_BG");