Implement state prediction for lobby ready checkbox.

This commit is contained in:
Paul Chote
2022-12-21 15:03:18 +13:00
committed by Gustas
parent 25935bbe99
commit 7c2be4ce3c

View File

@@ -657,12 +657,21 @@ namespace OpenRA.Mods.Common.Widgets.Logic
public static void SetupEditableReadyWidget(Widget parent, Session.Client c, OrderManager orderManager, MapPreview map, bool isEnabled)
{
var status = parent.Get<CheckboxWidget>("STATUS_CHECKBOX");
status.IsChecked = () => orderManager.LocalClient.IsReady || c.Bot != null;
status.IsVisible = () => true;
status.IsDisabled = () => c.Bot != null || map.Status != MapStatus.Available || !isEnabled;
var state = orderManager.LocalClient.IsReady ? Session.ClientState.NotReady : Session.ClientState.Ready;
status.OnClick = () => orderManager.IssueOrder(Order.Command($"state {state}"));
if (c.Bot == null)
{
var isChecked = new PredictedCachedTransform<Session.Client, bool>(cc => cc.IsReady);
status.IsChecked = () => isChecked.Update(c);
status.OnClick = () =>
{
var state = isChecked.Update(c) ? Session.ClientState.NotReady : Session.ClientState.Ready;
orderManager.IssueOrder(Order.Command($"state {state}"));
isChecked.Predict(!c.IsReady);
};
}
else
status.IsChecked = () => true;
}
public static void SetupReadyWidget(Widget parent, Session.Client c)