isValidServerEvent function

bool isValidServerEvent(
  1. ServerWorldEvent event,
  2. WorldState state
)

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,
    };