@using Koogle.Application.Games @using Koogle.Application.Games.Shit @using Koogle.Application.Interfaces @using Koogle.Domain.Enums @using MudBlazor @inject ITriggerService TriggerService @implements IGameSetupControl Scheiss-Spiel Einstellungen Automatisch Frei wählbar @if (!_hasExpensePointTrigger) { Hinweis: Es ist kein "Strafpunkt"-Trigger konfiguriert. Die Verlierer-Strafen werden nicht automatisch berechnet. Gehe zu Stammdaten → Trigger, um einen ExpensePoint-Trigger einzurichten. } Spielregeln:
  • Jeder Spieler startet mit der Start-Punktzahl
  • Geworfene Kegel werden von deinen Punkten abgezogen
  • Du kannst weiterspielen oder zum nächsten Spieler übergeben
  • Wirfst du die Scheiss-Zahl oder in die Gosse, bekommst du alle gesammelten Punkte dazu
  • Wer zuerst 0 erreicht, gewinnt!
  • Die Verlierer zahlen Strafe basierend auf ihren Restpunkten
@code { /// /// Callback when setup options change. /// [Parameter] public EventCallback OnOptionsChanged { get; set; } /// /// Initial setup options. /// [Parameter] public object? InitialOptions { get; set; } private ShitSetupOptionsInternal _options = new(); private bool _hasExpensePointTrigger = true; protected override async Task OnInitializedAsync() { if (InitialOptions is ShitGameSetup setup) { _options = new ShitSetupOptionsInternal { ShitNumber = setup.ShitNumber, StartNumber = setup.StartNumber, ParticipantsMode = setup.ParticipantsMode }; } // Check if ExpensePoint trigger is configured _hasExpensePointTrigger = await TriggerService.HasExpensesForTriggerAsync(ExpenseTriggerType.ExpensePoint); } protected override async Task OnAfterRenderAsync(bool firstRender) { if (firstRender) { await NotifyOptionsChanged(); } } private async Task NotifyOptionsChanged() { var setup = new ShitGameSetup { ShitNumber = _options.ShitNumber, StartNumber = _options.StartNumber, ParticipantsMode = _options.ParticipantsMode }; await OnOptionsChanged.InvokeAsync(setup); } /// /// Gets the current setup. /// public ShitGameSetup GetSetup() => new() { ShitNumber = _options.ShitNumber, StartNumber = _options.StartNumber, ParticipantsMode = _options.ParticipantsMode }; // Internal mutable class for two-way binding private class ShitSetupOptionsInternal { public int ShitNumber { get; set; } = 5; public int StartNumber { get; set; } = 50; public ParticipantsMode ParticipantsMode { get; set; } = ParticipantsMode.GameLogic; } public IGameSetupModel GameSetupModel => CreateShitSetup(); private ShitGameSetup CreateShitSetup() { // Extract game-specific options if available var shitNumber = 5; var startNumber = 50; return ShitGameSetup.Create( throwMode: ThrowMode.Reposition, throwsPerRound: int.MaxValue, participantsMode: ParticipantsMode.GameLogic, shitNumber: _options.ShitNumber, startNumber: _options.StartNumber); } }