public void OnClick()
    {
        int newPipeRotation  = (int)_pipeTileRotation + 1;
        int maxPipeRotations = 3;

        if (newPipeRotation > maxPipeRotations)
        {
            newPipeRotation = 0;
        }

        _pipeTileRotation = (PipeTileRotation)newPipeRotation;

        UpdateLayout();

        _messenger?.Publish(new PipeTileRotatedMessage(this));
    }
Exemple #2
0
    private void CheckForGameCompletion()
    {
        _logger?.Log("CheckForGameCompletion");

        bool isConnected = false;

        foreach (PipeTileScript pipeTileScript in _pipeTiles)
        {
            pipeTileScript.SetIsConnected(false);
        }

        PipeTileScript currentPipeTile = _startTile;

        while (currentPipeTile != null)
        {
            currentPipeTile.SetIsConnected(true);

            PipeTileScript connectedPipeTile = null;

            PipeTileShape    shape    = currentPipeTile.GetShape();
            PipeTileRotation rotation = currentPipeTile.GetRotation();

            //Find Connected Pipe
            if (shape == PipeTileShape.Line)
            {
                if (rotation == PipeTileRotation.Degrees0 || rotation == PipeTileRotation.Degrees180)
                {
                    PipeTileScript westTile = GetPipeTileToTheDirection(currentPipeTile, Direction.W);
                    PipeTileScript eastTile = GetPipeTileToTheDirection(currentPipeTile, Direction.E);

                    //Check West
                    if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Line && (westTile.GetRotation() == PipeTileRotation.Degrees0 || westTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = westTile;
                    }

                    //Check East
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Line && (eastTile.GetRotation() == PipeTileRotation.Degrees0 || eastTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = eastTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees90 || rotation == PipeTileRotation.Degrees270)
                {
                    PipeTileScript northTile = GetPipeTileToTheDirection(currentPipeTile, Direction.N);
                    PipeTileScript soutTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.S);

                    //Check North
                    if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Line && (northTile.GetRotation() == PipeTileRotation.Degrees90 || northTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = northTile;
                    }

                    //Check South
                    else if (soutTile != null && soutTile.GetIsConnected() == false && soutTile.GetShape() == PipeTileShape.Line && (soutTile.GetRotation() == PipeTileRotation.Degrees90 || soutTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = soutTile;
                    }
                    else if (soutTile != null && soutTile.GetIsConnected() == false && soutTile.GetShape() == PipeTileShape.Corner && soutTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = soutTile;
                    }
                    else if (soutTile != null && soutTile.GetIsConnected() == false && soutTile.GetShape() == PipeTileShape.Corner && soutTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = soutTile;
                    }
                }
            }
            else if (shape == PipeTileShape.Corner)
            {
                if (rotation == PipeTileRotation.Degrees0)
                {
                    PipeTileScript westTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.W);
                    PipeTileScript northTile = GetPipeTileToTheDirection(currentPipeTile, Direction.N);

                    //Check westTile
                    if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Line && (westTile.GetRotation() == PipeTileRotation.Degrees0 || westTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = westTile;
                    }

                    //Check northTile
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Line && (northTile.GetRotation() == PipeTileRotation.Degrees90 || northTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = northTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees90)
                {
                    PipeTileScript northTile = GetPipeTileToTheDirection(currentPipeTile, Direction.N);
                    PipeTileScript eastTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.E);

                    //Check northTile
                    if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Line && (northTile.GetRotation() == PipeTileRotation.Degrees90 || northTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = northTile;
                    }
                    else if (northTile != null && northTile.GetIsConnected() == false && northTile.GetShape() == PipeTileShape.Corner && northTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = northTile;
                    }

                    //Check westTile
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Line && (eastTile.GetRotation() == PipeTileRotation.Degrees0 || eastTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = eastTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees180)
                {
                    PipeTileScript eastTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.E);
                    PipeTileScript southTile = GetPipeTileToTheDirection(currentPipeTile, Direction.S);

                    //Check eastTile
                    if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Line && (eastTile.GetRotation() == PipeTileRotation.Degrees0 || eastTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees270)
                    {
                        connectedPipeTile = eastTile;
                    }
                    else if (eastTile != null && eastTile.GetIsConnected() == false && eastTile.GetShape() == PipeTileShape.Corner && eastTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = eastTile;
                    }

                    //Check southTile
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Line && (southTile.GetRotation() == PipeTileRotation.Degrees90 || southTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = southTile;
                    }
                }
                else if (rotation == PipeTileRotation.Degrees270)
                {
                    PipeTileScript southTile = GetPipeTileToTheDirection(currentPipeTile, Direction.S);
                    PipeTileScript westTile  = GetPipeTileToTheDirection(currentPipeTile, Direction.W);

                    //Check southTile
                    if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Line && (southTile.GetRotation() == PipeTileRotation.Degrees90 || southTile.GetRotation() == PipeTileRotation.Degrees270))
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = southTile;
                    }
                    else if (southTile != null && southTile.GetIsConnected() == false && southTile.GetShape() == PipeTileShape.Corner && southTile.GetRotation() == PipeTileRotation.Degrees0)
                    {
                        connectedPipeTile = southTile;
                    }

                    //Check westTile
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Line && (westTile.GetRotation() == PipeTileRotation.Degrees0 || westTile.GetRotation() == PipeTileRotation.Degrees180))
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees90)
                    {
                        connectedPipeTile = westTile;
                    }
                    else if (westTile != null && westTile.GetIsConnected() == false && westTile.GetShape() == PipeTileShape.Corner && westTile.GetRotation() == PipeTileRotation.Degrees180)
                    {
                        connectedPipeTile = westTile;
                    }
                }
            }

            //CHECK VICTORY CONDITION
            if (connectedPipeTile == _endTile)
            {
                isConnected = true;
            }

            //Continue
            currentPipeTile = connectedPipeTile;
        }

        if (isConnected)
        {
            SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);
        }
    }