public IEnumerator WaterFlowLoop() { yield return(new WaitForSeconds(0.1f)); bool firstTime = false; bool playing = true; SingleGrid nextGrid = null; Material newPipeMat = Instantiate(waterPipeMat); startTile.GetComponent <Image>().material = newPipeMat; startTile.GetComponent <Image>().material.SetTexture("_GradientTex", pipeGradients[1]); startTile.GetComponent <Image>().material.SetFloat("_WaterValue", 1); nextGrid = startTile.GetComponent <SingleGrid>(); float lerp = 0.0f; while (playing) { lerp = 0.0f; nextGrid.activity = GridActivity.HasWater; while (lerp < 1.0f) { nextGrid.gameObject.GetComponent <Image>().material.SetFloat("_WaterValue", 1.0f - lerp); lerp += Time.deltaTime * 0.2f * speedMult; yield return(null); } nextGrid.gameObject.GetComponent <Image>().material.SetFloat("_WaterValue", 0.0f); if (firstTime) { if (startTile.GetComponent <SingleGrid>().flowingTo == 1) { nextGrid = GetCorrectGrid(startTile.GetComponent <SingleGrid>().x, startTile.GetComponent <SingleGrid>().y - 1); } else if (startTile.GetComponent <SingleGrid>().flowingTo == 2) { nextGrid = GetCorrectGrid(startTile.GetComponent <SingleGrid>().x + 1, startTile.GetComponent <SingleGrid>().y); } startTile = nextGrid.gameObject; Material newPipeMat2 = Instantiate(waterPipeMat); Texture t = nextGrid.gameObject.GetComponent <Image>().material.GetTexture("_GradientTex"); nextGrid.gameObject.GetComponent <Image>().material = newPipeMat2; nextGrid.gameObject.GetComponent <Image>().material.SetTexture("_GradientTex", pipeGradients[(int)nextGrid.currentPipe]); nextGrid.gameObject.GetComponent <Image>().material.SetFloat("_WaterValue", 1); firstTime = false; } else { startTile = nextGrid.gameObject; if (nextGrid.x == winX && nextGrid.y - 1 == winY) { AudioManager.instance.Play("Toilet"); AudioManager.instance.Stop("Glitch"); Debug.Log("Win!"); victoryCanvas.SetActive(true); playing = false; break; } if (playing) { if (nextGrid.GetComponent <SingleGrid>().flowingTo == 0) { nextGrid = GetCorrectGrid(nextGrid.GetComponent <SingleGrid>().x - 1, nextGrid.GetComponent <SingleGrid>().y); } else if (nextGrid.GetComponent <SingleGrid>().flowingTo == 1) { nextGrid = GetCorrectGrid(nextGrid.GetComponent <SingleGrid>().x, nextGrid.GetComponent <SingleGrid>().y - 1); } else if (nextGrid.GetComponent <SingleGrid>().flowingTo == 2) { nextGrid = GetCorrectGrid(nextGrid.GetComponent <SingleGrid>().x + 1, nextGrid.GetComponent <SingleGrid>().y); } else if (nextGrid.GetComponent <SingleGrid>().flowingTo == 3) { nextGrid = GetCorrectGrid(nextGrid.GetComponent <SingleGrid>().x, nextGrid.GetComponent <SingleGrid>().y + 1); } if (nextGrid.x < 0 || nextGrid.x > width - 1 || nextGrid.y < 0 || nextGrid.y > height - 1) { Debug.Log("Game over!"); LevelManager.LevelMaster.AddToGrade(-0.5f); loseCanvas.SetActive(true); playing = false; break; } Material newPipeMat2 = Instantiate(waterPipeMat); nextGrid.gameObject.GetComponent <Image>().material = newPipeMat2; nextGrid.gameObject.GetComponent <Image>().material.SetTexture("_GradientTex", pipeGradients[(int)nextGrid.currentPipe]); nextGrid.gameObject.GetComponent <Image>().material.SetFloat("_WaterValue", 1); } if ((nextGrid.sides[3] > 0 && startTile.GetComponent <SingleGrid>().sides[1] > 0)) { for (int i = 0; i < 4; i++) { if (i != 3) { if (nextGrid.sides[i] > 0) { nextGrid.flowingTo = i; if (nextGrid.flowingTo == 2 && nextGrid.currentPipe == Pipe.Straight && nextGrid.GetComponent <RectTransform>().eulerAngles.z > 170.0f && nextGrid.GetComponent <RectTransform>().eulerAngles.z < 190.0f) { nextGrid.gameObject.GetComponent <Image>().material.SetInt("_Direction", 1); } if (nextGrid.flowingTo == 2 && nextGrid.currentPipe == Pipe.Curve) { nextGrid.gameObject.GetComponent <Image>().material.SetInt("_Direction", 1); } } } } } else if (nextGrid.sides[0] > 0 && startTile.GetComponent <SingleGrid>().sides[2] > 0) { for (int i = 0; i < 4; i++) { if (i != 0) { if (nextGrid.sides[i] > 0) { nextGrid.flowingTo = i; if (nextGrid.flowingTo == 3 && nextGrid.currentPipe == Pipe.Curve) { nextGrid.gameObject.GetComponent <Image>().material.SetInt("_Direction", 1); } } } } } else if (nextGrid.sides[1] > 0 && startTile.GetComponent <SingleGrid>().sides[3] > 0) { for (int i = 0; i < 4; i++) { if (i != 1) { if (nextGrid.sides[i] > 0) { nextGrid.flowingTo = i; if (nextGrid.flowingTo == 0 && nextGrid.currentPipe == Pipe.Curve) { nextGrid.gameObject.GetComponent <Image>().material.SetInt("_Direction", 1); } } } } } else if (nextGrid.sides[2] > 0 && startTile.GetComponent <SingleGrid>().sides[0] > 0) { for (int i = 0; i < 4; i++) { if (i != 2) { if (nextGrid.sides[i] > 0) { nextGrid.flowingTo = i; if (nextGrid.flowingTo == 1 && nextGrid.currentPipe == Pipe.Straight && nextGrid.GetComponent <RectTransform>().eulerAngles.z > -80.0f && nextGrid.GetComponent <RectTransform>().eulerAngles.z < -100.0f) { nextGrid.gameObject.GetComponent <Image>().material.SetInt("_Direction", 1); } if (nextGrid.flowingTo == 1 && nextGrid.currentPipe == Pipe.Curve) { nextGrid.gameObject.GetComponent <Image>().material.SetInt("_Direction", 1); } } } } } else { playing = false; LevelManager.LevelMaster.AddToGrade(-0.5f); loseCanvas.SetActive(true); } } } }