/// <summary>
    ///
    /// </summary>
    public virtual void DoSurfaceTypesFoldout()
    {
        vp_FootstepManager[] footstepManagers = vp_FootstepManager.FootstepManagers;

        if (footstepManagers == null || footstepManagers.Length == 0)
        {
            EditorGUILayout.HelpBox("Could not find a vp_FootstepManager component in the hierarchy.", MessageType.Info);
            return;
        }

        vp_FootstepManager footstepManager = footstepManagers[0];

        if (footstepManager == null)
        {
            EditorGUILayout.HelpBox("Could not find a vp_FootstepManager component in the hierarchy.", MessageType.Info);
            return;
        }

        List <vp_FootstepManager.vp_SurfaceTypes> SurfaceTypes = footstepManager.SurfaceTypes;

        if (SurfaceTypes == null || SurfaceTypes.Count == 0)
        {
            EditorGUILayout.HelpBox("No surface types have been added to the footstep manager.", MessageType.Info);
            return;
        }

        string[] surfaces = new string[SurfaceTypes.Count];
        for (int i = 0; i < SurfaceTypes.Count; ++i)
        {
            vp_FootstepManager.vp_SurfaceTypes surface = SurfaceTypes[i];
            surfaces[i] = surface.SurfaceName;
        }

        GUILayout.Space(15);

        GUILayout.BeginHorizontal();
        EditorGUILayout.Popup("Surface Type", m_Component.SurfaceID, surfaces);
        GUILayout.EndHorizontal();

        GUILayout.Space(15);
    }
示例#2
0
    /// <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();
    }
	/// <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 = new AudioClip();
							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 = new Texture();
							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();
		
	}