using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Rendering;
using RuntimeSRPPreferences = UnityEngine.Rendering.CoreRenderPipelinePreferences;
namespace UnityEditor.Rendering
{
///
/// Preferences for Volumes
///
[DisplayInfo(name = "Volumes", order = 50)]
public class VolumesPreferences : ICoreRenderPipelinePreferencesProvider
{
static class Keys
{
internal const string volumeGizmosVisibility = "General.VolumeGizmosVisibility";
}
///
/// Specifies how the gizmos for volumes are being drawn
///
[Flags]
public enum VolumeGizmoVisibility
{
/// Wireframe
Wireframe = 1,
/// Solid
Solid = 2,
/// Solid with Wireframe
Everything = Wireframe | Solid
}
class Styles
{
public static readonly GUIContent volumeGizmosVisibilityLabel = EditorGUIUtility.TrTextContent("Gizmo Visibility", "Specifies how Gizmos for Volumes are being rendered");
}
static VolumeGizmoVisibility s_VolumeGizmosVisibilityOption = VolumeGizmoVisibility.Solid;
static VolumesPreferences()
{
GetColorPrefVolumeGizmoColor = RuntimeSRPPreferences.RegisterPreferenceColor("Scene/Volume Gizmo", s_VolumeGizmoColorDefault);
if (EditorPrefs.HasKey(Keys.volumeGizmosVisibility))
s_VolumeGizmosVisibilityOption = (VolumeGizmoVisibility)EditorPrefs.GetInt(Keys.volumeGizmosVisibility);
}
///
/// Returns the current
///
public static VolumeGizmoVisibility volumeGizmosVisibilityOption
{
get => s_VolumeGizmosVisibilityOption;
set
{
s_VolumeGizmosVisibilityOption = value;
EditorPrefs.SetInt(Keys.volumeGizmosVisibility, (int)s_VolumeGizmosVisibilityOption);
}
}
///
/// Returns if the Volume Gizmos should render the wireframe edges
///
public static bool drawWireFrame => (volumeGizmosVisibilityOption & VolumeGizmoVisibility.Wireframe) == VolumeGizmoVisibility.Wireframe;
///
/// Returns if the Volume Gizmos should render the solid faces
///
public static bool drawSolid => (volumeGizmosVisibilityOption & VolumeGizmoVisibility.Solid) == VolumeGizmoVisibility.Solid;
static Color s_VolumeGizmoColorDefault = new Color(0.2f, 0.8f, 0.1f, 0.125f);
private static Func GetColorPrefVolumeGizmoColor;
///
/// Returns the user defined color for rendering volume gizmos
///
public static Color volumeGizmoColor => GetColorPrefVolumeGizmoColor();
static List s_SearchKeywords = new() { "Gizmo", "Wireframe", "Visibility" };
///
/// The list of keywords for user search
///
public List keywords => s_SearchKeywords;
///
/// Renders the Preferences UI for this provider
///
public void PreferenceGUI()
{
EditorGUI.BeginChangeCheck();
var newValue = EditorGUILayout.EnumPopup(Styles.volumeGizmosVisibilityLabel, volumeGizmosVisibilityOption);
if (EditorGUI.EndChangeCheck())
{
volumeGizmosVisibilityOption = (VolumeGizmoVisibility)newValue;
}
}
}
}