125 lines
4.5 KiB
C#
125 lines
4.5 KiB
C#
#region Copyright & License Information
|
|
/*
|
|
* Copyright (c) The OpenRA Developers and Contributors
|
|
* 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, either version 3 of
|
|
* the License, or (at your option) any later version. For more
|
|
* information, see COPYING.
|
|
*/
|
|
#endregion
|
|
|
|
using System;
|
|
using OpenRA.Graphics;
|
|
using OpenRA.Widgets;
|
|
|
|
namespace OpenRA.Mods.Common.Widgets.Logic
|
|
{
|
|
public class LocalProfileLogic : ChromeLogic
|
|
{
|
|
readonly WorldRenderer worldRenderer;
|
|
readonly LocalPlayerProfile localProfile;
|
|
readonly Widget badgeContainer;
|
|
readonly Widget widget;
|
|
bool notFound;
|
|
bool badgesVisible;
|
|
|
|
[ObjectCreator.UseCtor]
|
|
public LocalProfileLogic(Widget widget, WorldRenderer worldRenderer, Func<bool> minimalProfile)
|
|
{
|
|
this.worldRenderer = worldRenderer;
|
|
this.widget = widget;
|
|
localProfile = Game.LocalPlayerProfile;
|
|
|
|
// Key registration
|
|
widget.Get("GENERATE_KEYS").IsVisible = () => localProfile.State == LocalPlayerProfile.LinkState.Uninitialized && !minimalProfile();
|
|
widget.Get("GENERATING_KEYS").IsVisible = () => localProfile.State == LocalPlayerProfile.LinkState.GeneratingKeys && !minimalProfile();
|
|
|
|
var lastProfileState = LocalPlayerProfile.LinkState.CheckingLink;
|
|
widget.Get("REGISTER_FINGERPRINT").IsVisible = () =>
|
|
{
|
|
// Take a copy of the state to avoid race conditions
|
|
var state = localProfile.State;
|
|
|
|
// Copy the key to the clipboard when displaying the link instructions
|
|
if (state != lastProfileState && state == LocalPlayerProfile.LinkState.Unlinked)
|
|
Game.SetClipboardText(localProfile.PublicKey);
|
|
|
|
lastProfileState = state;
|
|
return localProfile.State == LocalPlayerProfile.LinkState.Unlinked && !notFound && !minimalProfile();
|
|
};
|
|
|
|
widget.Get("CHECKING_FINGERPRINT").IsVisible = () => localProfile.State == LocalPlayerProfile.LinkState.CheckingLink && !minimalProfile();
|
|
widget.Get("FINGERPRINT_NOT_FOUND").IsVisible = () => localProfile.State == LocalPlayerProfile.LinkState.Unlinked && notFound && !minimalProfile();
|
|
widget.Get("CONNECTION_ERROR").IsVisible = () => localProfile.State == LocalPlayerProfile.LinkState.ConnectionFailed && !minimalProfile();
|
|
|
|
widget.Get<ButtonWidget>("GENERATE_KEY").OnClick = localProfile.GenerateKeypair;
|
|
|
|
widget.Get<ButtonWidget>("CHECK_KEY").OnClick = () => localProfile.RefreshPlayerData(() => RefreshComplete(true));
|
|
|
|
widget.Get<ButtonWidget>("DELETE_KEY").OnClick = () =>
|
|
{
|
|
localProfile.DeleteKeypair();
|
|
Game.RunAfterTick(Ui.ResetTooltips);
|
|
};
|
|
|
|
widget.Get<ButtonWidget>("FINGERPRINT_NOT_FOUND_CONTINUE").OnClick = () =>
|
|
{
|
|
notFound = false;
|
|
Game.RunAfterTick(Ui.ResetTooltips);
|
|
};
|
|
|
|
widget.Get<ButtonWidget>("CONNECTION_ERROR_RETRY").OnClick = () => localProfile.RefreshPlayerData(() => RefreshComplete(true));
|
|
|
|
// Profile view
|
|
widget.Get("PROFILE_HEADER").IsVisible = () => localProfile.State == LocalPlayerProfile.LinkState.Linked;
|
|
widget.Get<LabelWidget>("PROFILE_NAME").GetText = () => localProfile.ProfileData.ProfileName;
|
|
widget.Get<LabelWidget>("PROFILE_RANK").GetText = () => localProfile.ProfileData.ProfileRank;
|
|
|
|
var destroyKey = widget.Get<ButtonWidget>("DESTROY_KEY");
|
|
destroyKey.OnClick = localProfile.DeleteKeypair;
|
|
destroyKey.IsDisabled = minimalProfile;
|
|
|
|
badgeContainer = widget.Get("BADGES_CONTAINER");
|
|
badgeContainer.IsVisible = () => badgesVisible && !minimalProfile()
|
|
&& localProfile.State == LocalPlayerProfile.LinkState.Linked;
|
|
|
|
localProfile.RefreshPlayerData(() => RefreshComplete(false));
|
|
}
|
|
|
|
public void RefreshComplete(bool updateNotFound)
|
|
{
|
|
if (updateNotFound)
|
|
notFound = localProfile.State == LocalPlayerProfile.LinkState.Unlinked;
|
|
|
|
Game.RunAfterTick(() =>
|
|
{
|
|
badgesVisible = false;
|
|
|
|
if (localProfile.State == LocalPlayerProfile.LinkState.Linked && localProfile.ProfileData.Badges.Count > 0)
|
|
{
|
|
Func<int, int> negotiateWidth = _ => widget.Get("PROFILE_HEADER").Bounds.Width;
|
|
|
|
// Remove any stale badges that may be left over from a previous session
|
|
badgeContainer.RemoveChildren();
|
|
|
|
var badges = Ui.LoadWidget("PLAYER_PROFILE_BADGES_INSERT", badgeContainer, new WidgetArgs()
|
|
{
|
|
{ "worldRenderer", worldRenderer },
|
|
{ "profile", localProfile.ProfileData },
|
|
{ "negotiateWidth", negotiateWidth }
|
|
});
|
|
|
|
if (badges.Bounds.Height > 0)
|
|
{
|
|
badgeContainer.Bounds.Height = badges.Bounds.Height;
|
|
badgesVisible = true;
|
|
}
|
|
}
|
|
|
|
Ui.ResetTooltips();
|
|
});
|
|
}
|
|
}
|
|
}
|