This commit is contained in:
Michal Vrba
2026-09-03 17:25:35 +02:00
parent 5d9194e14f
commit 00aa94ea7c
8 changed files with 323 additions and 18 deletions
+31 -6
View File
@@ -24,9 +24,9 @@ else
</span>
}
</div>
<div style="font-size: 0.95rem; font-weight: 700; color: #a3b899;">
<div class="turn-header-info">
Ťah #@Engine.State.TurnCount &bull; Na rade:
<span style="color: var(--gold); font-weight: 900;">
<span class="active-turn-header-player">
@Engine.State.CurrentPlayer.Avatar @Engine.State.CurrentPlayer.Name
</span>
</div>
@@ -98,13 +98,20 @@ else
</div>
<!-- Spodný slot: Aktívny hráč v zobrazení -->
<div class="slot-bottom">
<div class="slot-bottom @(IsViewingPlayerTurn ? "active-turn-slot" : "")">
<div class="avatar-badge @(IsViewingPlayerTurn ? "active-turn" : "") @(ViewingPlayer.IsSkipped ? "is-skipped" : "")"
style="margin-bottom: 8px;">
@if (IsViewingPlayerTurn && !ViewingPlayer.HasFinished && !ViewingPlayer.IsEliminated)
{
<div class="turn-indicator-badge">
<span class="turn-indicator-dot"></span>
<span class="turn-indicator-text">SI NA ŤAHU</span>
</div>
}
<div style="display: flex; align-items: center; gap: 8px;">
<span class="avatar-icon">@ViewingPlayer.Avatar</span>
<span class="avatar-name">@ViewingPlayer.Name</span>
<span class="avatar-card-count">(@ViewingPlayer.Hand.Count kariet)</span>
<span class="avatar-card-count">(@ViewingPlayer.Hand.Count @(ViewingPlayer.Hand.Count == 1 ? "karta" : (ViewingPlayer.Hand.Count < 5 ? "karty" : "kariet")))</span>
@if (Engine.State.Rules.OlympicMode)
{
<span style="font-size: 0.75rem; color: var(--gold); background: rgba(0,0,0,0.4); padding: 2px 8px; border-radius: 10px; border: 1px solid rgba(245, 176, 65, 0.4);">
@@ -211,6 +218,7 @@ else
private List<Player> ConfiguredPlayers = new();
private RuleOptions ConfiguredRules = new();
private Player? _previousTurnPlayer;
private Player ViewingPlayer
{
@@ -260,6 +268,7 @@ else
Engine.OnGameEvent += HandleGameEvent;
Engine.StartGame(gamePlayers, ConfiguredRules);
_previousTurnPlayer = Engine.State.CurrentPlayer;
IsInLobby = false;
LastEventMessage = "Hra začala! Veľa šťastia.";
@@ -282,7 +291,7 @@ else
await Fx.PlayCardDrawAsync();
break;
case GameEventType.SevenStacked:
await Fx.PlaySevenStackAsync(Math.Max(1, e.ExtraData / 2));
await Fx.PlaySevenStackAsync(Math.Max(1, e.ExtraData / 3));
await Fx.TriggerDopamineBannerAsync($"🔥 +{e.ExtraData} KARIET!", "Trestná reťaz sediem", "triple");
break;
case GameEventType.AceSkipped:
@@ -297,7 +306,6 @@ else
break;
case GameEventType.CardsBurned:
await Fx.PlayBurnExplosionAsync();
await Fx.TriggerDopamineBannerAsync("💥 SPÁLENÉ!", "Zhoda 4 kariet na stole", "quad");
break;
case GameEventType.PlayerFinished:
case GameEventType.MatchWon:
@@ -311,10 +319,27 @@ else
await Fx.PlayHeartbeatAsync();
}
await CheckTurnTransitionAsync();
StateHasChanged();
});
}
private async Task CheckTurnTransitionAsync()
{
if (Engine == null || Engine.State.Players.Count == 0 || Engine.State.IsGameOver) return;
var current = Engine.State.CurrentPlayer;
if (_previousTurnPlayer != null && _previousTurnPlayer != current)
{
var prev = _previousTurnPlayer;
_previousTurnPlayer = current;
await Fx.AnimateTurnTransitionAsync(GetPlayerPosition(prev), GetPlayerPosition(current));
}
else
{
_previousTurnPlayer = current;
}
}
private string GetPlayerPosition(Player player)
{
if (player == ViewingPlayer) return "bottom";