using UnityEngine; using UnityEngine.Rendering; #if UNITY_EDITOR using UnityEditor; #endif namespace DistantLands.Cozy.Data { [System.Serializable] [CreateAssetMenu(menuName = "Distant Lands/Cozy/Satellite Profile", order = 361)] public class SatelliteProfile : ScriptableObject { public GameObject satelliteReference; public Transform orbitRef; public Transform moonRef; public Light lightRef; public float size = 1; [Range(0, 1)] public float distance = 1; public bool useLight = true; #if COZY_URP && UNITY_2021_3_OR_NEWER public LensFlareComponentSRP flareRef; public AtmosphereProfile.URPFlare flare; #else public Flare flare; #endif [ColorUsage(false, true)] public Color lightColorMultiplier = Color.white; public LightShadows castShadows; public float orbitOffset; public Vector3 initialRotation; public float satelliteRotateSpeed; public bool linkToDay; public int rotationPeriod = 28; public int rotationPeriodOffset; public Vector3 satelliteRotateAxis; public float satelliteDirection; public float satelliteRotation; public float satellitePitch; public float declination; public int declinationPeriod; public int declinationPeriodOffset; public bool changedLastFrame; public bool open; } #if UNITY_EDITOR [CustomEditor(typeof(SatelliteProfile))] [CanEditMultipleObjects] public class E_SatelliteProfile : Editor { public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(serializedObject.FindProperty("satelliteReference")); EditorGUILayout.PropertyField(serializedObject.FindProperty("size")); EditorGUILayout.PropertyField(serializedObject.FindProperty("distance")); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("useLight")); EditorGUI.BeginDisabledGroup(!serializedObject.FindProperty("useLight").boolValue); EditorGUILayout.PropertyField(serializedObject.FindProperty("flare")); EditorGUILayout.PropertyField(serializedObject.FindProperty("lightColorMultiplier")); EditorGUILayout.PropertyField(serializedObject.FindProperty("castShadows")); EditorGUI.EndDisabledGroup(); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("satelliteRotateAxis")); EditorGUILayout.PropertyField(serializedObject.FindProperty("linkToDay")); EditorGUI.indentLevel++; if (serializedObject.FindProperty("linkToDay").boolValue) { EditorGUILayout.PropertyField(serializedObject.FindProperty("rotationPeriod")); if (serializedObject.FindProperty("rotationPeriod").intValue <= 0) serializedObject.FindProperty("rotationPeriod").intValue = 1; EditorGUILayout.PropertyField(serializedObject.FindProperty("rotationPeriodOffset")); EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("declination")); EditorGUILayout.PropertyField(serializedObject.FindProperty("declinationPeriod")); EditorGUILayout.PropertyField(serializedObject.FindProperty("declinationPeriodOffset")); if (serializedObject.FindProperty("declinationPeriod").intValue <= 0) serializedObject.FindProperty("declinationPeriod").intValue = 1; } else { EditorGUILayout.PropertyField(serializedObject.FindProperty("satelliteRotateSpeed")); EditorGUILayout.PropertyField(serializedObject.FindProperty("initialRotation")); } EditorGUI.indentLevel--; EditorGUILayout.Space(); EditorGUILayout.PropertyField(serializedObject.FindProperty("orbitOffset")); EditorGUILayout.PropertyField(serializedObject.FindProperty("satelliteDirection")); EditorGUILayout.PropertyField(serializedObject.FindProperty("satellitePitch")); if (serializedObject.hasModifiedProperties) serializedObject.FindProperty("changedLastFrame").boolValue = true; serializedObject.ApplyModifiedProperties(); } public void NestedGUI() { serializedObject.Update(); serializedObject.FindProperty("open").boolValue = EditorGUILayout.BeginFoldoutHeaderGroup(serializedObject.FindProperty("open").boolValue, $" {target.name}", EditorUtilities.FoldoutStyle); EditorGUILayout.EndFoldoutHeaderGroup(); serializedObject.ApplyModifiedProperties(); if (serializedObject.FindProperty("open").boolValue) { EditorGUI.indentLevel++; OnInspectorGUI(); EditorGUI.indentLevel--; } } } #endif }