128 lines
5.0 KiB
C#
128 lines
5.0 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using Gaia.Internal;
|
|
using PWCommon4;
|
|
using UnityEditor;
|
|
using UnityEngine;
|
|
|
|
namespace Gaia
|
|
{
|
|
[CustomEditor(typeof(SimpleCameraLayerCulling))]
|
|
public class SimpleCameraLayerCullingEditor : PWEditor
|
|
{
|
|
private EditorUtils m_editorUtils;
|
|
private SimpleCameraLayerCulling m_simpleCameraLayerCulling;
|
|
|
|
public void OnEnable()
|
|
{
|
|
m_simpleCameraLayerCulling = (SimpleCameraLayerCulling)target;
|
|
|
|
if (m_editorUtils == null)
|
|
{
|
|
// Get editor utils for this
|
|
m_editorUtils = PWApp.GetEditorUtils(this);
|
|
m_simpleCameraLayerCulling.Initialize();
|
|
ApplyToSceneCamera();
|
|
}
|
|
}
|
|
|
|
private void ApplyToSceneCamera()
|
|
{
|
|
if (m_simpleCameraLayerCulling.m_applyToSceneCamera)
|
|
{
|
|
foreach (var sceneCamera in SceneView.GetAllSceneCameras())
|
|
{
|
|
sceneCamera.layerCullDistances = m_simpleCameraLayerCulling.m_profile.m_layerDistances;
|
|
}
|
|
m_simpleCameraLayerCulling.ApplyToDirectionalLight();
|
|
}
|
|
else
|
|
{
|
|
float[] layerCulls = new float[32];
|
|
for (int i = 0; i < layerCulls.Length; i++)
|
|
{
|
|
layerCulls[i] = 0f;
|
|
}
|
|
foreach (var sceneCamera in SceneView.GetAllSceneCameras())
|
|
{
|
|
sceneCamera.layerCullDistances = layerCulls;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void OnInspectorGUI()
|
|
{
|
|
//Initialization
|
|
m_editorUtils.Initialize(); // Do not remove this!
|
|
|
|
m_editorUtils.Panel("SimpleLayerCulling", SimpleLayerCulling, true);
|
|
|
|
}
|
|
|
|
private void SimpleLayerCulling(bool helpEnabled)
|
|
{
|
|
EditorGUI.BeginChangeCheck();
|
|
m_simpleCameraLayerCulling.m_applyToGameCamera = m_editorUtils.Toggle("ApplyToGameCamera", m_simpleCameraLayerCulling.m_applyToGameCamera);
|
|
m_simpleCameraLayerCulling.m_applyToSceneCamera = m_editorUtils.Toggle("ApplyToSceneCamera", m_simpleCameraLayerCulling.m_applyToSceneCamera);
|
|
|
|
if (m_simpleCameraLayerCulling.m_profile != null)
|
|
{
|
|
EditorGUILayout.Space();
|
|
m_editorUtils.LabelField("ObjectCullingSettings", EditorStyles.boldLabel);
|
|
EditorGUI.indentLevel++;
|
|
m_editorUtils.InlineHelp("ObjectCullingSettings", helpEnabled);
|
|
for (int i = 0; i < m_simpleCameraLayerCulling.m_profile.m_layerDistances.Length; i++)
|
|
{
|
|
string layerName = LayerMask.LayerToName(i);
|
|
if (!string.IsNullOrEmpty(layerName))
|
|
{
|
|
m_simpleCameraLayerCulling.m_profile.m_layerDistances[i] = EditorGUILayout.FloatField(string.Format("[{0}] {1}", i, layerName), m_simpleCameraLayerCulling.m_profile.m_layerDistances[i]);
|
|
}
|
|
}
|
|
EditorGUI.indentLevel--;
|
|
if (m_editorUtils.Button("RevertCullingToDefaults"))
|
|
{
|
|
GaiaSettings gaiaSettings = GaiaUtils.GetGaiaSettings();
|
|
m_simpleCameraLayerCulling.m_profile.UpdateCulling(gaiaSettings);
|
|
EditorUtility.SetDirty(m_simpleCameraLayerCulling.m_profile);
|
|
}
|
|
|
|
EditorGUILayout.Space();
|
|
m_editorUtils.LabelField("ShadowCullingSettings", EditorStyles.boldLabel);
|
|
EditorGUI.indentLevel++;
|
|
m_editorUtils.InlineHelp("ShadowCullingSettings", helpEnabled);
|
|
for (int i = 0; i < m_simpleCameraLayerCulling.m_profile.m_shadowLayerDistances.Length; i++)
|
|
{
|
|
string layerName = LayerMask.LayerToName(i);
|
|
if (!string.IsNullOrEmpty(layerName))
|
|
{
|
|
m_simpleCameraLayerCulling.m_profile.m_shadowLayerDistances[i] = EditorGUILayout.FloatField(string.Format("[{0}] {1}", i, layerName), m_simpleCameraLayerCulling.m_profile.m_shadowLayerDistances[i]);
|
|
}
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
|
|
if (m_editorUtils.Button("RevertShadowToDefaults"))
|
|
{
|
|
m_simpleCameraLayerCulling.m_profile.UpdateShadow();
|
|
EditorUtility.SetDirty(m_simpleCameraLayerCulling.m_profile);
|
|
}
|
|
|
|
EditorGUI.indentLevel--;
|
|
}
|
|
|
|
if (EditorGUI.EndChangeCheck())
|
|
{
|
|
EditorUtility.SetDirty(m_simpleCameraLayerCulling);
|
|
ApplyToSceneCamera();
|
|
m_simpleCameraLayerCulling.ApplyToGameCamera();
|
|
m_simpleCameraLayerCulling.ResetDirectionalLight();
|
|
SceneView.RepaintAll();
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|