Refactor command bar buttons to use unified widget state names
This commit is contained in:
committed by
Paul Chote
parent
7943f4deb6
commit
39ccac4022
@@ -12,7 +12,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Graphics;
|
|
||||||
using OpenRA.Mods.Common.Orders;
|
using OpenRA.Mods.Common.Orders;
|
||||||
using OpenRA.Mods.Common.Traits;
|
using OpenRA.Mods.Common.Traits;
|
||||||
using OpenRA.Orders;
|
using OpenRA.Orders;
|
||||||
@@ -54,7 +53,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var attackMoveButton = widget.GetOrNull<ButtonWidget>("ATTACK_MOVE");
|
var attackMoveButton = widget.GetOrNull<ButtonWidget>("ATTACK_MOVE");
|
||||||
if (attackMoveButton != null)
|
if (attackMoveButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(attackMoveButton);
|
WidgetUtils.BindButtonIcon(attackMoveButton);
|
||||||
|
|
||||||
attackMoveButton.IsDisabled = () => { UpdateStateIfNecessary(); return attackMoveDisabled; };
|
attackMoveButton.IsDisabled = () => { UpdateStateIfNecessary(); return attackMoveDisabled; };
|
||||||
attackMoveButton.IsHighlighted = () => world.OrderGenerator is AttackMoveOrderGenerator;
|
attackMoveButton.IsHighlighted = () => world.OrderGenerator is AttackMoveOrderGenerator;
|
||||||
@@ -77,7 +76,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var forceMoveButton = widget.GetOrNull<ButtonWidget>("FORCE_MOVE");
|
var forceMoveButton = widget.GetOrNull<ButtonWidget>("FORCE_MOVE");
|
||||||
if (forceMoveButton != null)
|
if (forceMoveButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(forceMoveButton);
|
WidgetUtils.BindButtonIcon(forceMoveButton);
|
||||||
|
|
||||||
forceMoveButton.IsDisabled = () => { UpdateStateIfNecessary(); return forceMoveDisabled; };
|
forceMoveButton.IsDisabled = () => { UpdateStateIfNecessary(); return forceMoveDisabled; };
|
||||||
forceMoveButton.IsHighlighted = () => !forceMoveButton.IsDisabled() && IsForceModifiersActive(Modifiers.Alt);
|
forceMoveButton.IsHighlighted = () => !forceMoveButton.IsDisabled() && IsForceModifiersActive(Modifiers.Alt);
|
||||||
@@ -93,7 +92,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var forceAttackButton = widget.GetOrNull<ButtonWidget>("FORCE_ATTACK");
|
var forceAttackButton = widget.GetOrNull<ButtonWidget>("FORCE_ATTACK");
|
||||||
if (forceAttackButton != null)
|
if (forceAttackButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(forceAttackButton);
|
WidgetUtils.BindButtonIcon(forceAttackButton);
|
||||||
|
|
||||||
forceAttackButton.IsDisabled = () => { UpdateStateIfNecessary(); return forceAttackDisabled; };
|
forceAttackButton.IsDisabled = () => { UpdateStateIfNecessary(); return forceAttackDisabled; };
|
||||||
forceAttackButton.IsHighlighted = () => !forceAttackButton.IsDisabled() && IsForceModifiersActive(Modifiers.Ctrl)
|
forceAttackButton.IsHighlighted = () => !forceAttackButton.IsDisabled() && IsForceModifiersActive(Modifiers.Ctrl)
|
||||||
@@ -111,7 +110,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var guardButton = widget.GetOrNull<ButtonWidget>("GUARD");
|
var guardButton = widget.GetOrNull<ButtonWidget>("GUARD");
|
||||||
if (guardButton != null)
|
if (guardButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(guardButton);
|
WidgetUtils.BindButtonIcon(guardButton);
|
||||||
|
|
||||||
guardButton.IsDisabled = () => { UpdateStateIfNecessary(); return guardDisabled; };
|
guardButton.IsDisabled = () => { UpdateStateIfNecessary(); return guardDisabled; };
|
||||||
guardButton.IsHighlighted = () => world.OrderGenerator is GuardOrderGenerator;
|
guardButton.IsHighlighted = () => world.OrderGenerator is GuardOrderGenerator;
|
||||||
@@ -135,7 +134,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var scatterButton = widget.GetOrNull<ButtonWidget>("SCATTER");
|
var scatterButton = widget.GetOrNull<ButtonWidget>("SCATTER");
|
||||||
if (scatterButton != null)
|
if (scatterButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(scatterButton);
|
WidgetUtils.BindButtonIcon(scatterButton);
|
||||||
|
|
||||||
scatterButton.IsDisabled = () => { UpdateStateIfNecessary(); return scatterDisabled; };
|
scatterButton.IsDisabled = () => { UpdateStateIfNecessary(); return scatterDisabled; };
|
||||||
scatterButton.IsHighlighted = () => scatterHighlighted > 0;
|
scatterButton.IsHighlighted = () => scatterHighlighted > 0;
|
||||||
@@ -153,7 +152,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var deployButton = widget.GetOrNull<ButtonWidget>("DEPLOY");
|
var deployButton = widget.GetOrNull<ButtonWidget>("DEPLOY");
|
||||||
if (deployButton != null)
|
if (deployButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(deployButton);
|
WidgetUtils.BindButtonIcon(deployButton);
|
||||||
|
|
||||||
deployButton.IsDisabled = () =>
|
deployButton.IsDisabled = () =>
|
||||||
{
|
{
|
||||||
@@ -179,7 +178,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var stopButton = widget.GetOrNull<ButtonWidget>("STOP");
|
var stopButton = widget.GetOrNull<ButtonWidget>("STOP");
|
||||||
if (stopButton != null)
|
if (stopButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(stopButton);
|
WidgetUtils.BindButtonIcon(stopButton);
|
||||||
|
|
||||||
stopButton.IsDisabled = () => { UpdateStateIfNecessary(); return stopDisabled; };
|
stopButton.IsDisabled = () => { UpdateStateIfNecessary(); return stopDisabled; };
|
||||||
stopButton.IsHighlighted = () => stopHighlighted > 0;
|
stopButton.IsHighlighted = () => stopHighlighted > 0;
|
||||||
@@ -197,7 +196,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
var queueOrdersButton = widget.GetOrNull<ButtonWidget>("QUEUE_ORDERS");
|
var queueOrdersButton = widget.GetOrNull<ButtonWidget>("QUEUE_ORDERS");
|
||||||
if (queueOrdersButton != null)
|
if (queueOrdersButton != null)
|
||||||
{
|
{
|
||||||
BindButtonIcon(queueOrdersButton);
|
WidgetUtils.BindButtonIcon(queueOrdersButton);
|
||||||
|
|
||||||
queueOrdersButton.IsDisabled = () => { UpdateStateIfNecessary(); return waypointModeDisabled; };
|
queueOrdersButton.IsDisabled = () => { UpdateStateIfNecessary(); return waypointModeDisabled; };
|
||||||
queueOrdersButton.IsHighlighted = () => !queueOrdersButton.IsDisabled() && IsForceModifiersActive(Modifiers.Shift);
|
queueOrdersButton.IsHighlighted = () => !queueOrdersButton.IsDisabled() && IsForceModifiersActive(Modifiers.Shift);
|
||||||
@@ -272,20 +271,6 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
base.Tick();
|
base.Tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BindButtonIcon(ButtonWidget button)
|
|
||||||
{
|
|
||||||
var icon = button.Get<ImageWidget>("ICON");
|
|
||||||
var hasDisabled = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-disabled") != null;
|
|
||||||
var hasActive = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active") != null;
|
|
||||||
var hasActiveHover = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-hover") != null;
|
|
||||||
var hasHover = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-hover") != null;
|
|
||||||
|
|
||||||
icon.GetImageName = () => hasActive && button.IsHighlighted() ?
|
|
||||||
(hasActiveHover && Ui.MouseOverWidget == button ? icon.ImageName + "-active-hover" : icon.ImageName + "-active") :
|
|
||||||
hasDisabled && button.IsDisabled() ? icon.ImageName + "-disabled" :
|
|
||||||
hasHover && Ui.MouseOverWidget == button ? icon.ImageName + "-hover" : icon.ImageName;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool IsForceModifiersActive(Modifiers modifiers)
|
bool IsForceModifiersActive(Modifiers modifiers)
|
||||||
{
|
{
|
||||||
var fmog = world.OrderGenerator as ForceModifiersOrderGenerator;
|
var fmog = world.OrderGenerator as ForceModifiersOrderGenerator;
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using OpenRA.Graphics;
|
|
||||||
using OpenRA.Mods.Common.Traits;
|
using OpenRA.Mods.Common.Traits;
|
||||||
using OpenRA.Widgets;
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
@@ -47,16 +46,7 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
|
|
||||||
void BindStanceButton(ButtonWidget button, UnitStance stance)
|
void BindStanceButton(ButtonWidget button, UnitStance stance)
|
||||||
{
|
{
|
||||||
var icon = button.Get<ImageWidget>("ICON");
|
WidgetUtils.BindButtonIcon(button);
|
||||||
var hasDisabled = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-disabled") != null;
|
|
||||||
var hasActive = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active") != null;
|
|
||||||
var hasActiveHover = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-hover") != null;
|
|
||||||
var hasHover = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-hover") != null;
|
|
||||||
|
|
||||||
icon.GetImageName = () => hasActive && button.IsHighlighted() ?
|
|
||||||
(hasActiveHover && Ui.MouseOverWidget == button ? icon.ImageName + "-active-hover" : icon.ImageName + "-active") :
|
|
||||||
hasDisabled && button.IsDisabled() ? icon.ImageName + "-disabled" :
|
|
||||||
hasHover && Ui.MouseOverWidget == button ? icon.ImageName + "-hover" : icon.ImageName;
|
|
||||||
|
|
||||||
button.IsDisabled = () => { UpdateStateIfNecessary(); return !actorStances.Any(); };
|
button.IsDisabled = () => { UpdateStateIfNecessary(); return !actorStances.Any(); };
|
||||||
button.IsHighlighted = () => actorStances.Any(
|
button.IsHighlighted = () => actorStances.Any(
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ using System.Linq;
|
|||||||
using OpenRA.Graphics;
|
using OpenRA.Graphics;
|
||||||
using OpenRA.Network;
|
using OpenRA.Network;
|
||||||
using OpenRA.Primitives;
|
using OpenRA.Primitives;
|
||||||
|
using OpenRA.Widgets;
|
||||||
|
|
||||||
namespace OpenRA.Mods.Common.Widgets
|
namespace OpenRA.Mods.Common.Widgets
|
||||||
{
|
{
|
||||||
@@ -283,6 +284,55 @@ namespace OpenRA.Mods.Common.Widgets
|
|||||||
button.GetTooltipText = null;
|
button.GetTooltipText = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void BindButtonIcon(ButtonWidget button)
|
||||||
|
{
|
||||||
|
var icon = button.Get<ImageWidget>("ICON");
|
||||||
|
|
||||||
|
var hasActiveImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active") != null;
|
||||||
|
var hasActiveDisabledImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-disabled") != null;
|
||||||
|
var hasActivePressedImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-pressed") != null;
|
||||||
|
var hasActiveHoverImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-active-hover") != null;
|
||||||
|
|
||||||
|
var hasImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName) != null;
|
||||||
|
var hasDisabledImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-disabled") != null;
|
||||||
|
var hasPressedImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-pressed") != null;
|
||||||
|
var hasHoverImage = ChromeProvider.GetImage(icon.ImageCollection, icon.ImageName + "-hover") != null;
|
||||||
|
|
||||||
|
icon.GetImageName = () =>
|
||||||
|
{
|
||||||
|
var isActive = button.IsHighlighted();
|
||||||
|
var isDisabled = button.IsDisabled();
|
||||||
|
var isPressed = button.Depressed;
|
||||||
|
var isHovered = Ui.MouseOverWidget == button;
|
||||||
|
|
||||||
|
var baseName = button.IsHighlighted() ? icon.ImageName + "-active" : icon.ImageName;
|
||||||
|
var stateName = WidgetUtils.GetStatefulImageName(baseName, isDisabled, isPressed, isHovered);
|
||||||
|
|
||||||
|
if (isActive)
|
||||||
|
{
|
||||||
|
if (isDisabled)
|
||||||
|
return hasActiveDisabledImage ? stateName : hasActiveImage ? baseName : icon.ImageName;
|
||||||
|
else if (isPressed)
|
||||||
|
return hasActivePressedImage ? stateName : hasActiveImage ? baseName : icon.ImageName;
|
||||||
|
else if (isHovered)
|
||||||
|
return hasActiveHoverImage ? stateName : hasActiveImage ? baseName : icon.ImageName;
|
||||||
|
else
|
||||||
|
return hasActiveImage ? baseName : icon.ImageName;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (isDisabled)
|
||||||
|
return hasDisabledImage ? stateName : baseName;
|
||||||
|
else if (isPressed)
|
||||||
|
return hasPressedImage ? stateName : baseName;
|
||||||
|
else if (isHovered)
|
||||||
|
return hasHoverImage ? stateName : baseName;
|
||||||
|
else
|
||||||
|
return baseName;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
public static void BindPlayerNameAndStatus(LabelWidget label, Player p)
|
public static void BindPlayerNameAndStatus(LabelWidget label, Player p)
|
||||||
{
|
{
|
||||||
var client = p.World.LobbyInfo.ClientWithIndex(p.ClientIndex);
|
var client = p.World.LobbyInfo.ClientWithIndex(p.ClientIndex);
|
||||||
|
|||||||
Reference in New Issue
Block a user