// Magica Cloth.
// Copyright (c) MagicaSoft, 2020-2022.
// https://magicasoft.jp
using UnityEditor;
using UnityEngine;
namespace MagicaCloth
{
///
/// レンダーデフォーマーのエディタ拡張
///
[CustomEditor(typeof(MagicaRenderDeformer))]
public class MagicaRenderDeformerInspector : Editor
{
protected void OnEnable()
{
// 初期データ作成
MagicaRenderDeformer scr = target as MagicaRenderDeformer;
if (EditorApplication.isPlaying == false && scr.SaveDataHash == 0 && scr.SaveDataVersion == 0 && scr.GetComponent())
{
Debug.Log("Init Render Deformer data.");
BuildManager.CreateComponent(scr);
}
}
public override void OnInspectorGUI()
{
MagicaRenderDeformer scr = target as MagicaRenderDeformer;
serializedObject.Update();
// データ検証
if (EditorApplication.isPlaying == false)
VerifyData();
// データ状態
EditorInspectorUtility.DispVersionStatus(scr);
EditorInspectorUtility.DispDataStatus(scr);
Undo.RecordObject(scr, "CreateRenderMesh");
// モニターボタン
EditorInspectorUtility.MonitorButtonInspector();
DrawRenderDeformerInspector();
// データ作成
if (EditorApplication.isPlaying == false)
{
EditorGUILayout.Space();
GUI.backgroundColor = Color.red;
if (GUILayout.Button("Create"))
{
Undo.RecordObject(scr, "CreateRenderMeshData");
BuildManager.CreateComponent(scr);
}
GUI.backgroundColor = Color.white;
serializedObject.ApplyModifiedProperties();
}
}
void DrawRenderDeformerInspector()
{
MagicaRenderDeformer scr = target as MagicaRenderDeformer;
serializedObject.Update();
EditorGUILayout.LabelField("Update Mode", EditorStyles.boldLabel);
var property1 = serializedObject.FindProperty("deformer.normalAndTangentUpdateMode");
var value1 = property1.boolValue;
var property2 = serializedObject.FindProperty("deformer.boundsUpdateMode");
using (new EditorGUI.DisabledScope(EditorApplication.isPlaying))
{
EditorGUILayout.PropertyField(property1);
EditorGUILayout.PropertyField(property2);
}
serializedObject.ApplyModifiedProperties();
if (property1.boolValue != value1)
scr.Deformer.ChangeNormalTangentUpdateMode(); // 変更を通知
}
//=========================================================================================
///
/// データ検証
///
private void VerifyData()
{
MagicaRenderDeformer scr = target as MagicaRenderDeformer;
if (scr.VerifyData() != Define.Error.None)
{
// 検証エラー
serializedObject.ApplyModifiedProperties();
}
}
}
}