improvements

This commit is contained in:
Michal Vrba
2026-09-04 10:01:22 +02:00
parent 9005b4b9be
commit 7ca0e08637
15 changed files with 715 additions and 65 deletions
+82 -6
View File
@@ -17,6 +17,7 @@ else
<!-- Horná lišta -->
<header class="game-header">
<div style="display: flex; align-items: center; gap: 10px;">
<img src="assets/logo/logo_2_modern.jpg" style="width: 34px; height: 34px; border-radius: 50%; border: 1.5px solid #00e5ff; object-fit: cover; box-shadow: 0 0 12px rgba(0,229,255,0.6);" alt="Logo" />
<h1 class="game-title">FARAÓN</h1>
@if (Engine.State.Rules.OlympicMode)
{
@@ -25,20 +26,21 @@ else
</span>
}
</div>
<div style="display: flex; align-items: center; gap: 12px;">
<div style="display: flex; align-items: center; gap: 8px;">
<!-- Rýchlosť hry -->
<button class="btn-speed-control" @onclick="CycleSpeed" title="Zmeniť rýchlosť hry">
@GetSpeedButtonText(Engine.State.Rules.SpeedLevel)
</button>
<!-- Zvuk -->
<button class="btn-header-action" @onclick="ToggleMute" title="@(IsMuted ? "Zapnúť zvuk" : "Stlmiť zvuk")">
@(IsMuted ? "🔇" : "🔊")
<button class="btn-header-action @(IsMuted ? "btn-sound-muted" : "")" @onclick="ToggleMute" title="@(IsMuted ? "Zapnúť zvuk" : "Stlmiť zvuk")">
<span>@(IsMuted ? "🔇" : "🔊")</span>
</button>
<!-- Nová hra -->
<!-- Menu -->
<button class="btn-header-action" @onclick="ReturnToLobby" title="Späť do menu">
⚙️ Menu
<span style="font-size: 0.9rem;">⚙️</span>
<span>Menu</span>
</button>
</div>
</header>
@@ -174,7 +176,7 @@ else
}
<div style="display: flex; align-items: center; gap: 8px;">
<span class="avatar-icon">@ViewingPlayer.Avatar</span>
<span class="avatar-icon">@ViewingPlayer.GetLiveAvatar()</span>
<span class="avatar-name">
@ViewingPlayer.Name
@if (ViewingPlayer.Type == PlayerType.AI)
@@ -475,6 +477,40 @@ else
}
}
// Dynamické emócie hráčov na herné udalosti
if (e.SourcePlayer != null)
{
switch (e.Type)
{
case GameEventType.AceSkipped:
SetPlayerEmotion(e.SourcePlayer, PlayerEmotion.Freezing, 3500);
break;
case GameEventType.AceCountered:
case GameEventType.SevenCanceled:
SetPlayerEmotion(e.SourcePlayer, PlayerEmotion.Relieved, 3000);
break;
case GameEventType.CardsBurned:
SetPlayerEmotion(e.SourcePlayer, PlayerEmotion.Confident, 3500);
break;
case GameEventType.PlayerFinished:
case GameEventType.MatchWon:
SetPlayerEmotion(e.SourcePlayer, PlayerEmotion.Celebrating, 10000);
break;
}
}
if (e.TargetPlayer != null)
{
switch (e.Type)
{
case GameEventType.SevenStacked:
SetPlayerEmotion(e.TargetPlayer, e.ExtraData >= 6 ? PlayerEmotion.Shocked : PlayerEmotion.Angry, 3500);
break;
case GameEventType.PlayerRevived:
SetPlayerEmotion(e.TargetPlayer, PlayerEmotion.Confident, 3500);
break;
}
}
if (Engine != null && Engine.State.CurrentPlayer.Hand.Count == 1 && !Engine.State.CurrentPlayer.HasFinished)
{
await Fx.PlayHeartbeatAsync();
@@ -746,6 +782,27 @@ else
var aiPlayer = Engine.State.CurrentPlayer;
if (aiPlayer.Type != PlayerType.AI) return;
if (aiPlayer.Hand.Count <= 2)
{
SetPlayerEmotion(aiPlayer, PlayerEmotion.Confident, 3500);
}
else if (aiPlayer.Hand.Count >= 8)
{
SetPlayerEmotion(aiPlayer, PlayerEmotion.Desperate, 3500);
}
else if (Engine.State.PendingSkip)
{
SetPlayerEmotion(aiPlayer, PlayerEmotion.Freezing, 3500);
}
else if (Engine.State.PendingDrawCount > 0)
{
SetPlayerEmotion(aiPlayer, PlayerEmotion.Shocked, 3500);
}
else
{
SetPlayerEmotion(aiPlayer, PlayerEmotion.Thinking, 3500);
}
if (Engine.State.Rules.AIHumanMode)
{
string thought = AIDialogueService.GetThinkingDialogue(aiPlayer, Engine.State);
@@ -962,6 +1019,25 @@ else
});
}
private void SetPlayerEmotion(Player player, PlayerEmotion emotion, int durationMs = 3000)
{
player.CurrentEmotion = emotion;
StateHasChanged();
if (emotion != PlayerEmotion.Neutral && emotion != PlayerEmotion.Celebrating)
{
_ = Task.Run(async () =>
{
await Task.Delay(durationMs);
if (player.CurrentEmotion == emotion)
{
player.CurrentEmotion = PlayerEmotion.Neutral;
await InvokeAsync(StateHasChanged);
}
});
}
}
private IEnumerable<(Player Player, string PositionClass)> GetOpponents()
{
if (Engine == null) return Enumerable.Empty<(Player, string)>();