feat: rotate table players
This commit is contained in:
@@ -45,7 +45,10 @@ class GameBloc extends Bloc<GameEvent, GameUiState> {
|
||||
on<PlayCardEvent>(
|
||||
(event, emit) => repository.send({'type': 'play_card', 'card': event.card}));
|
||||
on<LeaveGameEvent>((event, emit) => repository.send({'type': 'leave'}));
|
||||
on<StartTableEvent>((event, emit) => repository.send({'type': 'start_table'}));
|
||||
on<StartTableEvent>((event, emit) =>
|
||||
repository.send({'type': 'start_table', 'hands': event.hands}));
|
||||
on<RotateTableEvent>((event, emit) =>
|
||||
repository.send({'type': 'rotate_table', 'dir': event.dir}));
|
||||
on<LeaveTableEvent>((event, emit) => repository.send({'type': 'leave_table'}));
|
||||
on<ClearNoticeEvent>((event, emit) => emit(state.copyWith(clearNotice: true)));
|
||||
}
|
||||
@@ -82,7 +85,8 @@ class GameBloc extends Bloc<GameEvent, GameUiState> {
|
||||
void chooseTrump(String suit) => add(ChooseTrumpEvent(suit));
|
||||
void playCard(String card) => add(PlayCardEvent(card));
|
||||
void leave() => add(LeaveGameEvent());
|
||||
void startTable() => add(StartTableEvent());
|
||||
void startTable(int hands) => add(StartTableEvent(hands));
|
||||
void rotateTable(int dir) => add(RotateTableEvent(dir));
|
||||
void leaveTable() => add(LeaveTableEvent());
|
||||
void clearNotice() => add(ClearNoticeEvent());
|
||||
|
||||
|
||||
@@ -32,7 +32,15 @@ class PlayCardEvent extends GameEvent {
|
||||
|
||||
class LeaveGameEvent extends GameEvent {}
|
||||
|
||||
class StartTableEvent extends GameEvent {}
|
||||
class StartTableEvent extends GameEvent {
|
||||
final int hands; // تعداد دستِ انتخابی (۳/۵/۷)
|
||||
StartTableEvent(this.hands);
|
||||
}
|
||||
|
||||
class RotateTableEvent extends GameEvent {
|
||||
final int dir; // +۱/−۱ جهتِ چرخشِ جایگاهها
|
||||
RotateTableEvent(this.dir);
|
||||
}
|
||||
|
||||
class LeaveTableEvent extends GameEvent {}
|
||||
|
||||
|
||||
@@ -7,7 +7,8 @@ import '../../domain/entities/game_entities.dart';
|
||||
class LobbyPlayer {
|
||||
final String name;
|
||||
final bool host;
|
||||
const LobbyPlayer(this.name, this.host);
|
||||
final int seat; // جایگاهِ مطلق (۰..۳)
|
||||
const LobbyPlayer(this.name, this.host, this.seat);
|
||||
}
|
||||
|
||||
/// وضعیت اتاق انتظارِ میز خصوصی (دورهمی).
|
||||
@@ -15,12 +16,14 @@ class TableLobby {
|
||||
final String code;
|
||||
final List<LobbyPlayer> players;
|
||||
final bool isHost;
|
||||
final int youSeat; // جایگاهِ مطلقِ خودِ کاربر (برای چیدمانِ صحنه)
|
||||
final int remaining;
|
||||
final bool unlimited;
|
||||
const TableLobby({
|
||||
required this.code,
|
||||
required this.players,
|
||||
required this.isHost,
|
||||
required this.youSeat,
|
||||
required this.remaining,
|
||||
required this.unlimited,
|
||||
});
|
||||
@@ -29,15 +32,19 @@ class TableLobby {
|
||||
code: (j['code'] ?? '') as String,
|
||||
players: ((j['players'] as List?) ?? [])
|
||||
.map((e) => LobbyPlayer(
|
||||
(e['name'] ?? '') as String, (e['host'] ?? false) as bool))
|
||||
(e['name'] ?? '') as String,
|
||||
(e['host'] ?? false) as bool,
|
||||
(e['seat'] ?? 0) as int,
|
||||
))
|
||||
.toList(),
|
||||
isHost: (j['host'] ?? false) as bool,
|
||||
youSeat: (j['you_seat'] ?? 0) as int,
|
||||
remaining: (j['remaining'] ?? 0) as int,
|
||||
unlimited: (j['unlimited'] ?? false) as bool,
|
||||
);
|
||||
|
||||
String get sig => '$code|$isHost|$remaining|$unlimited|'
|
||||
'${players.map((p) => '${p.name}${p.host ? '*' : ''}').join(',')}';
|
||||
String get sig => '$code|$isHost|$youSeat|$remaining|$unlimited|'
|
||||
'${players.map((p) => '${p.name}${p.host ? '*' : ''}@${p.seat}').join(',')}';
|
||||
}
|
||||
|
||||
class GameUiState extends Equatable {
|
||||
|
||||
Reference in New Issue
Block a user