Beispiel #1
0
        public async Task <DownloadTarget[]> CheckFiles(
            DownloadTarget[] targets,
            CancellationToken ct = default(CancellationToken),
            IProgress <CheckingState> progress = null)
        {
            ct.ThrowIfCancellationRequested();

            _log.Info("Checking files...");
            var result = new List <DownloadTarget>(targets.Length);
            var state  = new CheckingState {
                FileName    = string.Empty,
                CurrentFile = 0,
                TotalFiles  = targets.Length
            };

            var context = SynchronizationContext.Current;

            void Report(string path)
            {
                context?.Post(args => {
                    var filePath = args as string ?? string.Empty;
                    _log.Info($"Checking file {filePath}...");

                    state.FileName = filePath;
                    state.CurrentFile++;

                    progress?.Report(state);
                }, path);
            }

            var tasks = targets.Select(target => Task.Run(() => CheckTarget(target, result, Report), ct));
            await Task.WhenAll(tasks);

            _log.Info($"Checking files completed. Need to update {result.Count} files.");
            return(result.ToArray());
        }
Beispiel #2
0
    public bool CalculateBoardState(GameObject player)
    {
        foreach (var piece in board)
        {
            currentState = CheckingState.HorizontalRight;

            if (piece.tileNumber == 1 || piece.tileNumber == 4 || piece.tileNumber == 7)
            {
                var is0 = board.Any(x => x.tileNumber == piece.tileNumber && x.pieceValue == 0);

                int rankValue = is0 ? 0 : 1;

                if (board.Any(x => x.tileNumber == piece.tileNumber + 1 && x.pieceValue == rankValue))
                {
                    if (board.Any(x => x.tileNumber == piece.tileNumber + 2 && x.pieceValue == rankValue))
                    {
                        Debug.Log($"Rank {rankValue} won! Info: {currentState}");

                        player.GetComponent <Player>().RpcGrayOutUnWonPieces(piece.tileNumber, piece.tileNumber + 1, piece.tileNumber + 2);
                        player.GetComponent <Player>().WinThis();

                        return(true);
                    }
                }
            }

            currentState = CheckingState.VerticalUp;

            if (piece.tileNumber == 1 || piece.tileNumber == 2 || piece.tileNumber == 3)
            {
                var is0 = board.Any(x => x.tileNumber == piece.tileNumber && x.pieceValue == 0);

                int rankValue = is0 ? 0 : 1;

                if (board.Any(x => x.tileNumber == piece.tileNumber + 3 && x.pieceValue == rankValue))
                {
                    if (board.Any(x => x.tileNumber == piece.tileNumber + 6 && x.pieceValue == rankValue))
                    {
                        Debug.Log($"Rank {rankValue} won! Info: {currentState}");

                        player.GetComponent <Player>().RpcGrayOutUnWonPieces(piece.tileNumber, piece.tileNumber + 3, piece.tileNumber + 6);
                        player.GetComponent <Player>().WinThis();

                        return(true);
                    }
                }
            }

            currentState = CheckingState.DTopRight;

            if (piece.tileNumber == 1)
            {
                var is0 = board.Any(x => x.tileNumber == piece.tileNumber && x.pieceValue == 0);

                int rankValue = is0 ? 0 : 1;

                if (board.Any(x => x.tileNumber == piece.tileNumber + 4 && x.pieceValue == rankValue))
                {
                    if (board.Any(x => x.tileNumber == piece.tileNumber + 8 && x.pieceValue == rankValue))
                    {
                        Debug.Log($"Rank {rankValue} won! Info: {currentState}");

                        player.GetComponent <Player>().RpcGrayOutUnWonPieces(piece.tileNumber, piece.tileNumber + 4, piece.tileNumber + 8);
                        player.GetComponent <Player>().WinThis();

                        return(true);
                    }
                }
            }

            currentState = CheckingState.DTopLeft;

            if (piece.tileNumber == 3)
            {
                var is0 = board.Any(x => x.tileNumber == piece.tileNumber && x.pieceValue == 0);

                int rankValue = is0 ? 0 : 1;

                if (board.Any(x => x.tileNumber == piece.tileNumber + 2 && x.pieceValue == rankValue))
                {
                    if (board.Any(x => x.tileNumber == piece.tileNumber + 4 && x.pieceValue == rankValue))
                    {
                        Debug.Log($"Rank {rankValue} won! Info: {currentState}");

                        player.GetComponent <Player>().RpcGrayOutUnWonPieces(piece.tileNumber, piece.tileNumber + 2, piece.tileNumber + 4);
                        player.GetComponent <Player>().WinThis();

                        return(true);
                    }
                }
            }
        }

        if (board.Count >= 9)
        {
            player.GetComponent <Player>().RpcGrayOutUnWonPieces(10, 10, 10);
            return(false);
        }

        return(false);
    }