feat: add characters

This commit is contained in:
2026-07-10 00:56:58 +03:30
parent 7c067d36f2
commit 97d156c492
28 changed files with 486 additions and 94 deletions
@@ -11,6 +11,7 @@ import '../../../../core/locator/locator.dart';
import '../../../../core/network/ws_client.dart';
import '../../../../core/service/app_sounds.dart';
import '../../../../core/theme/app_theme.dart';
import '../../../../core/widgets/player_avatar.dart';
import '../../../shop/data/data_source/remote/frame_api_provider.dart';
import '../../../tournament/data/data_source/remote/tournament_api_provider.dart';
import '../../../tournament/domain/entities/tournament.dart';
@@ -39,7 +40,6 @@ class GameScreen extends StatefulWidget {
class _GameScreenState extends State<GameScreen> {
late final HokmGame _game;
String _carpet = 'classic'; // فرشِ انتخابی (برای پس‌زمینه‌ی پشتِ صحنه)
Timer? _introTimer;
bool _introHidden = false;
int _countdown = 0; // شمارشِ معکوسِ شروعِ بازی پس از یافتنِ حریفان (۳…۲…۱)
@@ -50,11 +50,12 @@ class _GameScreenState extends State<GameScreen> {
super.initState();
final ws = context.read<WalletBloc>().state.walletStatus;
final skin = ws is WalletLoaded ? ws.wallet.selectedCard : 'simple';
_carpet = ws is WalletLoaded ? ws.wallet.selectedCarpet : 'classic';
// URL کاملِ فرش از سرور می‌آید (خالی ⇒ میزِ کلاسیک).
final carpetUrl = ws is WalletLoaded ? ws.wallet.selectedCarpetImg : '';
_game = HokmGame(
context.read<GameBloc>(),
skin: skin.isEmpty ? 'simple' : skin,
carpet: _carpet.isEmpty ? 'classic' : _carpet,
carpetUrl: carpetUrl,
);
_loadTournament();
locator<FrameApiProvider>().warmCache(); // رنگِ قاب‌ها برای HUD (best-effort)
@@ -253,7 +253,10 @@ class _SearchSlot extends StatelessWidget {
)
: ClipRRect(
borderRadius: BorderRadius.circular(8),
child: RandomAvatar(p.avatarSeed),
child: PlayerAvatar(
seed: p.avatarSeed,
imageUrl: p.avatarImg,
),
),
),
const SizedBox(height: 2),
@@ -4,11 +4,11 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:go_router/go_router.dart';
import 'package:random_avatar/random_avatar.dart';
import '../../../../core/network/ws_client.dart';
import '../../../../core/theme/app_theme.dart';
import '../../../../core/widgets/game_ui.dart';
import '../../../../core/widgets/player_avatar.dart';
import '../bloc/game_bloc.dart';
import '../bloc/game_state.dart';
import 'game_screen.dart';
@@ -253,7 +253,10 @@ class _LobbyViewState extends State<_LobbyView> {
)
: ClipRRect(
borderRadius: BorderRadius.circular(9),
child: RandomAvatar(p.avatarSeed),
child: PlayerAvatar(
seed: p.avatarSeed,
imageUrl: p.avatarImg,
),
),
),
if (!empty)