isValidServerEvent function
Implementation
bool isValidServerEvent(ServerWorldEvent event, WorldState state) =>
switch (event) {
WorldInitialized() =>
event.info?.packs.length == event.packsSignature?.length &&
(event.info?.packs.every(
(e) => event.packsSignature?.any((p) => p.id == e) ?? false,
) ??
true),
TeamJoined() => state.info.teams.containsKey(event.team),
TeamLeft() => state.info.teams.containsKey(event.team),
GameRolesChanged() => event.roles.every((role) => role.isNotEmpty),
CellShuffled() =>
_containsCell(state, event.cell.table, event.cell.position) &&
event.positions.every(
(e) => e.inRange(
0,
state
.getTableOrDefault(event.cell.table)
.getCell(event.cell.position)
.objects
.length -
1,
),
),
ObjectsMoved() =>
_containsCell(state, event.table, event.from) &&
_containsCell(state, event.table, event.to) &&
event.from != event.to &&
event.objects.every(
(e) => e.inRange(
0,
state
.getTableOrDefault(event.table)
.getCell(event.from)
.objects
.length -
1,
),
),
CellHideChanged() =>
_containsCell(state, event.cell.table, event.cell.position) &&
(event.object?.inRange(
0,
state
.getTableOrDefault(event.cell.table)
.getCell(event.cell.position)
.objects
.length -
1,
) ??
true),
ObjectIndexChanged() =>
event.index.inRange(
0,
state
.getTableOrDefault(event.cell.table)
.getCell(event.cell.position)
.objects
.length -
1,
) &&
_containsCell(state, event.cell.table, event.cell.position),
CellMergeStrategyChanged() =>
event.span > 0 &&
event.span <= GameTable.maxMergeSpan &&
_canMerge(state, event),
TableBoundsChanged() => _hasTable(state, event.table),
ObjectsChanged() => _containsCell(
state,
event.cell.table,
event.cell.position,
),
ObjectsSpawned() => event.objects.keys.every(
(cell) => _containsCell(state, event.table, cell),
),
BoardTilesSpawned() => event.tiles.keys.every(
(cell) => _containsCell(state, event.table, cell),
),
BoardTilesChanged() => event.tiles.keys.every(
(cell) => _containsCell(state, event.table, cell),
),
DialogOpened() => event.dialog.isValid(),
_ => true,
};