123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- using UnityEngine;
- using UnityEngine.Assertions;
- using UnityEditor;
- using UnityEditorInternal;
- using System;
- using System.IO;
- using System.Collections;
- using System.Collections.Generic;
- namespace VoxelImporter
- {
- [CustomEditor(typeof(VoxelSkinnedAnimationObjectExplosion))]
- public class VoxelSkinnedAnimationObjectExplosionEditor : VoxelBaseExplosionEditor
- {
- public VoxelSkinnedAnimationObjectExplosion explosionObject { get; protected set; }
- public VoxelSkinnedAnimationObjectExplosionCore explosionObjectCore { get; protected set; }
- protected override void OnEnable()
- {
- base.OnEnable();
- explosionBase = explosionObject = target as VoxelSkinnedAnimationObjectExplosion;
- if (explosionObject == null) return;
- explosionCore = explosionObjectCore = new VoxelSkinnedAnimationObjectExplosionCore(explosionObject);
- if (explosionCore.voxelBase == null)
- {
- Undo.DestroyObjectImmediate(explosionBase);
- return;
- }
- OnEnableInitializeSet();
- }
- protected override void Inspector_MeshMaterial()
- {
- #region Mesh
- {
- if (explosionObject.meshes != null)
- {
- if (prefabEnable)
- {
- bool contains = true;
- for (int i = 0; i < explosionObject.meshes.Count; i++)
- {
- if (explosionObject.meshes[i] == null || explosionObject.meshes[i].mesh == null || !AssetDatabase.Contains(explosionObject.meshes[i].mesh))
- contains = false;
- }
- EditorGUILayout.LabelField("Mesh", contains ? EditorStyles.boldLabel : guiStyleRedBold);
- }
- else
- {
- EditorGUILayout.LabelField("Mesh", EditorStyles.boldLabel);
- }
- }
- else
- {
- EditorGUILayout.LabelField("Mesh", guiStyleMagentaBold);
- }
- {
- EditorGUI.indentLevel++;
- {
- if (explosionObject.meshes != null)
- {
- for (int i = 0; i < explosionObject.meshes.Count; i++)
- {
- EditorGUILayout.BeginHorizontal();
- {
- EditorGUI.BeginDisabledGroup(true);
- EditorGUILayout.ObjectField(explosionObject.meshes[i].mesh, typeof(Mesh), false);
- EditorGUI.EndDisabledGroup();
- }
- if (explosionObject.meshes[i] != null && explosionObject.meshes[i].mesh != null)
- {
- if (!IsMainAsset(explosionObject.meshes[i].mesh))
- {
- if (GUILayout.Button("Save", GUILayout.Width(48), GUILayout.Height(16)))
- {
- #region Create Mesh
- string path = EditorUtility.SaveFilePanel("Save mesh", explosionCore.voxelBaseCore.GetDefaultPath(), string.Format("{0}_explosion_mesh{1}.asset", explosionObject.gameObject.name, i), "asset");
- if (!string.IsNullOrEmpty(path))
- {
- if (path.IndexOf(Application.dataPath) < 0)
- {
- SaveInsideAssetsFolderDisplayDialog();
- }
- else
- {
- Undo.RecordObject(explosionObject, "Save Mesh");
- path = path.Replace(Application.dataPath, "Assets");
- AssetDatabase.CreateAsset(Mesh.Instantiate(explosionObject.meshes[i].mesh), path);
- explosionObject.meshes[i].mesh = AssetDatabase.LoadAssetAtPath<Mesh>(path);
- explosionCore.Generate();
- }
- }
- #endregion
- }
- }
- {
- if (GUILayout.Button("Reset", GUILayout.Width(48), GUILayout.Height(16)))
- {
- #region Reset Mesh
- Undo.RecordObject(explosionObject, "Reset Mesh");
- explosionObject.meshes[i].mesh = null;
- explosionCore.Generate();
- #endregion
- }
- }
- }
- EditorGUILayout.EndHorizontal();
- }
- }
- }
- EditorGUI.indentLevel--;
- }
- }
- #endregion
- #region Material
- {
- if (explosionObject.materials != null)
- {
- if (prefabEnable)
- {
- bool contains = true;
- for (int i = 0; i < explosionObject.materials.Count; i++)
- {
- if (explosionObject.materials[i] == null || !AssetDatabase.Contains(explosionObject.materials[i]))
- contains = false;
- }
- EditorGUILayout.LabelField("Material", contains ? EditorStyles.boldLabel : guiStyleRedBold);
- }
- else
- {
- EditorGUILayout.LabelField("Material", EditorStyles.boldLabel);
- }
- }
- else
- {
- EditorGUILayout.LabelField("Material", guiStyleMagentaBold);
- }
- {
- EditorGUI.indentLevel++;
- {
- if (explosionObject.materials != null)
- {
- for (int i = 0; i < explosionObject.materials.Count; i++)
- {
- EditorGUILayout.BeginHorizontal();
- {
- EditorGUI.BeginDisabledGroup(true);
- EditorGUILayout.ObjectField(explosionObject.materials[i], typeof(Material), false);
- EditorGUI.EndDisabledGroup();
- }
- if (explosionObject.materials[i] != null)
- {
- if (!IsMainAsset(explosionObject.materials[i]))
- {
- if (GUILayout.Button("Save", GUILayout.Width(48), GUILayout.Height(16)))
- {
- #region Create Material
- string path = EditorUtility.SaveFilePanel("Save material", explosionCore.voxelBaseCore.GetDefaultPath(), string.Format("{0}_explosion_mat{1}.mat", explosionObject.gameObject.name, i), "mat");
- if (!string.IsNullOrEmpty(path))
- {
- if (path.IndexOf(Application.dataPath) < 0)
- {
- SaveInsideAssetsFolderDisplayDialog();
- }
- else
- {
- Undo.RecordObject(explosionObject, "Save Material");
- path = path.Replace(Application.dataPath, "Assets");
- AssetDatabase.CreateAsset(Material.Instantiate(explosionObject.materials[i]), path);
- explosionObject.materials[i] = AssetDatabase.LoadAssetAtPath<Material>(path);
- explosionCore.Generate();
- }
- }
- #endregion
- }
- }
- {
- if (GUILayout.Button("Reset", GUILayout.Width(48), GUILayout.Height(16)))
- {
- #region Reset Material
- Undo.RecordObject(explosionObject, "Reset Material");
- if (!IsMainAsset(explosionObject.materials[i]))
- explosionObject.materials[i] = null;
- else
- explosionObject.materials[i] = Instantiate<Material>(explosionObject.materials[i]);
- explosionCore.Generate();
- #endregion
- }
- }
- }
- EditorGUILayout.EndHorizontal();
- }
- }
- }
- EditorGUI.indentLevel--;
- }
- }
- #endregion
- }
- protected override void Inspector_Bake()
- {
- explosionObject.edit_bakeFoldout = EditorGUILayout.Foldout(explosionObject.edit_bakeFoldout, "Bake", guiStyleFoldoutBold);
- if (explosionObject.edit_bakeFoldout)
- {
- EditorGUILayout.BeginHorizontal(GUI.skin.box);
- EditorGUILayout.BeginVertical();
- {
- #region Mesh
- {
- if (explosionObject.meshes != null)
- {
- if (prefabEnable)
- {
- bool contains = true;
- for (int i = 0; i < explosionObject.meshes.Count; i++)
- {
- if (explosionObject.meshes[i] == null || (explosionObject.meshes[i].bakeMesh != null && !AssetDatabase.Contains(explosionObject.meshes[i].bakeMesh)))
- contains = false;
- }
- EditorGUILayout.LabelField("Mesh", contains ? EditorStyles.boldLabel : guiStyleRedBold);
- }
- else
- {
- EditorGUILayout.LabelField("Mesh", EditorStyles.boldLabel);
- }
- }
- else
- {
- EditorGUILayout.LabelField("Mesh", guiStyleMagentaBold);
- }
- {
- EditorGUI.indentLevel++;
- {
- if (explosionObject.meshes != null)
- {
- for (int i = 0; i < explosionObject.meshes.Count; i++)
- {
- EditorGUILayout.BeginHorizontal();
- {
- EditorGUI.BeginDisabledGroup(true);
- EditorGUILayout.ObjectField(explosionObject.meshes[i].bakeMesh, typeof(Mesh), false);
- EditorGUI.EndDisabledGroup();
- }
- if (explosionObject.meshes[i] != null && explosionObject.meshes[i].bakeMesh != null)
- {
- if (!IsMainAsset(explosionObject.meshes[i].bakeMesh))
- {
- if (GUILayout.Button("Save", GUILayout.Width(48), GUILayout.Height(16)))
- {
- #region Create Mesh
- string path = EditorUtility.SaveFilePanel("Save mesh", explosionCore.voxelBaseCore.GetDefaultPath(), string.Format("{0}_explosion_bake_mesh{1}.asset", explosionObject.gameObject.name, i), "asset");
- if (!string.IsNullOrEmpty(path))
- {
- if (path.IndexOf(Application.dataPath) < 0)
- {
- SaveInsideAssetsFolderDisplayDialog();
- }
- else
- {
- Undo.RecordObject(explosionObject, "Save Mesh");
- path = path.Replace(Application.dataPath, "Assets");
- AssetDatabase.CreateAsset(Mesh.Instantiate(explosionObject.meshes[i].bakeMesh), path);
- explosionObject.meshes[i].bakeMesh = AssetDatabase.LoadAssetAtPath<Mesh>(path);
- explosionCore.Generate();
- ForceRepaint();
- }
- }
- #endregion
- }
- }
- {
- if (GUILayout.Button("Reset", GUILayout.Width(48), GUILayout.Height(16)))
- {
- #region Reset Mesh
- Undo.RecordObject(explosionObject, "Reset Mesh");
- explosionObject.meshes[i].bakeMesh = null;
- explosionCore.Generate();
- ForceRepaint();
- #endregion
- }
- }
- }
- EditorGUILayout.EndHorizontal();
- }
- }
- }
- EditorGUI.indentLevel--;
- }
- }
- #endregion
-
- EditorGUILayout.Space();
- #region Bake
- {
- EditorGUILayout.BeginHorizontal();
- if (GUILayout.Button("Bake"))
- {
- Undo.RecordObject(explosionBase, "Bake Voxel Explosion");
- explosionObjectCore.Bake();
- ForceRepaint();
- }
- EditorGUILayout.EndHorizontal();
- }
- #endregion
- }
- EditorGUILayout.EndVertical();
- EditorGUILayout.EndHorizontal();
- }
- }
-
- [MenuItem("CONTEXT/VoxelSkinnedAnimationObjectExplosion/Save All Unsaved Assets")]
- private static void ContextSaveAllUnsavedAssets(MenuCommand menuCommand)
- {
- var explosionObject = menuCommand.context as VoxelSkinnedAnimationObjectExplosion;
- if (explosionObject == null) return;
- var explosionCore = new VoxelSkinnedAnimationObjectExplosionCore(explosionObject);
- var folder = EditorUtility.OpenFolderPanel("Save all", explosionCore.voxelBaseCore.GetDefaultPath(), null);
- if (string.IsNullOrEmpty(folder)) return;
- if (folder.IndexOf(Application.dataPath) < 0)
- {
- SaveInsideAssetsFolderDisplayDialog();
- return;
- }
- Undo.RecordObject(explosionObject, "Save All Unsaved Assets");
- #region Mesh
- if (explosionObject.meshes != null)
- {
- for (int i = 0; i < explosionObject.meshes.Count; i++)
- {
- if (explosionObject.meshes[i] != null && explosionObject.meshes[i].mesh != null && !IsMainAsset(explosionObject.meshes[i].mesh))
- {
- var path = folder + "/" + string.Format("{0}_explosion_mesh{1}.asset", explosionObject.gameObject.name, i);
- path = path.Replace(Application.dataPath, "Assets");
- path = AssetDatabase.GenerateUniqueAssetPath(path);
- AssetDatabase.CreateAsset(Mesh.Instantiate(explosionObject.meshes[i].mesh), path);
- explosionObject.meshes[i].mesh = AssetDatabase.LoadAssetAtPath<Mesh>(path);
- }
- if (explosionObject.meshes[i] != null && explosionObject.meshes[i].bakeMesh != null && !IsMainAsset(explosionObject.meshes[i].bakeMesh))
- {
- var path = folder + "/" + string.Format("{0}_explosion_bake_mesh{1}.asset", explosionObject.gameObject.name, i);
- path = path.Replace(Application.dataPath, "Assets");
- path = AssetDatabase.GenerateUniqueAssetPath(path);
- AssetDatabase.CreateAsset(Mesh.Instantiate(explosionObject.meshes[i].bakeMesh), path);
- explosionObject.meshes[i].bakeMesh = AssetDatabase.LoadAssetAtPath<Mesh>(path);
- }
- }
- }
- #endregion
- #region Material
- if (explosionObject.materials != null)
- {
- for (int index = 0; index < explosionObject.materials.Count; index++)
- {
- if (explosionObject.materials[index] == null) continue;
- if (IsMainAsset(explosionObject.materials[index])) continue;
- var path = folder + "/" + string.Format("{0}_explosion_mat{1}.mat", explosionObject.gameObject.name, index);
- path = path.Replace(Application.dataPath, "Assets");
- path = AssetDatabase.GenerateUniqueAssetPath(path);
- AssetDatabase.CreateAsset(Material.Instantiate(explosionObject.materials[index]), path);
- explosionObject.materials[index] = AssetDatabase.LoadAssetAtPath<Material>(path);
- }
- }
- #endregion
- explosionCore.Generate();
- InternalEditorUtility.RepaintAllViews();
- }
- [MenuItem("CONTEXT/VoxelSkinnedAnimationObjectExplosion/Reset All Assets")]
- private static void ResetAllSavedAssets(MenuCommand menuCommand)
- {
- var explosionObject = menuCommand.context as VoxelSkinnedAnimationObjectExplosion;
- if (explosionObject == null) return;
- var explosionCore = new VoxelSkinnedAnimationObjectExplosionCore(explosionObject);
- Undo.RecordObject(explosionObject, "Reset All Assets");
- #region Mesh
- explosionObject.meshes = null;
- #endregion
- #region Material
- if (explosionObject.materials != null)
- {
- for (int i = 0; i < explosionObject.materials.Count; i++)
- {
- if (explosionObject.materials[i] == null) continue;
- if (!IsMainAsset(explosionObject.materials[i]))
- explosionObject.materials[i] = null;
- else
- explosionObject.materials[i] = Instantiate<Material>(explosionObject.materials[i]);
- }
- }
- #endregion
- explosionCore.Generate();
- InternalEditorUtility.RepaintAllViews();
- }
- }
- }
|