/// <summary> /// hooks up the component object as the inspector target /// </summary> public virtual void OnEnable() { m_Component = (vp_FootstepManager)target; m_Component.SetDirty(true); }
/// <summary> /// /// </summary> public virtual void DoSurfaceTypesFoldout() { if (m_Component.SurfaceTypes != null) { for (int i = 0; i < m_Component.SurfaceTypes.Count; ++i) { vp_FootstepManager.vp_SurfaceTypes surface = m_Component.SurfaceTypes[i]; GUILayout.BeginHorizontal(); GUILayout.Space(20); surface.Foldout = EditorGUILayout.Foldout(surface.Foldout, surface.SurfaceName); if (i > 0) { if (GUILayout.Button("^", vp_EditorGUIUtility.SmallButtonStyle, GUILayout.MinWidth(15), GUILayout.MaxWidth(15), GUILayout.MinHeight(15))) { int newIndex = i - 1; List <vp_FootstepManager.vp_SurfaceTypes> newSurfaces = new List <vp_FootstepManager.vp_SurfaceTypes>(); for (int x = 0; x < m_Component.SurfaceTypes.Count; x++) { vp_FootstepManager.vp_SurfaceTypes surf = m_Component.SurfaceTypes[x]; if (x == newIndex) { newSurfaces.Add(surface); newSurfaces.Add(surf); } else if (surf != surface) { newSurfaces.Add(surf); } } m_Component.SurfaceTypes = newSurfaces; m_Component.SetDirty(true); return; } GUILayout.Space(5); } if (GUILayout.Button("Remove", vp_EditorGUIUtility.SmallButtonStyle, GUILayout.MinWidth(50), GUILayout.MaxWidth(50), GUILayout.MinHeight(15))) { m_Component.SurfaceTypes.RemoveAt(i); --i; } GUI.backgroundColor = Color.white; GUILayout.Space(20); GUILayout.EndHorizontal(); GUILayout.Space(5); if (surface.Foldout) { GUILayout.BeginHorizontal(); GUILayout.Space(35); if (surface.SurfaceName == "") { surface.SurfaceName = "Surface " + (i + 1); } surface.SurfaceName = EditorGUILayout.TextField("Surface Name", surface.SurfaceName, GUILayout.MaxWidth(250)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(35); surface.RandomPitch = EditorGUILayout.Vector2Field("Random Pitch", surface.RandomPitch); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Space(38); if (surface.SoundsFoldout) { surface.SoundsFoldout = EditorGUILayout.Foldout(surface.SoundsFoldout, "Sounds", HeaderStyleSelected); } else { surface.SoundsFoldout = EditorGUILayout.Foldout(surface.SoundsFoldout, "Sounds"); } GUILayout.EndHorizontal(); if (surface.SoundsFoldout) { if (surface.Sounds != null) { if (surface.Sounds.Count > 0) { for (int x = 0; x < surface.Sounds.Count; ++x) { GUILayout.BeginHorizontal(); GUILayout.Space(50); surface.Sounds[x] = (AudioClip)EditorGUILayout.ObjectField("", surface.Sounds[x], typeof(AudioClip), false); if (surface.Sounds[x] == null) { GUI.enabled = false; } if (GUILayout.Button(">", vp_EditorGUIUtility.SmallButtonStyle, GUILayout.MinWidth(15), GUILayout.MaxWidth(15), GUILayout.MinHeight(15))) { AudioSource audio = m_Component.transform.root.GetComponentInChildren <AudioSource>(); if (audio != null) { audio.PlayOneShot(surface.Sounds[x]); } } GUI.enabled = true; if (GUILayout.Button("X", vp_EditorGUIUtility.SmallButtonStyle, GUILayout.MinWidth(15), GUILayout.MaxWidth(15), GUILayout.MinHeight(15))) // if (GUILayout.Button("X", GUILayout.Width(25), GUILayout.Height(15))) { surface.Sounds.RemoveAt(x); m_Component.SetDirty(true); --x; } GUI.backgroundColor = Color.white; GUILayout.Space(20); GUILayout.EndHorizontal(); } } } if (surface.Sounds.Count == 0) { GUILayout.BeginHorizontal(); GUILayout.Space(50); EditorGUILayout.HelpBox("There are no sounds. Click the \"Add Sound\" button to add a sound.", MessageType.Info); GUILayout.Space(20); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Sound", GUILayout.MinWidth(90), GUILayout.MaxWidth(90))) { AudioClip clip = null; surface.Sounds.Add(clip); m_Component.SetDirty(true); } GUI.backgroundColor = Color.white; GUILayout.EndHorizontal(); vp_EditorGUIUtility.Separator(); } GUILayout.BeginHorizontal(); GUILayout.Space(38); if (surface.TexturesFoldout) { surface.TexturesFoldout = EditorGUILayout.Foldout(surface.TexturesFoldout, "Textures", HeaderStyleSelected); } else { surface.TexturesFoldout = EditorGUILayout.Foldout(surface.TexturesFoldout, "Textures"); } GUILayout.EndHorizontal(); if (surface.TexturesFoldout) { if (surface.Textures != null) { if (surface.Textures.Count > 0) { int counter = 0; for (int x = 0; x < surface.Textures.Count; ++x) { if (counter == 0) { GUILayout.BeginHorizontal(GUILayout.MinHeight(100)); GUILayout.Space(50); } GUILayout.BeginVertical(GUILayout.MinHeight(90)); surface.Textures[x] = (Texture)EditorGUILayout.ObjectField(surface.Textures[x], typeof(Texture), false, GUILayout.MinWidth(50), GUILayout.MaxWidth(75), GUILayout.MinHeight(50), GUILayout.MaxHeight(75)); if (GUILayout.Button("Delete", GUILayout.MinWidth(50), GUILayout.MaxWidth(75))) { surface.Textures.RemoveAt(x); m_Component.SetDirty(true); --x; } GUI.backgroundColor = Color.white; GUILayout.EndVertical(); counter++; if (counter == 4 || x == surface.Textures.Count - 1) { GUILayout.Space(20); GUILayout.EndHorizontal(); counter = 0; } } } } if (surface.Textures.Count == 0) { GUILayout.BeginHorizontal(); GUILayout.Space(50); EditorGUILayout.HelpBox("There are no textures. Click the \"Add Texture\" button to add a texture.", MessageType.Info); GUILayout.Space(20); GUILayout.EndHorizontal(); } GUILayout.BeginHorizontal(); GUILayout.FlexibleSpace(); if (GUILayout.Button("Add Texture", GUILayout.MinWidth(90), GUILayout.MaxWidth(90))) { Texture texture = null; surface.Textures.Add(texture); m_Component.SetDirty(true); } GUI.backgroundColor = Color.white; GUILayout.EndHorizontal(); } DrawSeparator(); GUILayout.Space(5); } } } if (m_Component.SurfaceTypes.Count == 0) { GUILayout.BeginHorizontal(); GUILayout.Space(50); EditorGUILayout.HelpBox("There are no Surface Types. Click the \"Add Surface Type\" button to add a new surface type.", MessageType.Info); GUILayout.Space(20); GUILayout.EndHorizontal(); } GUILayout.Space(8f); GUILayout.BeginHorizontal(); if (GUILayout.Button("Add Surface Type", GUILayout.MinWidth(150), GUILayout.MinHeight(25))) { vp_FootstepManager.vp_SurfaceTypes surface = new vp_FootstepManager.vp_SurfaceTypes(); m_Component.SurfaceTypes.Add(surface); } GUI.backgroundColor = Color.white; GUILayout.EndHorizontal(); DrawSeparator(); }