@using System.Linq @inject IStringLocalizer localizer
@if (SelectionMode is null) {
Wie soll die Reihenfolge vergeben werden?
} else if (SelectionMode == "manual") {
Manuelle Spielerreihenfolge
@foreach (var player in Players) { }
Spieler Reihenfolge Startposition
@player.User.Username
@foreach (var number in Enumerable.Range(1, Players.Count)) { bool isUsed = Players.Any(p => p.PlayerId != player.PlayerId && p.OrderNr == number); }
@foreach (var number in Enumerable.Range(1, Players.Count)) { bool isUsed = Players.Any(p => p.PlayerId != player.PlayerId && p.StartZone == number); }
@if (!string.IsNullOrEmpty(ValidationMessage)) {
@ValidationMessage
} } else if (SelectionMode == "random") {
🎲 Die Reihenfolge wurde zufällig vergeben.
}
@code { [Parameter] public List Players { get; set; } = new(); [Parameter] public EventCallback> OnOrderChanged { get; set; } private string? SelectionMode = null; private string? ValidationMessage; private void UseManual() { SelectionMode = "manual"; foreach (var p in Players) { p.OrderNr = 0; // zurücksetzen } } private async void UseRandom() { var rnd = new Random(); // Zufällige Reihenfolge vergeben Players = Players.OrderBy(_ => rnd.Next()).ToList(); for (int i = 0; i < Players.Count; i++) { Players[i].OrderNr = i + 1; } // Startzonen zufällig verteilen var availableZones = Enumerable.Range(1, Players.Count).OrderBy(_ => rnd.Next()).ToList(); for (int i = 0; i < Players.Count; i++) { Players[i].StartZone = availableZones[i]; } SelectionMode = "random"; await OnOrderChanged.InvokeAsync(Players); } private void SetOrder(Player player, string? value) { if (int.TryParse(value, out var number)) { player.OrderNr = number; } else { player.OrderNr = 0; } } private bool IsNumberUsed(int number) { return Players.Any(p => p.OrderNr == number); } private async void FinishManual() { ValidationMessage = null; var usedOrders = Players.Select(p => p.OrderNr).Where(o => o > 0).ToList(); if (usedOrders.Count != Players.Count) { ValidationMessage = "⚠️ Es wurden noch nicht allen Spielern Nummern zugewiesen."; return; } if (usedOrders.Distinct().Count() != Players.Count) { ValidationMessage = "⚠️ Jede Nummer darf nur einmal vergeben werden."; return; } Players = Players.OrderBy(p => p.OrderNr).ToList(); await OnOrderChanged.InvokeAsync(Players); } }