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
+31 -9
View File
@@ -1,8 +1,12 @@
@namespace Faraon.Client.Components
@using Faraon.Core.AI
<div class="lobby-screen">
<div class="lobby-container">
<div class="lobby-header">
<div class="lobby-logo-wrapper">
<img src="assets/logo/logo_2_modern.jpg" class="lobby-logo-img" alt="FARAÓN Logo" />
</div>
<h1 class="lobby-title">FARAÓN</h1>
<div class="lobby-subtitle">Tradičná mariášová kartová hra s moderným nábojom</div>
</div>
@@ -43,13 +47,14 @@
<option value="@PlayerType.AI">🤖 AI Počítač</option>
</select>
<!-- Obtiažnosť AI (ak je AI) -->
<!-- Výber AI osobnosti a obtiažnosti (ak je AI) -->
@if (p.Type == PlayerType.AI)
{
<select class="player-setup-select" @bind="p.Difficulty">
<option value="@AIDifficulty.Easy">🌱 Začiatočník (Ľahký)</option>
<option value="@AIDifficulty.Medium">⚔️ Taktik (Stredný)</option>
<option value="@AIDifficulty.Hard">🔥 Veľmajster (Ťažký)</option>
<select class="player-setup-select" style="font-weight: 700; color: var(--gold);" value="@(p.PersonalityId ?? "fox")" @onchange="(e) => SelectPersonality(idx, e.Value?.ToString())">
@foreach (var pers in AIPersonality.All)
{
<option value="@pers.Id">@pers.BaseAvatar @pers.Name (@GetDiffLabel(pers.Difficulty))</option>
}
</select>
}
</div>
@@ -255,9 +260,9 @@
private List<Player> PlayerConfigs = new()
{
new Player("Ty (Hráč 1)", PlayerType.Human, "👑"),
new Player("AI Jano", PlayerType.AI, "🦊", AIDifficulty.Medium),
new Player("AI Zuzka", PlayerType.AI, "👸", AIDifficulty.Hard),
new Player("AI Mišo", PlayerType.AI, "🤖", AIDifficulty.Easy)
new Player(AIPersonality.Fox.Name, PlayerType.AI, AIPersonality.Fox.BaseAvatar, AIPersonality.Fox.Difficulty, AIPersonality.Fox.Id),
new Player(AIPersonality.Queen.Name, PlayerType.AI, AIPersonality.Queen.BaseAvatar, AIPersonality.Queen.Difficulty, AIPersonality.Queen.Id),
new Player(AIPersonality.Robot.Name, PlayerType.AI, AIPersonality.Robot.BaseAvatar, AIPersonality.Robot.Difficulty, AIPersonality.Robot.Id)
};
private void SetPlayerCount(int count)
@@ -272,10 +277,27 @@
PlayerConfigs[index].Avatar = Avatars[nextIdx];
}
private void SelectPersonality(int index, string? personalityId)
{
if (string.IsNullOrEmpty(personalityId)) return;
var pers = AIPersonality.GetById(personalityId);
PlayerConfigs[index].PersonalityId = pers.Id;
PlayerConfigs[index].Name = pers.Name;
PlayerConfigs[index].Avatar = pers.BaseAvatar;
PlayerConfigs[index].Difficulty = pers.Difficulty;
}
private string GetDiffLabel(AIDifficulty diff) => diff switch
{
AIDifficulty.Easy => "Ľahký",
AIDifficulty.Hard => "Veľmajster",
_ => "Taktik"
};
private async Task StartGame()
{
var activePlayers = PlayerConfigs.Take(SelectedPlayerCount).Select(p =>
new Player(p.Name, p.Type, p.Avatar, p.Difficulty)
new Player(p.Name, p.Type, p.Avatar, p.Difficulty, p.PersonalityId)
).ToList();
await OnStartGame.InvokeAsync((activePlayers, Rules));
+8 -2
View File
@@ -1,7 +1,7 @@
@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" : "")">
<div class="avatar-badge @(IsFrozen ? "is-frozen" : (IsCurrentTurn ? "active-turn" : "")) @(Player.HasFinished ? "is-finished" : "") @(CanBeRevived && Player.HasFinished && ReviveTurnsRemaining > 0 ? "can-be-revived" : "") emotion-aura-@Player.CurrentEmotion.ToString().ToLowerInvariant()">
@if (IsFrozen && !Player.HasFinished && !Player.IsEliminated)
{
<div class="frozen-indicator-badge">
@@ -24,7 +24,13 @@
</div>
}
<div class="avatar-icon">@Player.Avatar</div>
<div class="avatar-icon-wrapper emotion-anim-@Player.CurrentEmotion.ToString().ToLowerInvariant()">
<span class="avatar-icon">@Player.GetLiveAvatar()</span>
@if (!Player.HasFinished && !Player.IsEliminated && Player.GetEmotionBadge() != null)
{
<span class="avatar-emotion-dot-badge">@Player.GetEmotionBadge()</span>
}
</div>
<div class="avatar-name">
@Player.Name
@if (Player.Type == PlayerType.AI)