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