124 lines
3.8 KiB
Plaintext
124 lines
3.8 KiB
Plaintext
@using KoogleApp.Games
|
|
@using KoogleApp.Model
|
|
@using KoogleApp.Services
|
|
@using KoogleApp.Store.DayFeature
|
|
@using KoogleApp.Store.Game.Setup
|
|
@using KoogleApp.Store.Game.ThrowPanel
|
|
@using KoogleApp.Components.Controls
|
|
@using KoogleApp.Store.Player
|
|
@using Dispatcher = Fluxor.Dispatcher
|
|
|
|
@inherits FluxorComponent
|
|
|
|
@inject GameTypeService GameTypeService
|
|
@inject IState<SetupState> SetupState
|
|
@inject IState<PlayersState> PlayersState
|
|
@inject IState<DayState> DayState
|
|
@inject IDispatcher Dispatcher
|
|
|
|
<MudDialog Style="height: 800px; width:600px">
|
|
<TitleContent>
|
|
<MudText Typo="Typo.h6">
|
|
<MudIcon Icon="@Icons.Material.Filled.Start" Class="mr-3 mb-n1" />Neues Spiel starten?
|
|
</MudText>
|
|
</TitleContent>
|
|
<DialogContent>
|
|
|
|
<MudSelect T="IKnownGame" Label="Spiel" @bind-Value="_selectedGameType" HelperText="Wähle ein Spiel aus"
|
|
Converter="converter"
|
|
OpenIcon="@Icons.Material.Filled.Mode" AdornmentColor="Color.Primary">
|
|
@foreach (var item in _gameTypes)
|
|
{
|
|
<MudSelectItem T="IKnownGame" Value="@(item)">@item.Name</MudSelectItem>
|
|
}
|
|
</MudSelect>
|
|
|
|
<MudGrid>
|
|
@if (_selectedSetupComponentType is not null)
|
|
{
|
|
<MudItem xs="12">
|
|
<h4 class="mt-2">Spieleinstellungen auswählen:</h4>
|
|
</MudItem>
|
|
|
|
<MudItem xs="12">
|
|
<PlayerSelect @bind-SelectedValues="Players"/>
|
|
</MudItem>
|
|
|
|
<DynamicComponent Type="_selectedSetupComponentType"/>
|
|
}
|
|
</MudGrid>
|
|
|
|
</DialogContent>
|
|
<DialogActions>
|
|
<MudButton OnClick="Cancel">Abbrechen</MudButton>
|
|
<MudButton Color="Color.Primary" OnClick="Start">Start</MudButton>
|
|
</DialogActions>
|
|
</MudDialog>
|
|
|
|
@code {
|
|
Converter<IKnownGame> converter = new Converter<IKnownGame>
|
|
{
|
|
SetFunc = value => value?.Name,
|
|
GetFunc = text => null,
|
|
};
|
|
|
|
public IEnumerable<PlayerState> Players { get; set; }
|
|
|
|
|
|
[CascadingParameter]
|
|
private IMudDialogInstance MudDialog { get; set; }
|
|
|
|
protected override void OnAfterRender(bool firstRender)
|
|
{
|
|
if (firstRender)
|
|
{
|
|
_gameTypes.AddRange(GameTypeService.GetGameTypes());
|
|
|
|
Players = PlayersState.Value.Players.Where(p => DayState.Value.PlayerIds.Contains(p.Id)).ToList();
|
|
|
|
StateHasChanged();
|
|
}
|
|
}
|
|
|
|
Type? _selectedSetupComponentType => _selectedGameType?.SetupComponentType;
|
|
|
|
IKnownGame? _selectedGameType
|
|
{
|
|
get => SetupState.Value.Game;
|
|
set => Dispatcher.Dispatch(new SetGameAction(value));
|
|
}
|
|
|
|
private readonly List<IKnownGame> _gameTypes = [];
|
|
|
|
int[] PlayerIds => Players.Select(p => p.Id).ToArray();
|
|
|
|
public ThrowMode ThrowMode { get; set; }
|
|
|
|
[Parameter]
|
|
public string Description { get; set; } = "";
|
|
|
|
private void Cancel() => MudDialog.Cancel();
|
|
|
|
private void Start()
|
|
{
|
|
var setupModel = Activator.CreateInstance(_selectedGameType.SetupModelType) as IGameSetupModel;
|
|
setupModel.ParticipantsMode = SetupState.Value.ParticipantsMode;
|
|
setupModel.ThrowMode = SetupState.Value.ThrowMode;
|
|
setupModel.ThrowsPerRound = SetupState.Value.ThrowsPerRound;
|
|
setupModel.Participants = PlayerIds;
|
|
setupModel.DayId = DayState.Value.Id;
|
|
setupModel.KnownGameType = SetupState.Value.Game.GetType().Name;
|
|
|
|
// MudDialog.Close(DialogResult.Ok(new StartParams(
|
|
// DayState.Value.Id,
|
|
// SetupState.Value.ThrowMode,
|
|
// SetupState.Value.ThrowsPerRound,
|
|
// PlayerIds,
|
|
// SetupState.Value.ParticipantsMode,
|
|
// SetupState.Value.Game.GetType().Name
|
|
// )));
|
|
|
|
MudDialog.Close(DialogResult.Ok(setupModel));
|
|
}
|
|
}
|