Empeche un joueur d etre des deux cotes

This commit is contained in:
2026-04-15 23:13:00 +02:00
parent 8ea6ef8424
commit 3b88b9abe6

View File

@@ -160,7 +160,7 @@
</button> </button>
} }
</div> </div>
<input @bind="Form.WhiteName" @bind:event="oninput" name="whiteName" type="text" maxlength="40" placeholder="Blanc" /> <input @bind="WhitePlayerName" @bind:event="oninput" name="whiteName" type="text" maxlength="40" placeholder="Blanc" />
</label> </label>
<label class="field player-name-field"> <label class="field player-name-field">
@@ -178,9 +178,14 @@
</button> </button>
} }
</div> </div>
<input @bind="Form.BlackName" @bind:event="oninput" name="blackName" type="text" maxlength="40" placeholder="Noir" /> <input @bind="BlackPlayerName" @bind:event="oninput" name="blackName" type="text" maxlength="40" placeholder="Noir" />
</label> </label>
@if (!string.IsNullOrWhiteSpace(SetupError))
{
<p class="profile-feedback error span-2">@SetupError</p>
}
@if (IsAuthenticated) @if (IsAuthenticated)
{ {
<section class="setup-social-card span-2"> <section class="setup-social-card span-2">
@@ -379,6 +384,7 @@
private bool IsSocialLoading; private bool IsSocialLoading;
private int _knownSocialVersion; private int _knownSocialVersion;
private string? ConnectedPlayerName; private string? ConnectedPlayerName;
private string? SetupError;
private string? SocialLoadError; private string? SocialLoadError;
private string? InviteActionError; private string? InviteActionError;
private SocialOverviewResponse? SocialOverview; private SocialOverviewResponse? SocialOverview;
@@ -387,6 +393,26 @@
private string SetupBodyClass => UsesMoveLimit ? string.Empty : "time-setup-mode"; private string SetupBodyClass => UsesMoveLimit ? string.Empty : "time-setup-mode";
private bool CanUseConnectedPlayerName => !string.IsNullOrWhiteSpace(ConnectedPlayerName); private bool CanUseConnectedPlayerName => !string.IsNullOrWhiteSpace(ConnectedPlayerName);
private string WhitePlayerName
{
get => Form.WhiteName;
set
{
Form.WhiteName = value;
SetupError = null;
}
}
private string BlackPlayerName
{
get => Form.BlackName;
set
{
Form.BlackName = value;
SetupError = null;
}
}
private SocialFriendResponse[] OnlineFriends private SocialFriendResponse[] OnlineFriends
=> SocialOverview?.Friends => SocialOverview?.Friends
.Where(friend => ResolveOnlineStatus(friend.Subject, friend.IsOnline)) .Where(friend => ResolveOnlineStatus(friend.Subject, friend.IsOnline))
@@ -563,6 +589,13 @@
private async Task HandleSubmit() private async Task HandleSubmit()
{ {
SetupError = ValidateDistinctPlayers();
if (!string.IsNullOrWhiteSpace(SetupError))
{
StateHasChanged();
return;
}
await Store.EnsureLoadedAsync(); await Store.EnsureLoadedAsync();
var match = MatchEngine.CreateMatch(Form.ToMatchConfig()); var match = MatchEngine.CreateMatch(Form.ToMatchConfig());
Store.SetCurrent(match); Store.SetCurrent(match);
@@ -581,7 +614,10 @@
} }
private void LoadDemo() private void LoadDemo()
=> Form = SetupFormModel.CreateDemo(); {
Form = SetupFormModel.CreateDemo();
SetupError = null;
}
private void FillWhiteWithConnectedPlayer() private void FillWhiteWithConnectedPlayer()
{ {
@@ -590,7 +626,7 @@
return; return;
} }
Form.WhiteName = ConnectedPlayerName!; AssignConnectedPlayerToWhite();
} }
private void FillBlackWithConnectedPlayer() private void FillBlackWithConnectedPlayer()
@@ -600,7 +636,7 @@
return; return;
} }
Form.BlackName = ConnectedPlayerName!; AssignConnectedPlayerToBlack();
} }
private async Task InviteFriendToPlayAsync(string friendSubject, string recipientColor) private async Task InviteFriendToPlayAsync(string friendSubject, string recipientColor)
@@ -699,6 +735,53 @@
Form.WhiteName = session.WhiteName; Form.WhiteName = session.WhiteName;
Form.BlackName = session.BlackName; Form.BlackName = session.BlackName;
SetupError = null;
}
private void AssignConnectedPlayerToWhite()
{
if (!CanUseConnectedPlayerName)
{
return;
}
var connectedName = ConnectedPlayerName!;
Form.WhiteName = connectedName;
if (SamePlayerName(Form.BlackName, connectedName))
{
Form.BlackName = "Noir";
}
SetupError = null;
}
private void AssignConnectedPlayerToBlack()
{
if (!CanUseConnectedPlayerName)
{
return;
}
var connectedName = ConnectedPlayerName!;
Form.BlackName = connectedName;
if (SamePlayerName(Form.WhiteName, connectedName))
{
Form.WhiteName = "Blanc";
}
SetupError = null;
}
private string? ValidateDistinctPlayers()
{
var whiteName = NormalizePlayerName(Form.WhiteName, "Blanc");
var blackName = NormalizePlayerName(Form.BlackName, "Noir");
return SamePlayerName(whiteName, blackName)
? "Le meme joueur ne peut pas etre renseigne des deux cotes. Choisis deux noms differents pour Blanc et Noir."
: null;
} }
private bool ResolveOnlineStatus(string subject, bool fallbackStatus) private bool ResolveOnlineStatus(string subject, bool fallbackStatus)
@@ -719,6 +802,17 @@
? "blanc" ? "blanc"
: "noir"; : "noir";
private static string NormalizePlayerName(string? value, string fallback)
=> MatchEngine.SanitizeText(value) is { Length: > 0 } normalized
? normalized
: fallback;
private static bool SamePlayerName(string? left, string? right)
=> string.Equals(
MatchEngine.SanitizeText(left) ?? string.Empty,
MatchEngine.SanitizeText(right) ?? string.Empty,
StringComparison.OrdinalIgnoreCase);
private void ResetSocialState() private void ResetSocialState()
{ {
SocialOverview = null; SocialOverview = null;