public override void OnInspectorGUI()

in IndoorSceneSynthesis/ConstraintStochasticIndoorSceneGeneration/Custom/CustomEditor/CSceneBuilder.cs [20:195]


    public override void OnInspectorGUI() {
        GUILayout.Label("Json file", EditorStyles.boldLabel);
        CSceneBuilderTool.jsonPath = (string)EditorGUILayout.TextField(CSceneBuilderTool.jsonPath);
        GUILayout.Label("Build path", EditorStyles.boldLabel);
        CSceneBuilderTool.buildPath = (string)EditorGUILayout.TextField(CSceneBuilderTool.buildPath);
        GUILayout.Label("Global random seed", EditorStyles.boldLabel);
        CSceneBuilderTool.globalRandomSeed = (int)EditorGUILayout.IntField(CSceneBuilderTool.globalRandomSeed);
        GUILayout.Space(8);
        //GUILayout.Label("Room layout path (.unity)", EditorStyles.boldLabel);
        //CSceneBuilderTool.roomLayoutFolder = (string)EditorGUILayout.TextField(CSceneBuilderTool.roomLayoutFolder);

        GUILayout.Label("\n Log");
        CSceneBuilderTool.samplingRoomType = (CRoomType)EditorGUILayout.EnumPopup("Room Type:", CSceneBuilderTool.samplingRoomType);
        //CSceneBuilderTool.currentJsonIndex = (int)EditorGUILayout.IntField("current json index:", CSceneBuilderTool.currentJsonIndex);
        //CSceneBuilderTool.logFilePath = (string)EditorGUILayout.TextField("log file", CSceneBuilderTool.logFilePath);

        CSceneBuilderTool.loadDrawerShelfCabinet = (bool)EditorGUILayout.Toggle("Load shelf, cabinet or drawer", CSceneBuilderTool.loadDrawerShelfCabinet);

        //if (GUILayout.Button("Click me")) {
        //    targetScript.GenerateScene();
        //}

        //if (GUILayout.Button("Generate Scene from scratch")) {
        //    targetScript.GenerateSceneFromScratch();
        //}

        GUILayout.Label("\n\n Generation for one json in specific scene prefab");

        if (GUILayout.Button("Load Json Test")) {
            Debug.Log("Loading json from file: " + CSceneBuilderTool.jsonPath);
            CSceneBuilderTool.LoadJsonInfo();
        }

        if (GUILayout.Button("Generate Scene from Current Prefab")) {
            EditorCoroutineUtility.StartCoroutineOwnerless(targetScript.SetUpNewSceneFromSelf(true));
        }

        //if (GUILayout.Button("Generate Scene One by One")) {
        //    //Debug.Log(CSceneBuilderTool.jsonRule.taskDesc);
        //    targetScript.GenerateSceneOneByOne();
        //}

        //if (GUILayout.Button("Load next json (debug)")) {
        //    //Debug.Log(CSceneBuilderTool.jsonRule.taskDesc);
        //    targetScript.LoadNextJson();
        //}




        GUILayout.Label("\n\n Batch generation for mutiple json");
        if (GUILayout.Button("One merged json & generate from current scene")) {

            CObjectPool objectPool = GameObject.Find("ObjectPlacer").GetComponent<CObjectPool>();
            string scene_name = EditorSceneManager.GetActiveScene().name;
            string sceneIndexStr = scene_name.Substring(scene_name.Length - 3);
            if (CSceneBuilderTool.samplingRoomType == CRoomType.Kitchen) {
                sceneIndexStr = scene_name.Substring(8);
            }
            objectPool.taskPath = "Assets/Custom/Json/Floorplans/FloorPlan" + sceneIndexStr;

            Debug.Log("sceneIndexStr: " + sceneIndexStr);
            objectPool.LoadMergedJson();

            IEnumerator MergeSceneGeneration(string sceneIndexss) {
                CSceneBuilderTool.currentTrial++;
                CSceneBuilderTool.isSampling = true;
                Debug.Log("Start MergeSceneGeneration");
                EditorCoroutineUtility.StartCoroutineOwnerless(targetScript.SetUpNewSceneFromSelf(setRandomSeed: true, objectRandomSeed: int.Parse(sceneIndexss)));

                while (CSceneBuilderTool.isSampling) {
                    yield return new EditorWaitForSeconds(2);
                }

                if (CSceneBuilderTool.last_scene_successful || CSceneBuilderTool.currentTrial > 5) {
                    //if successful and reach max trials
                    //reset and return
                    CSceneBuilderTool.oneJsonLock = false;

                    yield return null;
                } else {
                    //start again
                    EditorCoroutineUtility.StartCoroutineOwnerless(MergeSceneGeneration(sceneIndexss));
                }
            }

            EditorCoroutineUtility.StartCoroutineOwnerless(MergeSceneGeneration(sceneIndexStr));
        }



        if (GUILayout.Button("Load merged json & generate from all scenes")) {

            CSceneBuilderTool.currentTrial = 0;
            //CSceneBuilderTool.samplingRoomType = CRoomType.Kitchen;

            IEnumerator MergeSceneGeneration(string sceneIndexss) {
                CSceneBuilderTool.currentTrial++;
                CSceneBuilderTool.isSampling = true;
                EditorCoroutineUtility.StartCoroutineOwnerless(targetScript.SetUpNewSceneFromSelf(setRandomSeed: true,
                    objectRandomSeed: int.Parse(sceneIndexss), deleteUnsuccessful: false));

                while (CSceneBuilderTool.isSampling) {
                    yield return new EditorWaitForSeconds(2);
                }

                //CSceneBuilderTool.oneJsonLock = false;
                if (CSceneBuilderTool.last_scene_successful || CSceneBuilderTool.currentTrial > 5) {
                    //if successful and reach max trials
                    //reset and return
                    CSceneBuilderTool.oneJsonLock = false;

                    yield return null;
                } else {
                    //start again
                    EditorCoroutineUtility.StartCoroutineOwnerless(MergeSceneGeneration(sceneIndexss));
                }
            }

            IEnumerator GenerateAllMergeScene() {
                DirectoryInfo sceneDir = new DirectoryInfo("Assets/Custom/Kitchens");
                CRoomType mergedSampleRoomType = CSceneBuilderTool.samplingRoomType;

                if (CSceneBuilderTool.samplingRoomType == CRoomType.LivingRoom) {
                    sceneDir = new DirectoryInfo("Assets/Custom/LivingRooms");
                }
                else if (CSceneBuilderTool.samplingRoomType == CRoomType.Bedroom) {
                    sceneDir = new DirectoryInfo("Assets/Custom/Bedrooms");
                }
                else{ //(CSceneBuilderTool.samplingRoomType == CRoomType.Bathroom)
                    sceneDir = new DirectoryInfo("Assets/Custom/Bathrooms");
                }


                FileInfo[] sceneList = sceneDir.GetFiles("*.unity");
                foreach (FileInfo sceneFile in sceneList) {
                    Debug.Log("Generated scene from: " + sceneFile.ToString());
                    EditorSceneManager.OpenScene(sceneFile.ToString());
                    CSceneBuilderTool.currentTrial = 0;

                    //????
                    CSceneBuilderTool.samplingRoomType = CRoomType.Bedroom; 

                    CObjectPool objectPool = GameObject.Find("ObjectPlacer").GetComponent<CObjectPool>();
                    string scene_name = EditorSceneManager.GetActiveScene().name;
                    string sceneIndexStr = scene_name.Substring(scene_name.Length - 3);

                   

                    if (CSceneBuilderTool.samplingRoomType == CRoomType.Kitchen) {
                        sceneIndexStr = scene_name.Substring(8);
                    }

                    objectPool.taskPath = "Assets/Custom/Json/Floorplans/FloorPlan" + sceneIndexStr;
                    List<string> validation_scene_indexes = new List<string>() { "9", "10", "29", "215", "219", "226", "308",
                        "315", "325", "404", "424", "425"};
                    if (validation_scene_indexes.Contains(sceneIndexStr))
                        continue;


                    Debug.Log("sceneIndexStr: " + sceneIndexStr);
                    objectPool.LoadMergedJson();

                    CSceneBuilderTool.oneJsonLock = true;
                    EditorCoroutineUtility.StartCoroutineOwnerless(MergeSceneGeneration(sceneIndexStr));

                    while (CSceneBuilderTool.oneJsonLock) {
                        yield return new EditorWaitForSeconds(2);
                    }
                    yield return null;
                }
            }

            EditorCoroutineUtility.StartCoroutineOwnerless(GenerateAllMergeScene());
        }
    }