feat: add coin private table

This commit is contained in:
2026-07-04 12:45:52 +03:30
parent 7acd72c286
commit c2356b3242
4 changed files with 75 additions and 7 deletions
@@ -59,8 +59,10 @@ class GameBloc extends Bloc<GameEvent, GameUiState> {
emit(state.copyWith(chatBubbles: next));
});
on<LeaveGameEvent>((event, emit) => repository.send({'type': 'leave'}));
on<StartTableEvent>((event, emit) =>
repository.send({'type': 'start_table', 'hands': event.hands}));
on<StartTableEvent>((event, emit) => repository.send(
{'type': 'start_table', 'hands': event.hands, 'stake': event.stake}));
on<SetStakeEvent>((event, emit) =>
repository.send({'type': 'set_stake', 'stake': event.stake}));
on<RotateTableEvent>((event, emit) =>
repository.send({'type': 'rotate_table', 'dir': event.dir}));
on<LeaveTableEvent>((event, emit) => repository.send({'type': 'leave_table'}));
@@ -115,7 +117,9 @@ class GameBloc extends Bloc<GameEvent, GameUiState> {
void sendChatEmoji(String emoji) => add(SendChatEvent(emoji: emoji));
void playCard(String card) => add(PlayCardEvent(card));
void leave() => add(LeaveGameEvent());
void startTable(int hands) => add(StartTableEvent(hands));
void startTable(int hands, {int stake = 0}) =>
add(StartTableEvent(hands, stake: stake));
void setStake(int stake) => add(SetStakeEvent(stake));
void rotateTable(int dir) => add(RotateTableEvent(dir));
void leaveTable() => add(LeaveTableEvent());
void clearNotice() => add(ClearNoticeEvent());
@@ -50,7 +50,13 @@ class LeaveGameEvent extends GameEvent {}
class StartTableEvent extends GameEvent {
final int hands; // تعداد دستِ انتخابی (۳/۵/۷)
StartTableEvent(this.hands);
final int stake; // شرطِ سکه‌ایِ هر بازیکن
StartTableEvent(this.hands, {this.stake = 0});
}
class SetStakeEvent extends GameEvent {
final int stake; // شرطِ سکه‌ایِ میز (تنظیمِ زنده‌ی میزبان)
SetStakeEvent(this.stake);
}
class RotateTableEvent extends GameEvent {
@@ -19,6 +19,7 @@ class TableLobby {
final int youSeat; // جایگاهِ مطلقِ خودِ کاربر (برای چیدمانِ صحنه)
final int remaining;
final bool unlimited;
final int stake; // شرطِ سکه‌ایِ هر بازیکن (۰ یعنی رایگان)
const TableLobby({
required this.code,
required this.players,
@@ -26,6 +27,7 @@ class TableLobby {
required this.youSeat,
required this.remaining,
required this.unlimited,
required this.stake,
});
factory TableLobby.fromJson(Map<String, dynamic> j) => TableLobby(
@@ -41,9 +43,10 @@ class TableLobby {
youSeat: (j['you_seat'] ?? 0) as int,
remaining: (j['remaining'] ?? 0) as int,
unlimited: (j['unlimited'] ?? false) as bool,
stake: (j['stake'] ?? 0) as int,
);
String get sig => '$code|$isHost|$youSeat|$remaining|$unlimited|'
String get sig => '$code|$isHost|$youSeat|$remaining|$unlimited|$stake|'
'${players.map((p) => '${p.name}${p.host ? '*' : ''}@${p.seat}').join(',')}';
}