UnityGame/Library/PackageCache/com.unity.render-pipelines.universal/Editor/UniversalRenderPipelineLightEditor.cs
2024-10-27 10:53:47 +03:00

107 lines
3.7 KiB
C#

using System;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.Universal;
namespace UnityEditor.Rendering.Universal
{
[CustomEditor(typeof(Light))]
[SupportedOnRenderPipeline(typeof(UniversalRenderPipelineAsset))]
[CanEditMultipleObjects]
class UniversalRenderPipelineLightEditor : LightEditor
{
UniversalRenderPipelineSerializedLight serializedLight { get; set; }
protected override void OnEnable()
{
serializedLight = new UniversalRenderPipelineSerializedLight(serializedObject, settings);
Undo.undoRedoPerformed += ReconstructReferenceToAdditionalDataSO;
}
internal void ReconstructReferenceToAdditionalDataSO()
{
OnDisable();
OnEnable();
}
protected void OnDisable()
{
Undo.undoRedoPerformed -= ReconstructReferenceToAdditionalDataSO;
}
// IsPreset is an internal API - lets reuse the usable part of this function
// 93 is a "magic number" and does not represent a combination of other flags here
internal static bool IsPresetEditor(UnityEditor.Editor editor)
{
return (int)((editor.target as Component).gameObject.hideFlags) == 93;
}
public override void OnInspectorGUI()
{
serializedLight.Update();
if (IsPresetEditor(this))
{
UniversalRenderPipelineLightUI.PresetInspector.Draw(serializedLight, this);
}
else
{
UniversalRenderPipelineLightUI.Inspector.Draw(serializedLight, this);
}
serializedLight.Apply();
}
protected override void OnSceneGUI()
{
if (!(GraphicsSettings.currentRenderPipeline is UniversalRenderPipelineAsset))
return;
if (!(target is Light light) || light == null)
return;
switch (light.type)
{
case LightType.Spot:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawSpotLightGizmo(light);
}
break;
case LightType.Point:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, Quaternion.identity, Vector3.one)))
{
CoreLightEditorUtilities.DrawPointLightGizmo(light);
}
break;
case LightType.Rectangle:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawRectangleLightGizmo(light);
}
break;
case LightType.Disc:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawDiscLightGizmo(light);
}
break;
case LightType.Directional:
using (new Handles.DrawingScope(Matrix4x4.TRS(light.transform.position, light.transform.rotation, Vector3.one)))
{
CoreLightEditorUtilities.DrawDirectionalLightGizmo(light);
}
break;
default:
base.OnSceneGUI();
break;
}
}
}
}