improvements
This commit is contained in:
@@ -15,7 +15,15 @@ else
|
||||
|
||||
<!-- Horná lišta -->
|
||||
<header class="game-header">
|
||||
<h1 class="game-title">FARAÓN</h1>
|
||||
<div style="display: flex; align-items: center; gap: 10px;">
|
||||
<h1 class="game-title">FARAÓN</h1>
|
||||
@if (Engine.State.Rules.OlympicMode)
|
||||
{
|
||||
<span style="background: linear-gradient(135deg, #f5b041, #d4ac0d); color: #1a1a1a; font-weight: 900; font-size: 0.78rem; padding: 2px 10px; border-radius: 12px; letter-spacing: 0.5px;">
|
||||
🏅 KOLO #@Engine.State.RoundNumber
|
||||
</span>
|
||||
}
|
||||
</div>
|
||||
<div style="font-size: 0.95rem; font-weight: 700; color: #a3b899;">
|
||||
Ťah #@Engine.State.TurnCount • Na rade:
|
||||
<span style="color: var(--gold); font-weight: 900;">
|
||||
@@ -24,8 +32,8 @@ else
|
||||
</div>
|
||||
<div class="game-controls">
|
||||
<!-- Rýchly prepínač balíčka kariet -->
|
||||
<button class="btn-game-icon" title="Zmeniť balíček kariet (Original / SpongeBob)" @onclick="ToggleDeck">
|
||||
@(Engine.State.Rules.SelectedDeck == "spongebob" ? "🧽" : "🎴")
|
||||
<button class="btn-game-icon" title="Zmeniť balíček kariet (@Engine.State.Rules.SelectedDeck)" @onclick="ToggleDeck">
|
||||
@GetDeckIcon(Engine.State.Rules.SelectedDeck)
|
||||
</button>
|
||||
<button class="btn-game-icon" title="Stlmiť / Zapnúť zvuk" @onclick="ToggleMute">
|
||||
@(IsMuted ? "🔇" : "🔊")
|
||||
@@ -43,6 +51,7 @@ else
|
||||
{
|
||||
<PlayerSlot Player="@opp.Player"
|
||||
IsCurrentTurn="@(Engine.State.CurrentPlayer == opp.Player)"
|
||||
IsOlympicMode="@Engine.State.Rules.OlympicMode"
|
||||
PositionClass="@opp.PositionClass" />
|
||||
}
|
||||
|
||||
@@ -96,21 +105,36 @@ else
|
||||
<span class="avatar-icon">@ViewingPlayer.Avatar</span>
|
||||
<span class="avatar-name">@ViewingPlayer.Name</span>
|
||||
<span class="avatar-card-count">(@ViewingPlayer.Hand.Count 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);">
|
||||
🏅 @ViewingPlayer.OlympicCardsCount @(ViewingPlayer.OlympicCardsCount == 1 ? "karta" : (ViewingPlayer.OlympicCardsCount < 5 ? "karty" : "kariet"))
|
||||
</span>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Interaktívna ruka hráča -->
|
||||
<PlayerHandView Player="@ViewingPlayer"
|
||||
Deck="@Engine.State.Rules.SelectedDeck"
|
||||
IsMyTurn="@IsViewingPlayerTurn"
|
||||
CanPlayCardFunc="@(c => Engine.CanPlayCard(ViewingPlayer, c))"
|
||||
CanPlayCardsFunc="@(cards => Engine.CanPlayCards(ViewingPlayer, cards))"
|
||||
OnPlayCards="HandlePlayCards" />
|
||||
@if (!ViewingPlayer.IsEliminated)
|
||||
{
|
||||
<PlayerHandView Player="@ViewingPlayer"
|
||||
Deck="@Engine.State.Rules.SelectedDeck"
|
||||
IsMyTurn="@IsViewingPlayerTurn"
|
||||
CanPlayCardFunc="@(c => Engine.CanPlayCard(ViewingPlayer, c))"
|
||||
CanPlayCardsFunc="@(cards => Engine.CanPlayCards(ViewingPlayer, cards))"
|
||||
OnPlayCards="HandlePlayCards" />
|
||||
}
|
||||
else
|
||||
{
|
||||
<div style="padding: 20px; color: #ef4444; font-weight: 800; font-size: 1.1rem; text-shadow: 0 2px 8px rgba(0,0,0,0.8);">
|
||||
☠️ Bol si vyradený z Olympijského turnaja. Sleduj zápas až do konca!
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Akčné tlačidlá pre aktívneho živého hráča -->
|
||||
@if (IsViewingPlayerTurn && Engine.State.TurnState == TurnState.Playing)
|
||||
@if (IsViewingPlayerTurn && Engine.State.TurnState == TurnState.Playing && !ViewingPlayer.IsEliminated)
|
||||
{
|
||||
<div style="position: absolute; bottom: 18px; right: 24px; z-index: 60; display: flex; gap: 10px;">
|
||||
@if (CheckFourOfAKindRank(ViewingPlayer) is Rank burnRank)
|
||||
@@ -158,9 +182,20 @@ else
|
||||
<PassScreenModal Player="@Engine.State.CurrentPlayer" OnContinue="HandlePassContinue" />
|
||||
}
|
||||
|
||||
@if (Engine.State.TurnState == TurnState.RoundOver)
|
||||
{
|
||||
<RoundOverModal RoundNumber="@Engine.State.RoundNumber"
|
||||
RoundLoser="@Engine.State.RoundLoser"
|
||||
Players="@Engine.State.Players"
|
||||
OnNextRound="HandleStartNextRound"
|
||||
OnBackToLobby="ReturnToLobby" />
|
||||
}
|
||||
|
||||
@if (Engine.State.IsGameOver)
|
||||
{
|
||||
<GameOverModal Players="@Engine.State.Players"
|
||||
IsOlympicMode="@Engine.State.Rules.OlympicMode"
|
||||
MatchWinner="@Engine.State.MatchWinner"
|
||||
OnPlayAgain="HandlePlayAgain"
|
||||
OnBackToLobby="ReturnToLobby" />
|
||||
}
|
||||
@@ -285,13 +320,29 @@ else
|
||||
return "top";
|
||||
}
|
||||
|
||||
private static readonly string[] AvailableDecks = new[] { "original", "janosik", "spongebob", "cyberpunk", "fantasy", "egypt", "pets", "pixel" };
|
||||
|
||||
private void ToggleDeck()
|
||||
{
|
||||
if (Engine == null) return;
|
||||
Engine.State.Rules.SelectedDeck = Engine.State.Rules.SelectedDeck == "spongebob" ? "original" : "spongebob";
|
||||
int currentIdx = Array.IndexOf(AvailableDecks, Engine.State.Rules.SelectedDeck);
|
||||
int nextIdx = (currentIdx + 1) % AvailableDecks.Length;
|
||||
Engine.State.Rules.SelectedDeck = AvailableDecks[nextIdx];
|
||||
StateHasChanged();
|
||||
}
|
||||
|
||||
private string GetDeckIcon(string deck) => deck switch
|
||||
{
|
||||
"janosik" => "🪓",
|
||||
"spongebob" => "🧽",
|
||||
"cyberpunk" => "⚡",
|
||||
"fantasy" => "🐉",
|
||||
"egypt" => "⚔️",
|
||||
"pets" => "🐱",
|
||||
"pixel" => "🕹️",
|
||||
_ => "🎴"
|
||||
};
|
||||
|
||||
private async Task HandlePlayCards(List<Card> cards)
|
||||
{
|
||||
if (Engine == null || cards.Count == 0) return;
|
||||
@@ -349,6 +400,14 @@ else
|
||||
CheckTriggerAI();
|
||||
}
|
||||
|
||||
private void HandleStartNextRound()
|
||||
{
|
||||
if (Engine == null) return;
|
||||
Engine.StartNextRound();
|
||||
StateHasChanged();
|
||||
CheckTriggerAI();
|
||||
}
|
||||
|
||||
private async Task HandleBurn(Rank rank)
|
||||
{
|
||||
if (Engine == null) return;
|
||||
|
||||
Reference in New Issue
Block a user