152 lines
5.2 KiB
Plaintext
152 lines
5.2 KiB
Plaintext
@using Koogle.Application.Games
|
|
@using Koogle.Application.Games.Shit
|
|
@using Koogle.Application.Interfaces
|
|
@using Koogle.Domain.Enums
|
|
@using MudBlazor
|
|
|
|
@inject ITriggerService TriggerService
|
|
@implements IGameSetupControl
|
|
<MudPaper Class="pa-4">
|
|
<MudText Typo="Typo.h6" Class="mb-4">Scheiss-Spiel Einstellungen</MudText>
|
|
|
|
<MudStack Spacing="4">
|
|
<MudNumericField T="int"
|
|
@bind-Value="_options.ShitNumber"
|
|
Label="Scheiss-Zahl"
|
|
Variant="Variant.Outlined"
|
|
Min="1"
|
|
Max="9"
|
|
HelperText="Wer diese Zahl wirft, bekommt die gesammelten Punkte (1-9)" />
|
|
|
|
<MudNumericField T="int"
|
|
@bind-Value="_options.StartNumber"
|
|
Label="Start-Punkte"
|
|
Variant="Variant.Outlined"
|
|
Min="10"
|
|
Max="1000"
|
|
Step="10"
|
|
HelperText="Jeder Spieler startet mit dieser Punktzahl (10-1000)" />
|
|
|
|
<MudSelect T="ParticipantsMode"
|
|
@bind-Value="_options.ParticipantsMode"
|
|
Label="Spieler-Rotation"
|
|
Variant="Variant.Outlined"
|
|
HelperText="Automatisch: Spieler wechseln nach der Runde. Frei wählbar: Jeder kann werfen.">
|
|
<MudSelectItem Value="ParticipantsMode.GameLogic">Automatisch</MudSelectItem>
|
|
<MudSelectItem Value="ParticipantsMode.FreeToChoose">Frei wählbar</MudSelectItem>
|
|
</MudSelect>
|
|
</MudStack>
|
|
|
|
@if (!_hasExpensePointTrigger)
|
|
{
|
|
<MudAlert Severity="Severity.Warning" Class="mt-4">
|
|
<MudText Typo="Typo.body2">
|
|
<strong>Hinweis:</strong> Es ist kein "Strafpunkt"-Trigger konfiguriert.
|
|
Die Verlierer-Strafen werden nicht automatisch berechnet.
|
|
Gehe zu Stammdaten → Trigger, um einen ExpensePoint-Trigger einzurichten.
|
|
</MudText>
|
|
</MudAlert>
|
|
}
|
|
|
|
<MudDivider Class="my-4" />
|
|
|
|
<MudText Typo="Typo.body2" Color="Color.Secondary">
|
|
<strong>Spielregeln:</strong>
|
|
<ul style="margin: 8px 0 0 16px; padding: 0;">
|
|
<li>Jeder Spieler startet mit der Start-Punktzahl</li>
|
|
<li>Geworfene Kegel werden von deinen Punkten abgezogen</li>
|
|
<li>Du kannst weiterspielen oder zum nächsten Spieler übergeben</li>
|
|
<li>Wirfst du die Scheiss-Zahl oder in die Gosse, bekommst du alle gesammelten Punkte dazu</li>
|
|
<li>Wer zuerst 0 erreicht, gewinnt!</li>
|
|
<li>Die Verlierer zahlen Strafe basierend auf ihren Restpunkten</li>
|
|
</ul>
|
|
</MudText>
|
|
</MudPaper>
|
|
|
|
@code {
|
|
/// <summary>
|
|
/// Callback when setup options change.
|
|
/// </summary>
|
|
[Parameter]
|
|
public EventCallback<object> OnOptionsChanged { get; set; }
|
|
|
|
/// <summary>
|
|
/// Initial setup options.
|
|
/// </summary>
|
|
[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);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the current setup.
|
|
/// </summary>
|
|
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);
|
|
}
|
|
|
|
}
|