Beispiel #1
0
    public void ChooseSmallRoomLayout(int sourceRoomPosition)
    {
        //Choose layout
        roomLayout = Random.Range(0, noOfSmallLayouts);
        bool reset = false;

        //Setting what positions will remain valid after layout selection
        if (roomLayout == 0)
        {
            //In default layout, all odds will be same and all evens too. But challenge variants will be affected differently
            int randRot = Random.Range(0, 8);
            transform.GetChild(0).GetChild(roomLayout).Rotate(0, 45 * randRot, 0);
        }

        if (roomLayout == 1)
        {
            for (int i = 0; i < validRGPositions.Length; i++)
            {
                if (i == 1 || i == 3 || i == 5 || i == 7)
                {
                    validRGPositions[i] = true;
                }
                else
                {
                    validRGPositions[i] = false;
                    //If source room position is set to invalid, reset
                    if (i == sourceRoomPosition)
                    {
                        reset = true;
                        break;
                    }
                }
            }

            int randRot = Random.Range(0, 4);
            transform.GetChild(0).GetChild(roomLayout).Rotate(0, 90 * randRot, 0);
        }

        if (roomLayout == 2)
        {
            if (Roll(50))
            {
                transform.GetChild(0).GetChild(roomLayout).Rotate(0, 90, 0);

                validRGPositions[0] = false;
                validRGPositions[8] = false;
            }
            else
            {
                validRGPositions[2] = false;
                validRGPositions[6] = false;
            }

            if (!validRGPositions[sourceRoomPosition])
            {
                reset = true;
            }
        }

        if (roomLayout == 3)
        {
            int randRot = Random.Range(0, 4);
            if (randRot == 1)
            {
                validRGPositions[8] = false;
            }
            else if (randRot == 2)
            {
                validRGPositions[6] = false;
            }
            else if (randRot == 3)
            {
                validRGPositions[0] = false;
            }
            else if (randRot == 0)
            {
                validRGPositions[2] = false;
            }

            if (!validRGPositions[sourceRoomPosition])
            {
                reset = true;
            }
            else
            {
                transform.GetChild(0).GetChild(roomLayout).Rotate(0, 90 * randRot, 0);
            }
        }

        if (roomLayout == 4)
        {
            int randRot = Random.Range(0, 8);
            transform.GetChild(0).GetChild(roomLayout).Rotate(0, 45 * randRot, 0);
        }

        //Layout is incompatible with source room position, try again
        if (reset)
        {
            for (int i = 0; i < validRGPositions.Length; i++)
            {
                validRGPositions[i] = true;
            }

            roomLayout = -1;

            reset = false;

            ChooseSmallRoomLayout(sourceRoomPosition);
            return;
        }

        //Activate the selected layout and store it in RoomScript
        Transform layoutTransform = transform.GetChild(0).GetChild(roomLayout);

        layoutTransform.gameObject.SetActive(true);
        //Set up enemy spawning in room
        if (roomScript != null)
        {
            roomScript.SetEnemySpawnPoints(layoutTransform);
            StartCoroutine(roomScript.SelectEnemies());
        }
        else
        {
            Debug.LogError("Room Script of" + gameObject.name + "is null");
        }
    }