New checkboxes (independent from old checkboxes) that support hover and disable.
This commit is contained in:
@@ -139,35 +139,27 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
var disconnectButton = lobby.GetWidget<CncMenuButtonWidget>("DISCONNECT_BUTTON");
|
var disconnectButton = lobby.GetWidget<CncMenuButtonWidget>("DISCONNECT_BUTTON");
|
||||||
disconnectButton.OnClick = onExit;
|
disconnectButton.OnClick = onExit;
|
||||||
|
|
||||||
var lockTeamsCheckbox = lobby.GetWidget<CheckboxWidget>("LOCKTEAMS_CHECKBOX");
|
var gameStarting = false;
|
||||||
|
var lockTeamsCheckbox = lobby.GetWidget<CncCheckboxWidget>("LOCKTEAMS_CHECKBOX");
|
||||||
lockTeamsCheckbox.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.LockTeams;
|
lockTeamsCheckbox.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.LockTeams;
|
||||||
lockTeamsCheckbox.OnChange += _ =>
|
lockTeamsCheckbox.IsDisabled = () => !Game.IsHost || gameStarting;
|
||||||
{
|
lockTeamsCheckbox.OnClick = () => orderManager.IssueOrder(Order.Command(
|
||||||
if (Game.IsHost)
|
|
||||||
orderManager.IssueOrder(Order.Command(
|
|
||||||
"lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams)));
|
"lockteams {0}".F(!orderManager.LobbyInfo.GlobalSettings.LockTeams)));
|
||||||
};
|
|
||||||
|
var allowCheats = lobby.GetWidget<CncCheckboxWidget>("ALLOWCHEATS_CHECKBOX");
|
||||||
var allowCheats = lobby.GetWidget<CheckboxWidget>("ALLOWCHEATS_CHECKBOX");
|
|
||||||
allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats;
|
allowCheats.IsChecked = () => orderManager.LobbyInfo.GlobalSettings.AllowCheats;
|
||||||
allowCheats.OnChange += _ =>
|
allowCheats.IsDisabled = () => !Game.IsHost || gameStarting;
|
||||||
{
|
allowCheats.OnClick = () => orderManager.IssueOrder(Order.Command(
|
||||||
if (Game.IsHost)
|
|
||||||
orderManager.IssueOrder(Order.Command(
|
|
||||||
"allowcheats {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllowCheats)));
|
"allowcheats {0}".F(!orderManager.LobbyInfo.GlobalSettings.AllowCheats)));
|
||||||
};
|
|
||||||
|
|
||||||
var startGameButton = lobby.GetWidget<CncMenuButtonWidget>("START_GAME_BUTTON");
|
var startGameButton = lobby.GetWidget<CncMenuButtonWidget>("START_GAME_BUTTON");
|
||||||
|
startGameButton.IsVisible = () => Game.IsHost;
|
||||||
|
startGameButton.IsDisabled = () => gameStarting;
|
||||||
startGameButton.OnClick = () =>
|
startGameButton.OnClick = () =>
|
||||||
{
|
{
|
||||||
mapButton.Visible = false;
|
gameStarting = true;
|
||||||
disconnectButton.Visible = false;
|
|
||||||
lockTeamsCheckbox.Visible = false;
|
|
||||||
orderManager.IssueOrder(Order.Command("startgame"));
|
orderManager.IssueOrder(Order.Command("startgame"));
|
||||||
};
|
};
|
||||||
|
|
||||||
// Todo: Only show if the map requirements are met for player slots
|
|
||||||
startGameButton.IsVisible = () => Game.IsHost;
|
|
||||||
|
|
||||||
bool teamChat = false;
|
bool teamChat = false;
|
||||||
var chatLabel = lobby.GetWidget<LabelWidget>("LABEL_CHATTYPE");
|
var chatLabel = lobby.GetWidget<LabelWidget>("LABEL_CHATTYPE");
|
||||||
|
|||||||
@@ -23,13 +23,13 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
public CncMenuButtonWidget()
|
public CncMenuButtonWidget()
|
||||||
: base()
|
: base()
|
||||||
{
|
{
|
||||||
OnMouseUp = mi => { OnClick(); return true; };
|
OnMouseUp = mi => { if (!IsDisabled()) OnClick(); return true; };
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CncMenuButtonWidget(CncMenuButtonWidget widget)
|
protected CncMenuButtonWidget(CncMenuButtonWidget widget)
|
||||||
: base(widget)
|
: base(widget)
|
||||||
{
|
{
|
||||||
OnMouseUp = mi => { OnClick(); return true; };
|
OnMouseUp = mi => { if (!IsDisabled()) OnClick(); return true; };
|
||||||
}
|
}
|
||||||
|
|
||||||
public override int2 ChildOrigin { get { return RenderOrigin; } }
|
public override int2 ChildOrigin { get { return RenderOrigin; } }
|
||||||
@@ -50,5 +50,37 @@ namespace OpenRA.Mods.Cnc.Widgets
|
|||||||
font.Measure(text).Y / 2), IsDisabled() ? Color.Gray : Color.White);
|
font.Measure(text).Y / 2), IsDisabled() ? Color.Gray : Color.White);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class CncCheckboxWidget : CncMenuButtonWidget
|
||||||
|
{
|
||||||
|
public CncCheckboxWidget()
|
||||||
|
: base() { }
|
||||||
|
protected CncCheckboxWidget(CncCheckboxWidget widget)
|
||||||
|
: base(widget) { }
|
||||||
|
|
||||||
|
public Func<bool> IsChecked = () => false;
|
||||||
|
public int baseLine = 1;
|
||||||
|
|
||||||
|
public override void DrawInner()
|
||||||
|
{
|
||||||
|
var state = IsDisabled() ? "button-disabled" :
|
||||||
|
Depressed ? "button-pressed" :
|
||||||
|
RenderBounds.Contains(Viewport.LastMousePos) ? "button-hover" :
|
||||||
|
"button";
|
||||||
|
|
||||||
|
var font = Game.Renderer.BoldFont;
|
||||||
|
var rect = RenderBounds;
|
||||||
|
WidgetUtils.DrawPanel(state, new Rectangle(rect.Location, new Size(Bounds.Height, Bounds.Height)));
|
||||||
|
|
||||||
|
var textSize = font.Measure(Text);
|
||||||
|
font.DrawText(Text,
|
||||||
|
new float2(rect.Left + rect.Height * 1.5f, RenderOrigin.Y - baseLine + (Bounds.Height - textSize.Y)/2), Color.White);
|
||||||
|
|
||||||
|
if (IsChecked())
|
||||||
|
WidgetUtils.DrawRGBA(
|
||||||
|
ChromeProvider.GetImage("checkbox", "checked"),
|
||||||
|
new float2(rect.Left + 2, rect.Top + 2));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,14 +31,14 @@ Container@SERVER_LOBBY:
|
|||||||
Y:1
|
Y:1
|
||||||
Width:192
|
Width:192
|
||||||
Height:192
|
Height:192
|
||||||
Checkbox@LOCKTEAMS_CHECKBOX:
|
CncCheckbox@LOCKTEAMS_CHECKBOX:
|
||||||
Id:LOCKTEAMS_CHECKBOX
|
Id:LOCKTEAMS_CHECKBOX
|
||||||
X:PARENT_RIGHT-209
|
X:PARENT_RIGHT-209
|
||||||
Y:230
|
Y:230
|
||||||
Width:80
|
Width:80
|
||||||
Height:20
|
Height:20
|
||||||
Text: Lock Teams
|
Text: Lock Teams
|
||||||
Checkbox@ALLOWCHEATS_CHECKBOX:
|
CncCheckbox@ALLOWCHEATS_CHECKBOX:
|
||||||
Id:ALLOWCHEATS_CHECKBOX
|
Id:ALLOWCHEATS_CHECKBOX
|
||||||
X:PARENT_RIGHT-209
|
X:PARENT_RIGHT-209
|
||||||
Y:255
|
Y:255
|
||||||
|
|||||||
Reference in New Issue
Block a user