Split the last TD UI logic into reuseable chunks.
This commit is contained in:
@@ -77,7 +77,6 @@
|
|||||||
<Compile Include="SpawnViceroid.cs" />
|
<Compile Include="SpawnViceroid.cs" />
|
||||||
<Compile Include="TiberiumRefinery.cs" />
|
<Compile Include="TiberiumRefinery.cs" />
|
||||||
<Compile Include="Widgets\Logic\CncConquestObjectivesLogic.cs" />
|
<Compile Include="Widgets\Logic\CncConquestObjectivesLogic.cs" />
|
||||||
<Compile Include="Widgets\Logic\CncIngameChromeLogic.cs" />
|
|
||||||
<Compile Include="Widgets\Logic\CncIngameMenuLogic.cs" />
|
<Compile Include="Widgets\Logic\CncIngameMenuLogic.cs" />
|
||||||
<Compile Include="Widgets\Logic\CncMainMenuLogic.cs" />
|
<Compile Include="Widgets\Logic\CncMainMenuLogic.cs" />
|
||||||
<Compile Include="Widgets\Logic\SupportPowerTooltipLogic.cs" />
|
<Compile Include="Widgets\Logic\SupportPowerTooltipLogic.cs" />
|
||||||
|
|||||||
@@ -1,133 +0,0 @@
|
|||||||
#region Copyright & License Information
|
|
||||||
/*
|
|
||||||
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
|
||||||
* This file is part of OpenRA, which is free software. It is made
|
|
||||||
* available to you under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation. For more information,
|
|
||||||
* see COPYING.
|
|
||||||
*/
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
using System.Drawing;
|
|
||||||
using System.Linq;
|
|
||||||
using OpenRA.Mods.RA;
|
|
||||||
using OpenRA.Mods.RA.Buildings;
|
|
||||||
using OpenRA.Mods.RA.Widgets;
|
|
||||||
using OpenRA.Traits;
|
|
||||||
using OpenRA.Widgets;
|
|
||||||
|
|
||||||
namespace OpenRA.Mods.Cnc.Widgets.Logic
|
|
||||||
{
|
|
||||||
public class CncIngameChromeLogic
|
|
||||||
{
|
|
||||||
readonly Widget ingameRoot;
|
|
||||||
readonly World world;
|
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
|
||||||
public CncIngameChromeLogic(Widget widget, World world)
|
|
||||||
{
|
|
||||||
this.world = world;
|
|
||||||
ingameRoot = widget.Get("INGAME_ROOT");
|
|
||||||
var playerRoot = ingameRoot.Get("PLAYER_ROOT");
|
|
||||||
|
|
||||||
// Observer
|
|
||||||
if (world.LocalPlayer == null)
|
|
||||||
InitObserverWidgets(world, playerRoot);
|
|
||||||
else
|
|
||||||
InitPlayerWidgets(world, playerRoot);
|
|
||||||
|
|
||||||
Game.LoadWidget(world, "CHAT_PANEL", ingameRoot, new WidgetArgs());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OptionsClicked()
|
|
||||||
{
|
|
||||||
var cachedPause = world.PredictedPaused;
|
|
||||||
|
|
||||||
ingameRoot.IsVisible = () => false;
|
|
||||||
if (world.LobbyInfo.IsSinglePlayer)
|
|
||||||
world.SetPauseState(true);
|
|
||||||
|
|
||||||
Game.LoadWidget(world, "INGAME_MENU", Ui.Root, new WidgetArgs()
|
|
||||||
{
|
|
||||||
{ "onExit", () =>
|
|
||||||
{
|
|
||||||
ingameRoot.IsVisible = () => true;
|
|
||||||
if (world.LobbyInfo.IsSinglePlayer)
|
|
||||||
world.SetPauseState(cachedPause);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void InitObserverWidgets(World world, Widget playerRoot)
|
|
||||||
{
|
|
||||||
var observerWidgets = Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
|
|
||||||
observerWidgets.Get<ButtonWidget>("OPTIONS_BUTTON").OnClick = OptionsClicked;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void InitPlayerWidgets(World world, Widget playerRoot)
|
|
||||||
{
|
|
||||||
// Real player
|
|
||||||
var playerWidgets = Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
|
|
||||||
playerWidgets.IsVisible = () => true;
|
|
||||||
|
|
||||||
var sidebarRoot = playerWidgets.Get("SIDEBAR_BACKGROUND");
|
|
||||||
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
|
|
||||||
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
|
|
||||||
sidebarRoot.Get<LabelWidget>("CASH").GetText = () =>
|
|
||||||
"${0}".F(playerResources.DisplayCash + playerResources.DisplayResources);
|
|
||||||
|
|
||||||
playerWidgets.Get<ButtonWidget>("OPTIONS_BUTTON").OnClick = OptionsClicked;
|
|
||||||
|
|
||||||
var radarEnabled = false;
|
|
||||||
var cachedRadarEnabled = false;
|
|
||||||
sidebarRoot.Get<RadarWidget>("RADAR_MINIMAP").IsEnabled = () => radarEnabled;
|
|
||||||
|
|
||||||
var sidebarTicker = playerWidgets.Get<LogicTickerWidget>("SIDEBAR_TICKER");
|
|
||||||
sidebarTicker.OnTick = () =>
|
|
||||||
{
|
|
||||||
// Update radar bin
|
|
||||||
radarEnabled = world.ActorsWithTrait<ProvidesRadar>()
|
|
||||||
.Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive);
|
|
||||||
|
|
||||||
if (radarEnabled != cachedRadarEnabled)
|
|
||||||
Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);
|
|
||||||
cachedRadarEnabled = radarEnabled;
|
|
||||||
|
|
||||||
// Switch to observer mode after win/loss
|
|
||||||
if (world.LocalPlayer.WinState != WinState.Undefined)
|
|
||||||
Game.RunAfterTick(() =>
|
|
||||||
{
|
|
||||||
playerRoot.RemoveChildren();
|
|
||||||
InitObserverWidgets(world, playerRoot);
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var siloBar = playerWidgets.Get<ResourceBarWidget>("SILOBAR");
|
|
||||||
siloBar.GetProvided = () => playerResources.ResourceCapacity;
|
|
||||||
siloBar.GetUsed = () => playerResources.Resources;
|
|
||||||
siloBar.TooltipFormat = "Silo Usage: {0}/{1}";
|
|
||||||
siloBar.GetBarColor = () =>
|
|
||||||
{
|
|
||||||
if (playerResources.Resources == playerResources.ResourceCapacity)
|
|
||||||
return Color.Red;
|
|
||||||
if (playerResources.Resources >= 0.8 * playerResources.ResourceCapacity)
|
|
||||||
return Color.Orange;
|
|
||||||
return Color.LimeGreen;
|
|
||||||
};
|
|
||||||
|
|
||||||
var powerBar = playerWidgets.Get<ResourceBarWidget>("POWERBAR");
|
|
||||||
powerBar.GetProvided = () => powerManager.PowerProvided;
|
|
||||||
powerBar.GetUsed = () => powerManager.PowerDrained;
|
|
||||||
powerBar.TooltipFormat = "Power Usage: {0}/{1}";
|
|
||||||
powerBar.GetBarColor = () =>
|
|
||||||
{
|
|
||||||
if (powerManager.PowerState == PowerState.Critical)
|
|
||||||
return Color.Red;
|
|
||||||
if (powerManager.PowerState == PowerState.Low)
|
|
||||||
return Color.Orange;
|
|
||||||
return Color.LimeGreen;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -535,6 +535,13 @@
|
|||||||
<Compile Include="Widgets\ProductionTabsWidget.cs" />
|
<Compile Include="Widgets\ProductionTabsWidget.cs" />
|
||||||
<Compile Include="Widgets\ProductionTypeButtonWidget.cs" />
|
<Compile Include="Widgets\ProductionTypeButtonWidget.cs" />
|
||||||
<Compile Include="Widgets\Logic\ProductionTooltipLogic.cs" />
|
<Compile Include="Widgets\Logic\ProductionTooltipLogic.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\Ingame\IngameRadarDisplayLogic.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\Ingame\IngameCashCounterLogic.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\Ingame\IngamePowerCounterLogic.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\Ingame\IngamePowerBarLogic.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\Ingame\IngameSiloBarLogic.cs" />
|
||||||
|
<Compile Include="Widgets\Logic\Ingame\LoadIngamePlayerOrObserverUILogic.cs" />
|
||||||
|
<Compile Include="Widgets\MenuButtonWidget.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
|
<ProjectReference Include="..\OpenRA.Game\OpenRA.Game.csproj">
|
||||||
@@ -579,4 +586,7 @@ cd "$(SolutionDir)thirdparty/"
|
|||||||
copy "FuzzyLogicLibrary.dll" "$(SolutionDir)"
|
copy "FuzzyLogicLibrary.dll" "$(SolutionDir)"
|
||||||
cd "$(SolutionDir)"</PostBuildEvent>
|
cd "$(SolutionDir)"</PostBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<Folder Include="Widgets\Logic\Ingame\" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.Traits;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.Cnc.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class IngameCashCounterLogic
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public IngameCashCounterLogic(Widget widget, World world)
|
||||||
|
{
|
||||||
|
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
|
||||||
|
var cash = widget.Get<LabelWidget>("CASH");
|
||||||
|
var label = cash.Text;
|
||||||
|
|
||||||
|
cash.GetText = () => label.F(playerResources.DisplayCash + playerResources.DisplayResources);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
38
OpenRA.Mods.RA/Widgets/Logic/Ingame/IngamePowerBarLogic.cs
Normal file
38
OpenRA.Mods.RA/Widgets/Logic/Ingame/IngamePowerBarLogic.cs
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Drawing;
|
||||||
|
using OpenRA.Mods.RA.Buildings;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class IngamePowerBarLogic
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public IngamePowerBarLogic(Widget widget, World world)
|
||||||
|
{
|
||||||
|
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
|
||||||
|
var powerBar = widget.Get<ResourceBarWidget>("POWERBAR");
|
||||||
|
|
||||||
|
powerBar.GetProvided = () => powerManager.PowerProvided;
|
||||||
|
powerBar.GetUsed = () => powerManager.PowerDrained;
|
||||||
|
powerBar.TooltipFormat = "Power Usage: {0}/{1}";
|
||||||
|
powerBar.GetBarColor = () =>
|
||||||
|
{
|
||||||
|
if (powerManager.PowerState == PowerState.Critical)
|
||||||
|
return Color.Red;
|
||||||
|
if (powerManager.PowerState == PowerState.Low)
|
||||||
|
return Color.Orange;
|
||||||
|
return Color.LimeGreen;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.Mods.RA.Buildings;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class IngamePowerCounterLogic
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public IngamePowerCounterLogic(Widget widget, World world)
|
||||||
|
{
|
||||||
|
var powerManager = world.LocalPlayer.PlayerActor.Trait<PowerManager>();
|
||||||
|
var power = widget.Get<LabelWidget>("POWER");
|
||||||
|
|
||||||
|
power.GetText = () => powerManager.PowerProvided == 1000000 ? "inf" : powerManager.ExcessPower.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Linq;
|
||||||
|
using OpenRA.Mods.RA.Widgets;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class IngameRadarDisplayLogic
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public IngameRadarDisplayLogic(Widget widget, World world)
|
||||||
|
{
|
||||||
|
var radarEnabled = false;
|
||||||
|
var cachedRadarEnabled = false;
|
||||||
|
widget.Get<RadarWidget>("RADAR_MINIMAP").IsEnabled = () => radarEnabled;
|
||||||
|
|
||||||
|
var ticker = widget.Get<LogicTickerWidget>("RADAR_TICKER");
|
||||||
|
ticker.OnTick = () =>
|
||||||
|
{
|
||||||
|
radarEnabled = world.ActorsWithTrait<ProvidesRadar>()
|
||||||
|
.Any(a => a.Actor.Owner == world.LocalPlayer && a.Trait.IsActive);
|
||||||
|
|
||||||
|
if (radarEnabled != cachedRadarEnabled)
|
||||||
|
Sound.PlayNotification(world.Map.Rules, null, "Sounds", radarEnabled ? "RadarUp" : "RadarDown", null);
|
||||||
|
cachedRadarEnabled = radarEnabled;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
40
OpenRA.Mods.RA/Widgets/Logic/Ingame/IngameSiloBarLogic.cs
Normal file
40
OpenRA.Mods.RA/Widgets/Logic/Ingame/IngameSiloBarLogic.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using System.Drawing;
|
||||||
|
using OpenRA.Traits;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class IngameSiloBarLogic
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public IngameSiloBarLogic(Widget widget, World world)
|
||||||
|
{
|
||||||
|
var playerResources = world.LocalPlayer.PlayerActor.Trait<PlayerResources>();
|
||||||
|
var siloBar = widget.Get<ResourceBarWidget>("SILOBAR");
|
||||||
|
|
||||||
|
siloBar.GetProvided = () => playerResources.ResourceCapacity;
|
||||||
|
siloBar.GetUsed = () => playerResources.Resources;
|
||||||
|
siloBar.TooltipFormat = "Silo Usage: {0}/{1}";
|
||||||
|
siloBar.GetBarColor = () =>
|
||||||
|
{
|
||||||
|
if (playerResources.Resources == playerResources.ResourceCapacity)
|
||||||
|
return Color.Red;
|
||||||
|
|
||||||
|
if (playerResources.Resources >= 0.8 * playerResources.ResourceCapacity)
|
||||||
|
return Color.Orange;
|
||||||
|
|
||||||
|
return Color.LimeGreen;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Widgets.Logic
|
||||||
|
{
|
||||||
|
public class LoadIngamePlayerOrObserverUILogic
|
||||||
|
{
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public LoadIngamePlayerOrObserverUILogic(Widget widget, World world)
|
||||||
|
{
|
||||||
|
var ingameRoot = widget.Get("INGAME_ROOT");
|
||||||
|
var playerRoot = ingameRoot.Get("PLAYER_ROOT");
|
||||||
|
|
||||||
|
if (world.LocalPlayer == null)
|
||||||
|
Game.LoadWidget(world, "OBSERVER_WIDGETS", playerRoot, new WidgetArgs());
|
||||||
|
else
|
||||||
|
Game.LoadWidget(world, "PLAYER_WIDGETS", playerRoot, new WidgetArgs());
|
||||||
|
|
||||||
|
Game.LoadWidget(world, "CHAT_PANEL", ingameRoot, new WidgetArgs());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -42,6 +42,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
Widget optionsBG = null;
|
Widget optionsBG = null;
|
||||||
optionsBG = Game.LoadWidget(world, "INGAME_OPTIONS_BG", Ui.Root, new WidgetArgs
|
optionsBG = Game.LoadWidget(world, "INGAME_OPTIONS_BG", Ui.Root, new WidgetArgs
|
||||||
{
|
{
|
||||||
|
{ "transient", false },
|
||||||
{ "onExit", () =>
|
{ "onExit", () =>
|
||||||
{
|
{
|
||||||
optionsBG.Visible = false;
|
optionsBG.Visible = false;
|
||||||
@@ -52,6 +53,8 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
optionsBG.Visible = false;
|
||||||
|
|
||||||
gameRoot.Get<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
|
gameRoot.Get<ButtonWidget>("INGAME_OPTIONS_BUTTON").OnClick = () =>
|
||||||
{
|
{
|
||||||
optionsBG.Visible ^= true;
|
optionsBG.Visible ^= true;
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
class IngameMenuLogic
|
class IngameMenuLogic
|
||||||
{
|
{
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public IngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer)
|
public IngameMenuLogic(Widget widget, World world, Action onExit, WorldRenderer worldRenderer, bool transient)
|
||||||
{
|
{
|
||||||
var resumeDisabled = false;
|
var resumeDisabled = false;
|
||||||
var mpe = world.WorldActor.TraitOrDefault<MenuPaletteEffect>();
|
var mpe = world.WorldActor.TraitOrDefault<MenuPaletteEffect>();
|
||||||
@@ -71,8 +71,17 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
};
|
};
|
||||||
|
|
||||||
var resumeButton = widget.Get<ButtonWidget>("RESUME");
|
var resumeButton = widget.Get<ButtonWidget>("RESUME");
|
||||||
resumeButton.OnClick = () => onExit();
|
|
||||||
resumeButton.IsDisabled = () => resumeDisabled;
|
resumeButton.IsDisabled = () => resumeDisabled;
|
||||||
|
resumeButton.OnClick = () =>
|
||||||
|
{
|
||||||
|
if (transient)
|
||||||
|
{
|
||||||
|
Ui.CloseWindow();
|
||||||
|
Ui.Root.RemoveChild(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
onExit();
|
||||||
|
};
|
||||||
|
|
||||||
widget.Get<ButtonWidget>("SURRENDER").OnClick = () =>
|
widget.Get<ButtonWidget>("SURRENDER").OnClick = () =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -15,9 +15,17 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
{
|
{
|
||||||
public class OrderButtonsChromeLogic
|
public class OrderButtonsChromeLogic
|
||||||
{
|
{
|
||||||
|
readonly World world;
|
||||||
|
readonly Widget ingameRoot;
|
||||||
|
bool disableSystemButtons;
|
||||||
|
|
||||||
[ObjectCreator.UseCtor]
|
[ObjectCreator.UseCtor]
|
||||||
public OrderButtonsChromeLogic(Widget widget, World world)
|
public OrderButtonsChromeLogic(Widget widget, World world)
|
||||||
{
|
{
|
||||||
|
this.world = world;
|
||||||
|
ingameRoot = Ui.Root.Get("INGAME_ROOT");
|
||||||
|
|
||||||
|
// Order Buttons
|
||||||
var sell = widget.GetOrNull<ButtonWidget>("SELL_BUTTON");
|
var sell = widget.GetOrNull<ButtonWidget>("SELL_BUTTON");
|
||||||
if (sell != null)
|
if (sell != null)
|
||||||
{
|
{
|
||||||
@@ -45,6 +53,43 @@ namespace OpenRA.Mods.RA.Widgets.Logic
|
|||||||
power.GetKey = _ => Game.Settings.Keys.PowerDownKey;
|
power.GetKey = _ => Game.Settings.Keys.PowerDownKey;
|
||||||
BindOrderButton<PowerDownOrderGenerator>(world, power, "power");
|
BindOrderButton<PowerDownOrderGenerator>(world, power, "power");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// System buttons
|
||||||
|
var options = widget.GetOrNull<MenuButtonWidget>("OPTIONS_BUTTON");
|
||||||
|
if (options != null)
|
||||||
|
{
|
||||||
|
options.IsDisabled = () => disableSystemButtons;
|
||||||
|
options.OnClick = () => OpenMenuPanel(options);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void OpenMenuPanel(MenuButtonWidget button)
|
||||||
|
{
|
||||||
|
disableSystemButtons = true;
|
||||||
|
var cachedPause = world.PredictedPaused;
|
||||||
|
|
||||||
|
if (button.HideIngameUI)
|
||||||
|
ingameRoot.IsVisible = () => false;
|
||||||
|
|
||||||
|
if (button.Pause && world.LobbyInfo.IsSinglePlayer)
|
||||||
|
world.SetPauseState(true);
|
||||||
|
|
||||||
|
Game.LoadWidget(world, button.MenuContainer, Ui.Root, new WidgetArgs()
|
||||||
|
{
|
||||||
|
{ "transient", true },
|
||||||
|
{ "onExit", () =>
|
||||||
|
{
|
||||||
|
if (button.HideIngameUI)
|
||||||
|
ingameRoot.IsVisible = () => true;
|
||||||
|
|
||||||
|
if (button.Pause && world.LobbyInfo.IsSinglePlayer)
|
||||||
|
world.SetPauseState(cachedPause);
|
||||||
|
|
||||||
|
disableSystemButtons = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
static void BindOrderButton<T>(World world, ButtonWidget w, string icon)
|
static void BindOrderButton<T>(World world, ButtonWidget w, string icon)
|
||||||
|
|||||||
33
OpenRA.Mods.RA/Widgets/MenuButtonWidget.cs
Normal file
33
OpenRA.Mods.RA/Widgets/MenuButtonWidget.cs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#region Copyright & License Information
|
||||||
|
/*
|
||||||
|
* Copyright 2007-2014 The OpenRA Developers (see AUTHORS)
|
||||||
|
* This file is part of OpenRA, which is free software. It is made
|
||||||
|
* available to you under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation. For more information,
|
||||||
|
* see COPYING.
|
||||||
|
*/
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
|
namespace OpenRA.Mods.RA.Widgets
|
||||||
|
{
|
||||||
|
public class MenuButtonWidget : ButtonWidget
|
||||||
|
{
|
||||||
|
public readonly string MenuContainer = "INGAME_MENU";
|
||||||
|
public readonly bool Pause = true;
|
||||||
|
public readonly bool HideIngameUI = true;
|
||||||
|
|
||||||
|
[ObjectCreator.UseCtor]
|
||||||
|
public MenuButtonWidget(Ruleset modRules)
|
||||||
|
: base(modRules) { }
|
||||||
|
|
||||||
|
protected MenuButtonWidget(MenuButtonWidget other)
|
||||||
|
: base(other)
|
||||||
|
{
|
||||||
|
MenuContainer = other.MenuContainer;
|
||||||
|
Pause = other.Pause;
|
||||||
|
HideIngameUI = other.HideIngameUI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
Container@INGAME_ROOT:
|
Container@INGAME_ROOT:
|
||||||
Logic: CncIngameChromeLogic
|
Logic: LoadIngamePlayerOrObserverUILogic
|
||||||
Children:
|
Children:
|
||||||
LogicTicker@DISCONNECT_WATCHER:
|
LogicTicker@DISCONNECT_WATCHER:
|
||||||
Logic: DisconnectWatcherLogic
|
Logic: DisconnectWatcherLogic
|
||||||
@@ -196,7 +196,7 @@ Container@PLAYER_WIDGETS:
|
|||||||
Height: 240
|
Height: 240
|
||||||
Background: panel-black
|
Background: panel-black
|
||||||
Children:
|
Children:
|
||||||
Button@OPTIONS_BUTTON:
|
MenuButton@OPTIONS_BUTTON:
|
||||||
Key: escape
|
Key: escape
|
||||||
X: 22
|
X: 22
|
||||||
Y: 0-24
|
Y: 0-24
|
||||||
@@ -258,12 +258,16 @@ Container@PLAYER_WIDGETS:
|
|||||||
Background: panel-gray
|
Background: panel-gray
|
||||||
Children:
|
Children:
|
||||||
Radar@RADAR_MINIMAP:
|
Radar@RADAR_MINIMAP:
|
||||||
|
Logic: IngameRadarDisplayLogic
|
||||||
X: 1
|
X: 1
|
||||||
Y: 1
|
Y: 1
|
||||||
Width: PARENT_RIGHT-2
|
Width: PARENT_RIGHT-2
|
||||||
Height: PARENT_BOTTOM-2
|
Height: PARENT_BOTTOM-2
|
||||||
WorldInteractionController: INTERACTION_CONTROLLER
|
WorldInteractionController: INTERACTION_CONTROLLER
|
||||||
|
Children:
|
||||||
|
LogicTicker@RADAR_TICKER:
|
||||||
Background@POWERBAR_PANEL:
|
Background@POWERBAR_PANEL:
|
||||||
|
Logic: IngamePowerBarLogic
|
||||||
X: 4
|
X: 4
|
||||||
Y: 5
|
Y: 5
|
||||||
Width: 10
|
Width: 10
|
||||||
@@ -279,6 +283,7 @@ Container@PLAYER_WIDGETS:
|
|||||||
TooltipTemplate: SIMPLE_TOOLTIP
|
TooltipTemplate: SIMPLE_TOOLTIP
|
||||||
IndicatorImage: indicator-left
|
IndicatorImage: indicator-left
|
||||||
Background@SILOBAR_PANEL:
|
Background@SILOBAR_PANEL:
|
||||||
|
Logic: IngameSiloBarLogic
|
||||||
X: 180
|
X: 180
|
||||||
Y: 5
|
Y: 5
|
||||||
Width: 10
|
Width: 10
|
||||||
@@ -294,11 +299,13 @@ Container@PLAYER_WIDGETS:
|
|||||||
TooltipTemplate: SIMPLE_TOOLTIP
|
TooltipTemplate: SIMPLE_TOOLTIP
|
||||||
IndicatorImage: indicator-right
|
IndicatorImage: indicator-right
|
||||||
Label@CASH:
|
Label@CASH:
|
||||||
|
Logic: IngameCashCounterLogic
|
||||||
Y: 170
|
Y: 170
|
||||||
Width: PARENT_RIGHT
|
Width: PARENT_RIGHT
|
||||||
Height: 25
|
Height: 25
|
||||||
Align: Center
|
Align: Center
|
||||||
Font: Bold
|
Font: Bold
|
||||||
|
Text: ${0}
|
||||||
Container@PRODUCTION_TYPES:
|
Container@PRODUCTION_TYPES:
|
||||||
X: 12
|
X: 12
|
||||||
Y: 197
|
Y: 197
|
||||||
|
|||||||
Reference in New Issue
Block a user