/// <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); }
/// <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; }