OldBlueWater/BlueWater/Assets/AstarPathfindingProject/Editor/NavmeshCutEditor.cs

72 lines
2.1 KiB
C#
Raw Normal View History

2023-08-01 06:49:57 +00:00
using UnityEngine;
using UnityEditor;
namespace Pathfinding {
[CustomEditor(typeof(NavmeshCut))]
[CanEditMultipleObjects]
public class NavmeshCutEditor : EditorBase {
protected override void Inspector () {
EditorGUI.BeginChangeCheck();
var type = FindProperty("type");
var circleResolution = FindProperty("circleResolution");
PropertyField("type", label: "Shape");
EditorGUI.indentLevel++;
if (!type.hasMultipleDifferentValues) {
switch ((NavmeshCut.MeshType)type.intValue) {
case NavmeshCut.MeshType.Circle:
PropertyField("circleRadius");
PropertyField("circleResolution");
if (circleResolution.intValue >= 20) {
EditorGUILayout.HelpBox("Be careful with large resolutions. It is often better with a relatively low resolution since it generates cleaner navmeshes with fewer nodes.", MessageType.Warning);
}
break;
case NavmeshCut.MeshType.Rectangle:
PropertyField("rectangleSize");
break;
case NavmeshCut.MeshType.CustomMesh:
PropertyField("mesh");
PropertyField("meshScale");
EditorGUILayout.HelpBox("This mesh should be a planar surface. Take a look at the documentation for an example.", MessageType.Info);
break;
}
}
FloatField("height", min: 0f);
PropertyField("center");
EditorGUI.indentLevel--;
EditorGUILayout.Separator();
PropertyField("updateDistance");
if (PropertyField("useRotationAndScale")) {
EditorGUI.indentLevel++;
FloatField("updateRotationDistance", min: 0f, max: 180f);
EditorGUI.indentLevel--;
}
PropertyField("isDual");
PropertyField("cutsAddedGeom");
EditorGUI.BeginChangeCheck();
PropertyField("graphMask", "Affected Graphs");
bool changedMask = EditorGUI.EndChangeCheck();
serializedObject.ApplyModifiedProperties();
if (EditorGUI.EndChangeCheck()) {
foreach (NavmeshCut tg in targets) {
tg.ForceUpdate();
// If the mask is changed we disable and then enable the component
// to make sure it is removed from the right graphs and then added back
if (changedMask && tg.enabled) {
tg.enabled = false;
tg.enabled = true;
}
}
}
}
}
}