Example #1
0
    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);
                }
            }
        }
    }