Files
FaraonCardGame/Faraon.Client/Components/PlayerSlot.razor
T
2026-09-03 21:11:25 +02:00

112 lines
4.4 KiB
Plaintext

@namespace Faraon.Client.Components
<div class="player-slot @PositionClass @(IsFrozen ? "frozen-slot" : (IsCurrentTurn ? "active-turn-slot" : ""))">
<div class="avatar-badge @(IsFrozen ? "is-frozen" : (IsCurrentTurn ? "active-turn" : "")) @(Player.HasFinished ? "is-finished" : "") @(CanBeRevived && Player.HasFinished && ReviveTurnsRemaining > 0 ? "can-be-revived" : "")">
@if (IsFrozen && !Player.HasFinished && !Player.IsEliminated)
{
<div class="frozen-indicator-badge">
<span class="frozen-indicator-dot"></span>
<span class="frozen-indicator-text">❄️ ZMRAZENÝ</span>
</div>
}
else if (IsCurrentTurn && !Player.HasFinished && !Player.IsEliminated)
{
<div class="turn-indicator-badge">
<span class="turn-indicator-dot"></span>
<span class="turn-indicator-text">NA ŤAHU</span>
</div>
}
@if (Player.HasFinished)
{
<div class="badge-finished-pos">
@Player.FinishedPosition
</div>
}
<div class="avatar-icon">@Player.Avatar</div>
<div class="avatar-name">
@Player.Name
@if (Player.Type == PlayerType.AI)
{
<span style="font-size: 0.7rem; opacity: 0.8;">(AI)</span>
}
</div>
<div class="avatar-card-count">
@if (Player.IsEliminated)
{
<span style="color: #ef4444; font-weight: 800;">☠️ Vyradený</span>
}
else if (Player.HasFinished)
{
<span>Skončil 🏆</span>
}
else
{
<span>@Player.Hand.Count @(Player.Hand.Count == 1 ? "karta" : (Player.Hand.Count < 5 ? "karty" : "kariet"))</span>
}
@if (IsOlympicMode)
{
<div style="font-size: 0.72rem; color: var(--gold); margin-top: 2px;">
🏅 @Player.OlympicCardsCount @(Player.OlympicCardsCount == 1 ? "karta" : (Player.OlympicCardsCount < 5 ? "karty" : "kariet"))
</div>
}
</div>
@if (IsFrozen && !Player.HasFinished && !Player.IsEliminated)
{
<div class="icicles-row">
<span class="icicle"></span>
<span class="icicle"></span>
<span class="icicle"></span>
<span class="icicle"></span>
<span class="icicle"></span>
<span class="icicle"></span>
<span class="icicle"></span>
</div>
}
@if (CanBeRevived && Player.HasFinished && ReviveTurnsRemaining > 0)
{
<div class="revive-countdown-badge" title="Tento hráč môže byť vrátený do hry Červenou sedmou!">
<span class="heartbeat-icon">❤️</span>
<span>
@(ReviveRoundsRemaining > 1 ? $"Oživenie: {ReviveRoundsRemaining} kolá" : (ReviveTurnsRemaining <= 1 ? "Oživenie: 1 ťah" : "Oživenie: 1 kolo"))
</span>
</div>
}
@if (!string.IsNullOrEmpty(ThoughtBubble))
{
<div class="ai-thought-bubble @PositionClass @(IsThoughtFadingOut ? "fading-out" : "")">
<span class="thought-bubble-prefix">💭</span>
<span class="thought-bubble-text">@ThoughtBubble</span>
</div>
}
</div>
<!-- Mini karty pre vizuálny odpočet kariet v ruke -->
@if (!Player.HasFinished && !Player.IsEliminated)
{
<div class="opponent-mini-cards">
@for (int i = 0; i < Math.Min(Player.Hand.Count, 8); i++)
{
<div class="mini-card-back"></div>
}
</div>
}
</div>
@code {
[Parameter, EditorRequired] public Player Player { get; set; } = default!;
[Parameter] public bool IsCurrentTurn { get; set; } = false;
[Parameter] public bool IsFrozen { get; set; } = false;
[Parameter] public bool CanBeRevived { get; set; } = false;
[Parameter] public int ReviveRoundsRemaining { get; set; } = 0;
[Parameter] public int ReviveTurnsRemaining { get; set; } = 0;
[Parameter] public string? ThoughtBubble { get; set; }
[Parameter] public bool IsThoughtFadingOut { get; set; } = false;
[Parameter] public bool IsOlympicMode { get; set; } = false;
[Parameter] public string PositionClass { get; set; } = "slot-top";
}