示例#1
0
    public void PlaceKeysAndVictory()
    {
        List <GridSquare> Quad1 = grid.AllSquares.Where(s => s.quadrant == Quadrant.FirstQuadrant).ToList();
        List <GridSquare> Quad2 = grid.AllSquares.Where(s => s.quadrant == Quadrant.SecondQuadrant).ToList();
        List <GridSquare> Quad3 = grid.AllSquares.Where(s => s.quadrant == Quadrant.ThirdQuadrant).ToList();
        List <GridSquare> Quad4 = grid.AllSquares.Where(s => s.quadrant == Quadrant.FourthQuadrant).ToList();
        GridSquare        q1key = null, q2key = null, q3key = null, q4key = null;
        GridSquare        victorySquare = null;
        bool locker = true;

        while (locker)
        {
            locker = false;
            q1key  = Quad1[random.Next(0, Quad1.Count)];
            HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>();
            quadBuffer = GatherNeighbors(q1key, 2);

            foreach (var cell in quadBuffer)
            {
                if (cell.quadrant != Quadrant.FirstQuadrant)
                {
                    locker = true;
                    foreach (var c in quadBuffer)
                    {
                        c.gatherTrigger = false;
                    }
                    break;
                }
            }
        }
        locker = true;
        while (locker)
        {
            locker = false;
            q2key  = Quad2[random.Next(0, Quad2.Count)];
            HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>();
            quadBuffer = GatherNeighbors(q2key, 2);

            foreach (var cell in quadBuffer)
            {
                if (cell.quadrant != Quadrant.SecondQuadrant)
                {
                    locker = true;
                    foreach (var c in quadBuffer)
                    {
                        c.gatherTrigger = false;
                    }
                    break;
                }
            }
        }
        locker = true;
        while (locker)
        {
            locker = false;
            q3key  = Quad3[random.Next(0, Quad3.Count)];
            HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>();
            quadBuffer = GatherNeighbors(q3key, 2);

            foreach (var cell in quadBuffer)
            {
                if (cell.quadrant != Quadrant.ThirdQuadrant)
                {
                    locker = true;
                    foreach (var c in quadBuffer)
                    {
                        c.gatherTrigger = false;
                    }
                    break;
                }
            }
        }
        locker = true;
        while (locker)
        {
            locker = false;
            q4key  = Quad3[random.Next(0, Quad3.Count)];
            HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>();
            quadBuffer = GatherNeighbors(q4key, 2);

            foreach (var cell in quadBuffer)
            {
                if (cell.quadrant != Quadrant.ThirdQuadrant)
                {
                    locker = true;
                    foreach (var c in quadBuffer)
                    {
                        c.gatherTrigger = false;
                    }
                    break;
                }
            }
        }
        locker = true;
        while (locker)
        {
            locker        = false;
            victorySquare = Quad4[random.Next(0, Quad4.Count)];
            if (victorySquare.Position == q4key.Position)
            {
                locker = true;
            }
        }

        GameObject key1 = Instantiate(keys[0], q1key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform);

        key1.transform.localScale    = key1.transform.localScale / 2;
        key1.transform.localPosition = q1key.Position + new Vector3(0f, 1, 0f);
        q1key.RemoveAllWalls(gridHeight, gridWidth);
        GameObject key2 = Instantiate(keys[1], q2key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform);

        key2.transform.localScale    = key2.transform.localScale / 2;
        key2.transform.localPosition = q2key.Position + new Vector3(0f, 1, 0f);
        q2key.RemoveAllWalls(gridHeight, gridWidth);
        GameObject key3 = Instantiate(keys[2], q3key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform);

        key3.transform.localScale    = key3.transform.localScale / 2;
        key3.transform.localPosition = q3key.Position + new Vector3(0f, 1, 0f);
        q3key.RemoveAllWalls(gridHeight, gridWidth);
        GameObject key4 = Instantiate(keys[3], q4key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform);

        key4.transform.localScale    = key4.transform.localScale / 2;
        key4.transform.localPosition = q4key.Position + new Vector3(0f, 1, 0f);
        q4key.RemoveAllWalls(gridHeight, gridWidth);
        GridSquare vs = Instantiate(victorySquarePrefab, grid.transform);

        vs.Position = victorySquare.Position;
        vs.transform.localPosition = victorySquare.Position;
        for (int i = 0; i < 4; i++)
        {
            if (!victorySquare.walls[i].activeSelf)
            {
                vs.walls[i].SetActive(false);
            }
        }
        victorySquare.gameObject.SetActive(false);
        // sq.RemoveFriction();
    }