/// <summary>
            /// Save all toggled Asset Root for the current scene.
            /// </summary>
            /// <param name="console_log">List of saved assets path (log purpose).</param>
            /// <returns>-1 if it fail, the number of assets saved otherwise</returns>
            public int SaveAll(out string console_log)
            {
                string log         = string.Empty;
                int    affectedRow = -1;

                if (ToogleScene)
                {
                    string folderPath = CheckFolderPathValidity(StaticFolderPath, Scene.name);
                    if (!string.IsNullOrEmpty(folderPath))
                    {
                        affectedRow = 0;
                        for (int index = 0; index < AssetToggleCollection.Count; index++)
                        {
                            if (AssetToggleCollection[index].IsToggle)
                            {
                                HEU_HoudiniAssetRoot assetRoot = AssetToggleCollection[index].RootAsset;
                                string fullpath = CreateFullPath(folderPath, assetRoot.gameObject.name);
                                HEU_AssetPresetUtility.SaveAssetPresetToFile(assetRoot._houdiniAsset, fullpath);
                                log += fullpath + Environment.NewLine;
                                affectedRow++;
                            }
                        }
                    }
                    else
                    {
                        log += "Folder path not valid.";
                    }
                }
                console_log = log;
                return(affectedRow);
            }
            public void DrawGui()
            {
                EditorGUILayout.BeginVertical();
                {
                    ToogleScene = EditorGUILayout.BeginToggleGroup(Scene.name, ToogleScene);
                    if (ToogleScene)
                    {
                        using (new GUILayout.HorizontalScope())
                        {
                            GUILayout.Space(30f);
                            bool toggleJustChange = false;
                            using (new GUILayout.VerticalScope())
                            {
                                EditorGUILayout.BeginHorizontal(GUILayout.Height(20f));
                                {
                                    EditorGUI.BeginChangeCheck();
                                    ToogleAllAsset   = EditorGUILayout.ToggleLeft("All", ToogleAllAsset);
                                    toggleJustChange = EditorGUI.EndChangeCheck();

                                    GUILayout.Space(50f);
                                    if (GUILayout.Button("Save", new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Width(50) }))
                                    {
                                        ButtonSaveClicked();
                                    }
                                    if (GUILayout.Button("Bake", new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Width(50) }))
                                    {
                                        ButtonBakeClicked();
                                    }
                                    if (GUILayout.Button("Sort", new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Width(50) }))
                                    {
                                        ButtonSortClicked();
                                    }
                                    if (GUILayout.Button("Rename", new GUILayoutOption[] { GUILayout.ExpandWidth(false), GUILayout.Width(70) }))
                                    {
                                        ButtonRenameClicked();
                                    }
                                    FileSaveNameBase = GUILayout.TextField(FileSaveNameBase, new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.MinWidth(140) });
                                }
                                EditorGUILayout.EndHorizontal();

                                EditorGUILayout.BeginVertical();
                                for (int i = 0; i < AssetToggleCollection.Count; i++)
                                {
                                    HEU_HoudiniAssetRoot assetRoot = AssetToggleCollection[i].RootAsset;

                                    EditorGUILayout.BeginHorizontal();
                                    AssetToggleCollection[i].IsToggle = EditorGUILayout.ToggleLeft(assetRoot.name, toggleJustChange ? ToogleAllAsset : AssetToggleCollection[i].IsToggle);
                                    GUILayout.FlexibleSpace();
                                    EditorGUILayout.EndHorizontal();
                                }

                                EditorGUILayout.EndVertical();
                            }
                        }
                    }
                    EditorGUILayout.EndToggleGroup();
                }
                EditorGUILayout.EndVertical();
            }
            /// <summary>
            /// Rename all toggled Asset Root for the current scene.
            /// </summary>
            /// <param name="log">List of renamed assets name (log purpose).</param>
            /// <returns>-1 if it fail, the number of assets saved otherwise</returns>
            public int RenameAll(out string console_log)
            {
                string log         = string.Empty;
                int    affectedRow = 0;

                for (int level0Index = 0; level0Index < AssetToggleCollection.Count; level0Index++)
                {
                    if (AssetToggleCollection[level0Index].IsToggle)
                    {
                        //rename root (level 0)
                        HEU_HoudiniAssetRoot asset = AssetToggleCollection[level0Index].RootAsset;
                        affectedRow++;
                        GameObject level0GameObject = asset.gameObject;
                        log += level0GameObject.name + " => ";
                        level0GameObject.name = FileSaveNameBase + (affectedRow.ToString("D2"));
                        log += level0GameObject.name + Environment.NewLine;

                        //rename level 1
                        Transform level0Transform = level0GameObject.transform;
                        for (int level1Index = 0; level1Index < level0Transform.childCount; level1Index++)
                        {
                            GameObject level1GameObject = level0Transform.GetChild(level1Index).gameObject;
                            if (level1GameObject.GetComponent <HEU_HoudiniAsset>() == null) // ignore HDA_Data
                            {
                                log += level1GameObject.name + " => ";
                                level1GameObject.name = $"{level0GameObject.name}_{(level1Index + 1).ToString( "D2" )}";
                                log += level1GameObject.name + Environment.NewLine;

                                //rename level 2
                                Transform level1Transform = level1GameObject.transform;
                                for (int level2Index = 0; level2Index < level1Transform.childCount; level2Index++)
                                {
                                    GameObject level2GameObject = level1Transform.GetChild(level2Index).gameObject;
                                    log += level2GameObject.name + " => ";
                                    level2GameObject.name = $"{level1GameObject.name}_instance{(level2Index + 1).ToString( "D2" )}";
                                    log += level2GameObject.name + Environment.NewLine;
                                }
                            }
                        }
                        log += Environment.NewLine;
                    }
                }
                console_log = log;
                return(affectedRow);
            }
            private void BakeAsset(HEU_HoudiniAssetRoot asset_root, int index)
            {
                GameObject       assetGameObject = asset_root.gameObject;
                HEU_HoudiniAsset asset           = asset_root._houdiniAsset;
                int siblingIndex = asset_root.transform.GetSiblingIndex();

                asset._bakedEvent.AddListener((instance, success, outputList) =>
                {
                    if (success)
                    {
                        outputList[0].name = $"{assetGameObject.name}_baked";
                        outputList[0].transform.SetSiblingIndex(siblingIndex);
                        AssetToggleCollection[index].ToDeleteFlag = true;
                    }
                });
                SceneManager.SetActiveScene(assetGameObject.scene);
                asset.BakeToNewStandalone();
            }
    /// <summary>
    /// Shows how to get the HEU_HoudiniAsset component from a HDA root gameobject.
    /// </summary>
    public static HEU_HoudiniAsset QueryHoudiniAsset(GameObject rootGO)
    {
        // First get the HEU_HoudiniAssetRoot which is the script at the root gameobject
        HEU_HoudiniAssetRoot heuRoot = rootGO.GetComponent <HEU_HoudiniAssetRoot>();

        if (heuRoot == null)
        {
            Debug.LogWarningFormat("Unable to get the HEU_HoudiniAssetRoot from gameobject: {0}. Not a valid HDA.", rootGO.name);
            return(null);
        }

        // The HEU_HoudiniAssetRoot should have a reference to HEU_HoudiniAsset which is the main HEU asset script.
        if (heuRoot._houdiniAsset == null)
        {
            Debug.LogWarningFormat("Unable to get the HEU_HoudiniAsset in root gameobject: {0}. Not a valid HDA.", rootGO.name);
            return(null);
        }

        return(heuRoot._houdiniAsset);
    }
