public C_HL_ROOMTYPE UpdateFeatures(int combinedContentID, C_HL_ROOMTYPE previousRoomType)
    {
        // Structure
        numTotalNodes++;

        // Content
        int numFeatures = System.Enum.GetValues(typeof(C_FEATURES)).Length;
        int numSettings = System.Enum.GetValues(typeof(C_SETTINGS)).Length;

        //(THIS IS CONVERTED FROM PCGGenericRoomManager AS C# CANT CALL Javascript STUFF BECAUSE Javascript is already calling C#
        C_SETTINGS[] featureSettings = new C_SETTINGS[numFeatures];
        for (int i = 0; i < numFeatures; i++)
        {
            float denominator = Mathf.Pow(numSettings, (numFeatures - (i + 1)));
            int   settingVal  = Mathf.FloorToInt(combinedContentID / denominator);
            featureSettings[i] = (C_SETTINGS)settingVal;
            if (settingVal != 0)
            {
                combinedContentID = (int)(combinedContentID % denominator);
            }
        }
        spiderEnumSum = spiderEnumSum + (int)(featureSettings[(int)C_FEATURES.Spider]);
        buzzEnumSum   = buzzEnumSum + (int)featureSettings[(int)C_FEATURES.Buzz];
        mechEnumSum   = mechEnumSum + (int)featureSettings[(int)C_FEATURES.Mech];
        healthEnumSum = healthEnumSum + (int)featureSettings[(int)C_FEATURES.Health];
        ammoEnumSum   = ammoEnumSum + (int)featureSettings[(int)C_FEATURES.Ammo];
        weaponEnumSum = weaponEnumSum + (int)featureSettings[(int)C_FEATURES.Weapon];

        // Room Type
        float         numE       = (int)(featureSettings[(int)C_FEATURES.Spider]) + (int)(featureSettings[(int)C_FEATURES.Buzz]) + (int)(featureSettings[(int)C_FEATURES.Mech]);
        float         numP       = (int)(featureSettings[(int)C_FEATURES.Health]) + (int)(featureSettings[(int)C_FEATURES.Ammo]) + (int)(featureSettings[(int)C_FEATURES.Weapon]);
        float         avgSetting = ((float)(C_SETTINGS.High) * 3) / 2.0f;
        C_HL_ROOMTYPE roomType   = C_HL_ROOMTYPE.LowELowP;

        if ((numE < avgSetting) && (numP < avgSetting))
        {
            roomType = C_HL_ROOMTYPE.LowELowP;
            LowELowPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP)
            {
                LowEToLowECount++;
                LowPToLowPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP)
            {
                LowEToLowECount++;
                HighPToLowPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighELowP)
            {
                HighEToLowECount++;
                LowPToLowPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP)
            {
                HighEToLowECount++;
                HighPToLowPCount++;
            }
        }
        else if ((numE < avgSetting) && (numP >= avgSetting))
        {
            roomType = C_HL_ROOMTYPE.LowEHighP;
            LowEHighPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP)
            {
                LowEToLowECount++;
                LowPToHighPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP)
            {
                LowEToLowECount++;
                HighPToHighPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighELowP)
            {
                HighEToLowECount++;
                LowPToHighPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP)
            {
                HighEToLowECount++;
                HighPToHighPCount++;
            }
        }
        else if ((numE >= avgSetting) && (numP < avgSetting))
        {
            roomType = C_HL_ROOMTYPE.HighELowP;
            HighELowPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP)
            {
                LowEToHighECount++;
                LowPToLowPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP)
            {
                LowEToHighECount++;
                HighPToLowPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighELowP)
            {
                HighEToHighECount++;
                LowPToLowPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP)
            {
                HighEToHighECount++;
                HighPToLowPCount++;
            }
        }
        else if ((numE >= avgSetting) && (numP >= avgSetting))
        {
            roomType = C_HL_ROOMTYPE.HighEHighP;
            HighEHighPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP)
            {
                LowEToHighECount++;
                LowPToHighPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP)
            {
                LowEToHighECount++;
                HighPToHighPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighELowP)
            {
                HighEToHighECount++;
                LowPToHighPCount++;
            }
            else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP)
            {
                HighEToHighECount++;
                HighPToHighPCount++;
            }
        }

        return(roomType);
    }
    public C_HL_ROOMTYPE UpdateFeatures(int combinedContentID, C_HL_ROOMTYPE previousRoomType)
    {
        // Structure
        numTotalNodes++;

        // Content
        int numFeatures = System.Enum.GetValues(typeof(C_FEATURES)).Length;
        int numSettings = System.Enum.GetValues(typeof(C_SETTINGS)).Length;

        //(THIS IS CONVERTED FROM PCGGenericRoomManager AS C# CANT CALL Javascript STUFF BECAUSE Javascript is already calling C#
        C_SETTINGS[] featureSettings = new C_SETTINGS[numFeatures];
        for (int i = 0; i < numFeatures; i++) {
            float denominator = Mathf.Pow(numSettings,(numFeatures-(i+1)));
            int settingVal = Mathf.FloorToInt(combinedContentID/denominator);
            featureSettings[i] = (C_SETTINGS)settingVal;
            if (settingVal != 0)
                combinedContentID = (int)(combinedContentID % denominator);
        }
        spiderEnumSum = spiderEnumSum + (int)(featureSettings[(int)C_FEATURES.Spider]);
        buzzEnumSum = buzzEnumSum + (int)featureSettings[(int)C_FEATURES.Buzz];
        mechEnumSum = mechEnumSum + (int)featureSettings[(int)C_FEATURES.Mech];
        healthEnumSum = healthEnumSum + (int)featureSettings[(int)C_FEATURES.Health];
        ammoEnumSum = ammoEnumSum + (int)featureSettings[(int)C_FEATURES.Ammo];
        weaponEnumSum = weaponEnumSum + (int)featureSettings[(int)C_FEATURES.Weapon];

        // Room Type
        float numE = (int)(featureSettings[(int)C_FEATURES.Spider]) + (int)(featureSettings[(int)C_FEATURES.Buzz]) + (int)(featureSettings[(int)C_FEATURES.Mech]);
        float numP = (int)(featureSettings[(int)C_FEATURES.Health]) + (int)(featureSettings[(int)C_FEATURES.Ammo]) + (int)(featureSettings[(int)C_FEATURES.Weapon]);
        float avgSetting  = ((float)(C_SETTINGS.High)*3) / 2.0f;
        C_HL_ROOMTYPE roomType = C_HL_ROOMTYPE.LowELowP;
        if ((numE < avgSetting) && (numP < avgSetting)) {
            roomType = C_HL_ROOMTYPE.LowELowP;
            LowELowPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP) {
                LowEToLowECount++;
                LowPToLowPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP) {
                LowEToLowECount++;
                HighPToLowPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighELowP) {
                HighEToLowECount++;
                LowPToLowPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP) {
                HighEToLowECount++;
                HighPToLowPCount++;
            }
        } else if ((numE < avgSetting) && (numP >= avgSetting)) {
            roomType = C_HL_ROOMTYPE.LowEHighP;
            LowEHighPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP) {
                LowEToLowECount++;
                LowPToHighPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP) {
                LowEToLowECount++;
                HighPToHighPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighELowP) {
                HighEToLowECount++;
                LowPToHighPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP) {
                HighEToLowECount++;
                HighPToHighPCount++;
            }
        } else if ((numE >= avgSetting) && (numP < avgSetting)) {
            roomType = C_HL_ROOMTYPE.HighELowP;
            HighELowPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP) {
                LowEToHighECount++;
                LowPToLowPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP) {
                LowEToHighECount++;
                HighPToLowPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighELowP) {
                HighEToHighECount++;
                LowPToLowPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP) {
                HighEToHighECount++;
                HighPToLowPCount++;
            }
        } else if ((numE >= avgSetting) && (numP >= avgSetting)) {
            roomType = C_HL_ROOMTYPE.HighEHighP;
            HighEHighPCount++;
            if (previousRoomType == C_HL_ROOMTYPE.LowELowP) {
                LowEToHighECount++;
                LowPToHighPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.LowEHighP) {
                LowEToHighECount++;
                HighPToHighPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighELowP) {
                HighEToHighECount++;
                LowPToHighPCount++;
            } else if (previousRoomType == C_HL_ROOMTYPE.HighEHighP) {
                HighEToHighECount++;
                HighPToHighPCount++;
            }
        }

        return roomType;
    }