Files
Fishing2/Assets/Enviro 3 - Sky and Weather/Scripts/Editor/Modules/Lighting/EnviroLightingModuleEditor.cs
2025-12-24 00:09:42 +08:00

262 lines
13 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
namespace Enviro
{
[CustomEditor(typeof(EnviroLightingModule))]
public class EnviroLightingModuleEditor : EnviroModuleEditor
{
private EnviroLightingModule myTarget;
//Properties
//Direct Lighting
private SerializedProperty updateIntervallFrames,directLightIntensityModifier,sunIntensityCurve, moonIntensityCurve, sunColorGradient, moonColorGradient, lightingMode;
//Ambient Lighting
private SerializedProperty shadowIntensity, ambientIntensityModifier,ambientMode, ambientUpdateIntervall,ambientUpdateEveryFrame, ambientSkyColorGradient, ambientEquatorColorGradient, ambientGroundColorGradient, ambientIntensityCurve;
#if ENVIRO_HDRP
private SerializedProperty lightIntensityHDRP ,lightColorTemperatureHDRP,ambientColorTintHDRP, controlExposure, sceneExposure, controlIndirectLighting, diffuseIndirectIntensity, reflectionIndirectIntensity;
#endif
//On Enable
public override void OnEnable()
{
if(!target)
return;
base.OnEnable();
myTarget = (EnviroLightingModule)target;
serializedObj = new SerializedObject(myTarget);
preset = serializedObj.FindProperty("preset");
//Direct Lighting
updateIntervallFrames = serializedObj.FindProperty("Settings.updateIntervallFrames");
lightingMode = serializedObj.FindProperty("Settings.lightingMode");
sunIntensityCurve = serializedObj.FindProperty("Settings.sunIntensityCurve");
moonIntensityCurve = serializedObj.FindProperty("Settings.moonIntensityCurve");
sunColorGradient = serializedObj.FindProperty("Settings.sunColorGradient");
moonColorGradient = serializedObj.FindProperty("Settings.moonColorGradient");
directLightIntensityModifier = serializedObj.FindProperty("Settings.directLightIntensityModifier");
shadowIntensity = serializedObj.FindProperty("Settings.shadowIntensity");
//Ambient Lighting
ambientMode = serializedObj.FindProperty("Settings.ambientMode");
ambientSkyColorGradient = serializedObj.FindProperty("Settings.ambientSkyColorGradient");
ambientEquatorColorGradient = serializedObj.FindProperty("Settings.ambientEquatorColorGradient");
ambientGroundColorGradient = serializedObj.FindProperty("Settings.ambientGroundColorGradient");
ambientIntensityCurve = serializedObj.FindProperty("Settings.ambientIntensityCurve");
ambientIntensityModifier = serializedObj.FindProperty("Settings.ambientIntensityModifier");
ambientUpdateIntervall = serializedObj.FindProperty("Settings.ambientUpdateIntervall");
ambientUpdateEveryFrame = serializedObj.FindProperty("Settings.ambientUpdateEveryFrame");
#if ENVIRO_HDRP
lightIntensityHDRP = serializedObj.FindProperty("Settings.lightIntensityHDRP");
lightColorTemperatureHDRP = serializedObj.FindProperty("Settings.lightColorTemperatureHDRP");
ambientColorTintHDRP = serializedObj.FindProperty("Settings.ambientColorTintHDRP");
controlExposure = serializedObj.FindProperty("Settings.controlExposure");
sceneExposure = serializedObj.FindProperty("Settings.sceneExposure");
controlIndirectLighting = serializedObj.FindProperty("Settings.controlIndirectLighting");
diffuseIndirectIntensity = serializedObj.FindProperty("Settings.diffuseIndirectIntensity");
reflectionIndirectIntensity = serializedObj.FindProperty("Settings.reflectionIndirectIntensity");
#endif
}
/*
*/
public override void OnInspectorGUI()
{
if(!target)
return;
base.OnInspectorGUI();
GUI.backgroundColor = new Color(0.0f,0.0f,0.5f,1f);
GUILayout.BeginVertical("",boxStyleModified);
GUI.backgroundColor = Color.white;
EditorGUILayout.BeginHorizontal();
myTarget.showModuleInspector = GUILayout.Toggle(myTarget.showModuleInspector, "Lighting", headerFoldout);
GUILayout.FlexibleSpace();
if(GUILayout.Button("x", EditorStyles.miniButtonRight,GUILayout.Width(18), GUILayout.Height(18)))
{
EnviroManager.instance.RemoveModule(EnviroManager.ModuleType.Lighting);
DestroyImmediate(this);
return;
}
EditorGUILayout.EndHorizontal();
if(myTarget.showModuleInspector)
{
RenderDisableInputBox();
serializedObj.UpdateIfRequiredOrScript ();
EditorGUI.BeginChangeCheck();
GUI.backgroundColor = categoryModuleColor;
GUILayout.BeginVertical("",boxStyleModified);
GUI.backgroundColor = Color.white;
myTarget.showDirectLightingControls = GUILayout.Toggle(myTarget.showDirectLightingControls, "Direct Lighting Controls", headerFoldout);
if(myTarget.showDirectLightingControls)
{
GUILayout.Space(10);
myTarget.Settings.setDirectLighting = EditorGUILayout.BeginToggleGroup("Set Direct Lighting",myTarget.Settings.setDirectLighting);
EditorGUILayout.PropertyField(lightingMode);
if (GUILayout.Button("Apply Lighting Mode Changes"))
{
myTarget.ApplyLightingChanges();
}
GUILayout.Space(10);
EditorGUILayout.LabelField("Lighting Updates",headerStyle);
EditorGUILayout.PropertyField(updateIntervallFrames);
GUILayout.Space(5);
EditorGUILayout.LabelField("Light Intensity",headerStyle);
EditorGUILayout.PropertyField(sunIntensityCurve);
EditorGUILayout.PropertyField(moonIntensityCurve);
#if ENVIRO_HDRP
EditorGUILayout.PropertyField(lightIntensityHDRP);
#endif
DisableInputStart();
EditorGUILayout.PropertyField(directLightIntensityModifier);
EditorGUILayout.PropertyField(shadowIntensity);
DisableInputEnd();
GUILayout.Space(10);
EditorGUILayout.LabelField("Light Color",headerStyle);
EditorGUILayout.PropertyField(sunColorGradient);
EditorGUILayout.PropertyField(moonColorGradient);
#if ENVIRO_HDRP
EditorGUILayout.PropertyField(lightColorTemperatureHDRP);
#endif
#if ENVIRO_HDRP
GUILayout.Space(10);
EditorGUILayout.LabelField("Exposure",headerStyle);
EditorGUILayout.PropertyField(controlExposure);
EditorGUILayout.PropertyField(sceneExposure);
#endif
EditorGUILayout.EndToggleGroup();
}
GUILayout.EndVertical();
GUI.backgroundColor = categoryModuleColor;
GUILayout.BeginVertical("",boxStyleModified);
GUI.backgroundColor = Color.white;
myTarget.showAmbientLightingControls = GUILayout.Toggle(myTarget.showAmbientLightingControls, "Ambient Lighting Controls", headerFoldout);
if(myTarget.showAmbientLightingControls)
{
GUILayout.Space(10);
myTarget.Settings.setAmbientLighting = EditorGUILayout.BeginToggleGroup("Set Ambient Lighting",myTarget.Settings.setAmbientLighting);
#if !ENVIRO_HDRP
EditorGUILayout.PropertyField(ambientMode);
GUILayout.Space(10);
if(myTarget.Settings.ambientMode == UnityEngine.Rendering.AmbientMode.Flat)
{
EditorGUILayout.LabelField("Ambient Color",headerStyle);
EditorGUILayout.PropertyField(ambientSkyColorGradient);
GUILayout.Space(5);
EditorGUILayout.LabelField("Ambient Updates",headerStyle);
EditorGUILayout.PropertyField(ambientUpdateEveryFrame);
if (!myTarget.Settings.ambientUpdateEveryFrame)
EditorGUILayout.PropertyField(ambientUpdateIntervall);
GUILayout.Space(5);
EditorGUILayout.LabelField("Ambient Intensity",headerStyle);
EditorGUILayout.PropertyField(ambientIntensityCurve);
DisableInputStart();
EditorGUILayout.PropertyField(ambientIntensityModifier);
DisableInputEnd();
}
else if(myTarget.Settings.ambientMode == UnityEngine.Rendering.AmbientMode.Trilight)
{
EditorGUILayout.LabelField("Ambient Color",headerStyle);
EditorGUILayout.PropertyField(ambientSkyColorGradient);
EditorGUILayout.PropertyField(ambientEquatorColorGradient);
EditorGUILayout.PropertyField(ambientGroundColorGradient);
GUILayout.Space(5);
EditorGUILayout.LabelField("Ambient Updates",headerStyle);
EditorGUILayout.PropertyField(ambientUpdateEveryFrame);
if (!myTarget.Settings.ambientUpdateEveryFrame)
EditorGUILayout.PropertyField(ambientUpdateIntervall);
GUILayout.Space(5);
EditorGUILayout.LabelField("Ambient Intensity",headerStyle);
EditorGUILayout.PropertyField(ambientIntensityCurve);
DisableInputStart();
EditorGUILayout.PropertyField(ambientIntensityModifier);
DisableInputEnd();
}
else
{
EditorGUILayout.LabelField("Ambient Updates",headerStyle);
EditorGUILayout.PropertyField(ambientUpdateEveryFrame);
if (!myTarget.Settings.ambientUpdateEveryFrame)
EditorGUILayout.PropertyField(ambientUpdateIntervall);
GUILayout.Space(5);
EditorGUILayout.LabelField("Ambient Intensity",headerStyle);
EditorGUILayout.PropertyField(ambientIntensityCurve);
DisableInputStart();
EditorGUILayout.PropertyField(ambientIntensityModifier);
DisableInputEnd();
}
#else
GUILayout.Space(5);
EditorGUILayout.PropertyField(controlIndirectLighting);
if(myTarget.Settings.controlIndirectLighting)
{
EditorGUILayout.PropertyField(diffuseIndirectIntensity);
EditorGUILayout.PropertyField(reflectionIndirectIntensity);
}
GUILayout.Space(5);
EditorGUILayout.LabelField("Indirect Color",headerStyle);
EditorGUILayout.PropertyField(ambientColorTintHDRP);
#endif
EditorGUILayout.EndToggleGroup();
}
GUILayout.EndVertical();
/// Save Load
GUI.backgroundColor = categoryModuleColor;
GUILayout.BeginVertical("",boxStyleModified);
GUI.backgroundColor = Color.white;
myTarget.showSaveLoad = GUILayout.Toggle(myTarget.showSaveLoad, "Save/Load", headerFoldout);
if(myTarget.showSaveLoad)
{
EditorGUILayout.PropertyField(preset);
GUILayout.BeginHorizontal("",wrapStyle);
if(myTarget.preset != null)
{
if(GUILayout.Button("Load"))
{
myTarget.LoadModuleValues();
}
if(GUILayout.Button("Save"))
{
myTarget.SaveModuleValues(myTarget.preset);
}
}
if(GUILayout.Button("Save As New"))
{
myTarget.SaveModuleValues();
}
GUILayout.EndHorizontal();
}
GUILayout.EndVertical();
/// Save Load End
ApplyChanges ();
}
GUILayout.EndVertical();
if(myTarget.showModuleInspector)
GUILayout.Space(20);
}
}
}