fix foxhunt
This commit is contained in:
parent
2e3b6f8973
commit
c249239507
|
|
@ -122,6 +122,21 @@ namespace GoodWood.Application.Games.FoxHunt
|
||||||
|
|
||||||
var nextPlayerId = GetNextId(model, chooseNextFox);
|
var nextPlayerId = GetNextId(model, chooseNextFox);
|
||||||
|
|
||||||
|
|
||||||
|
if (chooseNextFox)
|
||||||
|
{
|
||||||
|
gameEvents.Add(new FoxChangedEvent
|
||||||
|
{
|
||||||
|
FoxPlayerId = foxId,
|
||||||
|
FoxEscaped = playerStates[foxId].FoxEscaped,
|
||||||
|
NextFoxPlayerId = nextPlayerId,
|
||||||
|
Message = playerStates[foxId].FoxEscaped
|
||||||
|
? "Fuchs entkommen! Nächster Fuchs ist dran."
|
||||||
|
: "Fuchs gefangen! Nächster Fuchs ist dran."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Check GAME END
|
// Check GAME END
|
||||||
var isGameOver = model.FoxCountLeft == 0;
|
var isGameOver = model.FoxCountLeft == 0;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ namespace GoodWood.Application.Games;
|
||||||
[JsonDerivedType(typeof(PlayerWonEvent), "PlayerWon")]
|
[JsonDerivedType(typeof(PlayerWonEvent), "PlayerWon")]
|
||||||
[JsonDerivedType(typeof(TeamWonEvent), "TeamWon")]
|
[JsonDerivedType(typeof(TeamWonEvent), "TeamWon")]
|
||||||
[JsonDerivedType(typeof(GameEndedEvent), "GameEnded")]
|
[JsonDerivedType(typeof(GameEndedEvent), "GameEnded")]
|
||||||
|
[JsonDerivedType(typeof(FoxChangedEvent), "FoxChanged")]
|
||||||
public abstract record GameEvent
|
public abstract record GameEvent
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -77,6 +78,27 @@ public record TeamWonEvent : GameEvent
|
||||||
public required IReadOnlyList<Guid> PlayerIds { get; init; }
|
public required IReadOnlyList<Guid> PlayerIds { get; init; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Event when the fox role changes (fox escaped or was caught).
|
||||||
|
/// </summary>
|
||||||
|
public record FoxChangedEvent : GameEvent
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the player who was fox.
|
||||||
|
/// </summary>
|
||||||
|
public required Guid FoxPlayerId { get; init; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// True if the fox escaped, false if caught by hunters.
|
||||||
|
/// </summary>
|
||||||
|
public bool FoxEscaped { get; init; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// ID of the next fox (null if game is over).
|
||||||
|
/// </summary>
|
||||||
|
public Guid? NextFoxPlayerId { get; init; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Event when the game ends (covers any end scenario).
|
/// Event when the game ends (covers any end scenario).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -34,6 +34,11 @@
|
||||||
<MudText Typo="Typo.h4" Color="Color.Warning">Spiel beendet!</MudText>
|
<MudText Typo="Typo.h4" Color="Color.Warning">Spiel beendet!</MudText>
|
||||||
<MudText Typo="Typo.h5">@GameEndedMessage</MudText>
|
<MudText Typo="Typo.h5">@GameEndedMessage</MudText>
|
||||||
}
|
}
|
||||||
|
else if (!string.IsNullOrEmpty(FoxChangedMessage))
|
||||||
|
{
|
||||||
|
<MudIcon Icon="@Icons.Material.Filled.Pets" Color="Color.Info" Size="Size.Large" Style="font-size: 4rem;" />
|
||||||
|
<MudText Typo="Typo.h5">@FoxChangedMessage</MudText>
|
||||||
|
}
|
||||||
else if (EliminatedPlayers.Count > 0)
|
else if (EliminatedPlayers.Count > 0)
|
||||||
{
|
{
|
||||||
<MudIcon Icon="@Icons.Material.Filled.PersonOff" Color="Color.Error" Size="Size.Large" Style="font-size: 4rem;" />
|
<MudIcon Icon="@Icons.Material.Filled.PersonOff" Color="Color.Error" Size="Size.Large" Style="font-size: 4rem;" />
|
||||||
|
|
@ -83,5 +88,8 @@
|
||||||
[Parameter]
|
[Parameter]
|
||||||
public string? GameEndedMessage { get; set; }
|
public string? GameEndedMessage { get; set; }
|
||||||
|
|
||||||
|
[Parameter]
|
||||||
|
public string? FoxChangedMessage { get; set; }
|
||||||
|
|
||||||
private void Close() => MudDialog.Close(DialogResult.Ok(true));
|
private void Close() => MudDialog.Close(DialogResult.Ok(true));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,7 @@
|
||||||
string? winningTeamName = null;
|
string? winningTeamName = null;
|
||||||
string? winningTeamMessage = null;
|
string? winningTeamMessage = null;
|
||||||
string? gameEndedMessage = null;
|
string? gameEndedMessage = null;
|
||||||
|
string? foxChangedMessage = null;
|
||||||
|
|
||||||
foreach (var evt in newEvents)
|
foreach (var evt in newEvents)
|
||||||
{
|
{
|
||||||
|
|
@ -69,11 +70,14 @@
|
||||||
case GameEndedEvent ended when ended.WinnerId == null && string.IsNullOrEmpty(ended.WinningTeamName):
|
case GameEndedEvent ended when ended.WinnerId == null && string.IsNullOrEmpty(ended.WinningTeamName):
|
||||||
gameEndedMessage = ended.Message ?? "Spiel beendet ohne Sieger";
|
gameEndedMessage = ended.Message ?? "Spiel beendet ohne Sieger";
|
||||||
break;
|
break;
|
||||||
|
case FoxChangedEvent foxChanged:
|
||||||
|
foxChangedMessage = foxChanged.Message;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only show dialog if there's something to show
|
// Only show dialog if there's something to show
|
||||||
if (eliminatedPlayers.Count == 0 && winnerName == null && winningTeamName == null && gameEndedMessage == null)
|
if (eliminatedPlayers.Count == 0 && winnerName == null && winningTeamName == null && gameEndedMessage == null && foxChangedMessage == null)
|
||||||
{
|
{
|
||||||
_isShowingDialog = false;
|
_isShowingDialog = false;
|
||||||
return;
|
return;
|
||||||
|
|
@ -87,7 +91,8 @@
|
||||||
{ x => x.WinnerMessage, winnerMessage },
|
{ x => x.WinnerMessage, winnerMessage },
|
||||||
{ x => x.WinningTeamName, winningTeamName },
|
{ x => x.WinningTeamName, winningTeamName },
|
||||||
{ x => x.WinningTeamMessage, winningTeamMessage },
|
{ x => x.WinningTeamMessage, winningTeamMessage },
|
||||||
{ x => x.GameEndedMessage, gameEndedMessage }
|
{ x => x.GameEndedMessage, gameEndedMessage },
|
||||||
|
{ x => x.FoxChangedMessage, foxChangedMessage }
|
||||||
};
|
};
|
||||||
|
|
||||||
var options = new DialogOptions
|
var options = new DialogOptions
|
||||||
|
|
@ -101,7 +106,9 @@
|
||||||
|
|
||||||
var title = (action.IsGameOver && (winnerName != null || winningTeamName != null)) || gameEndedMessage != null
|
var title = (action.IsGameOver && (winnerName != null || winningTeamName != null)) || gameEndedMessage != null
|
||||||
? "Spiel beendet!"
|
? "Spiel beendet!"
|
||||||
: "Spieler ausgeschieden!";
|
: foxChangedMessage != null
|
||||||
|
? "Fuchswechsel!"
|
||||||
|
: "Spieler ausgeschieden!";
|
||||||
|
|
||||||
await InvokeAsync(async () =>
|
await InvokeAsync(async () =>
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue