Files
PrincessLandVR/Assets/Procedural Worlds/Gaia/Scripts/Editor/TerrainDetailOverwriteEditor.cs
T
2021-01-11 22:20:43 -08:00

140 lines
5.5 KiB
C#

using UnityEngine;
using PWCommon4;
using UnityEditor.SceneManagement;
using UnityEditor;
using Gaia.Internal;
namespace Gaia
{
[CustomEditor(typeof(TerrainDetailOverwrite))]
public class TerrainDetailOverwriteEditor : PWEditor
{
private EditorUtils m_editorUtils;
private string m_version;
private Color defaultBackground;
private TerrainDetailOverwrite m_profile;
private void OnEnable()
{
//Get Gaia Lighting Profile object
m_profile = (TerrainDetailOverwrite)target;
if (m_editorUtils == null)
{
// Get editor utils for this
m_editorUtils = PWApp.GetEditorUtils(this);
}
m_version = PWApp.CONF.Version;
if (m_profile.m_terrain == null)
{
m_profile.m_terrain = m_profile.GetComponent<Terrain>();
}
m_profile.m_detailDistance = (int)m_profile.m_terrain.detailObjectDistance;
m_profile.m_detailDensity = m_profile.m_terrain.detailObjectDensity;
if (m_profile.m_terrain.terrainData.detailResolutionPerPatch == 2)
{
m_profile.m_detailQuality = GaiaConstants.TerrainDetailQuality.Ultra2;
}
else if (m_profile.m_terrain.terrainData.detailResolutionPerPatch == 4)
{
m_profile.m_detailQuality = GaiaConstants.TerrainDetailQuality.VeryHigh4;
}
else if (m_profile.m_terrain.terrainData.detailResolutionPerPatch == 8)
{
m_profile.m_detailQuality = GaiaConstants.TerrainDetailQuality.High8;
}
else if (m_profile.m_terrain.terrainData.detailResolutionPerPatch == 16)
{
m_profile.m_detailQuality = GaiaConstants.TerrainDetailQuality.Medium16;
}
else if (m_profile.m_terrain.terrainData.detailResolutionPerPatch == 32)
{
m_profile.m_detailQuality = GaiaConstants.TerrainDetailQuality.Low32;
}
else
{
m_profile.m_detailQuality = GaiaConstants.TerrainDetailQuality.VeryLow64;
}
}
public override void OnInspectorGUI()
{
//Initialization
m_editorUtils.Initialize(); // Do not remove this!
m_profile.GetResolutionPatches();
EditorGUILayout.LabelField("Version: " + m_version);
m_editorUtils.Panel("DetailDistanceSettings", DetailTerrainDistance, true);
}
private void DetailTerrainDistance(bool helpEnabled)
{
EditorGUI.BeginChangeCheck();
m_editorUtils.Text("DetailInfo");
EditorGUILayout.Space();
//switch (m_profile.m_detailQuality)
//{
// case GaiaConstants.TerrainDetailQuality.Ultra2:
// EditorGUILayout.LabelField(m_editorUtils.GetTextValue("DetailPatchResolution") + "Ultra");
// break;
// case GaiaConstants.TerrainDetailQuality.VeryHigh4:
// EditorGUILayout.LabelField(m_editorUtils.GetTextValue("DetailPatchResolution") + "Very High");
// break;
// case GaiaConstants.TerrainDetailQuality.High8:
// EditorGUILayout.LabelField(m_editorUtils.GetTextValue("DetailPatchResolution") + "High");
// break;
// case GaiaConstants.TerrainDetailQuality.Medium16:
// EditorGUILayout.LabelField(m_editorUtils.GetTextValue("DetailPatchResolution") + "Medium");
// break;
// case GaiaConstants.TerrainDetailQuality.Low32:
// EditorGUILayout.LabelField(m_editorUtils.GetTextValue("DetailPatchResolution") + "Low");
// break;
// case GaiaConstants.TerrainDetailQuality.VeryLow64:
// EditorGUILayout.LabelField(m_editorUtils.GetTextValue("DetailPatchResolution") + "Very Low");
// break;
//}
//EditorGUILayout.HelpBox(m_editorUtils.GetTextValue("DetailPatchResolutionHelp"), MessageType.Info);
m_profile.m_detailDistance = m_editorUtils.IntField("DetailDistance", m_profile.m_detailDistance, helpEnabled);
if (m_profile.m_detailDistance < 0)
{
m_profile.m_detailDistance = 0;
}
if (m_profile.m_detailDistance > 250)
{
EditorGUILayout.HelpBox(m_editorUtils.GetTextValue("DetailDistanceHelp"), MessageType.Info);
}
m_profile.m_detailDensity = m_editorUtils.Slider("DetailDensity", m_profile.m_detailDensity, 0f, 1f, helpEnabled);
if (m_profile.m_detailDistance > 250 && m_profile.m_detailDensity > 0.5f)
{
EditorGUILayout.HelpBox(m_editorUtils.GetTextValue("DetailDensityHelp"), MessageType.Info);
}
if (m_editorUtils.Button("ApplyToAll"))
{
m_profile.ApplySettings(true);
}
if (EditorGUI.EndChangeCheck())
{
Undo.RecordObject(m_profile, "Made changes");
EditorUtility.SetDirty(m_profile);
m_profile.ApplySettings(false);
if (!Application.isPlaying)
{
EditorSceneManager.MarkSceneDirty(EditorSceneManager.GetActiveScene());
}
}
}
}
}