Пример #6
0
    /// <summary>
    /// Randomizes the houdini variables of one plant according to the randomizer settings
    /// </summary>
    /// <param name="spawnSettings"></param>
    /// <returns></returns>
    private IEnumerator randomizeHoudiniVars(PlantSpawnSettings spawnSettings)
    {
        HEU_HoudiniAssetRoot assetRoot = spawnSettings.mainHoudiniPlant.GetComponent <HEU_HoudiniAssetRoot>();

        foreach (PlantVariationSetting variation in spawnSettings.randomizers)
        {
            switch (variation.type)
            {
            case PlantVariationTypes.Int:
                HEU_ParameterUtility.SetInt(assetRoot._houdiniAsset, variation.houdiniKey, Random.Range((int)variation.minValue, (int)variation.maxValue));
                break;

            case PlantVariationTypes.Float:
                HEU_ParameterUtility.SetFloat(assetRoot._houdiniAsset, variation.houdiniKey, Random.Range(variation.minValue, variation.maxValue));
                break;
            }
        }
        assetRoot._houdiniAsset.RequestCook(bCheckParametersChanged: true, bAsync: false, bSkipCookCheck: true, bUploadParameters: true);
        yield return(null);
    }
            private bool BakeAsset(int index, string folder_path, out string console_log)
            {
                string log    = string.Empty;
                bool   result = false;

                if (AssetToggleCollection[index].IsToggle)
                {
                    HEU_HoudiniAssetRoot assetRoot = AssetToggleCollection[index].RootAsset;
                    string assetName = assetRoot.name;

                    //Save
                    string fullpath = CreateFullPath(folder_path, assetName);
                    HEU_AssetPresetUtility.SaveAssetPresetToFile(assetRoot._houdiniAsset, fullpath);
                    log += fullpath;

                    //Bake
                    BakeAsset(assetRoot, index);

                    result = true;
                }
                console_log = log;
                return(result);
            }
 public RootAssetToggle(HEU_HoudiniAssetRoot asset, bool is_toggle)
 {
     RootAsset    = asset;
     IsToggle     = is_toggle;
     ToDeleteFlag = false;
 }
 public void AddToSceneRootAssetCollection(HEU_HoudiniAssetRoot asset, bool is_toggle)
 {
     AssetToggleCollection.Add(new RootAssetToggle(asset, is_toggle));
     ToogleScene = ToogleScene || is_toggle;
 }
 public SceneHoudiniRoot(Scene asset_scene, HEU_HoudiniAssetRoot asset, bool asset_toggle)
 {
     Scene = asset_scene;
     AddToSceneRootAssetCollection(asset, asset_toggle);
     FileSaveNameBase = asset.name;
 }