HumanoidControl_Free/Editor/Tools/Teleporter_Editor.cs
Pascal Serrarens 17741d862a First commit
2022-01-12 10:50:57 +01:00

69 lines
3.2 KiB
C#

using UnityEditor;
using UnityEngine;
namespace Passer {
using Humanoid;
[CustomEditor(typeof(Teleporter))]
public class Teleporter_Editor : InteractionPointer_Editor {
protected Teleporter teleporter;
protected SerializedProperty transportTypeProp;
#region Enable
public override void OnEnable() {
base.OnEnable();
teleporter = (Teleporter)target;
teleporter.transformToTeleport = FindDeepParentComponent(teleporter.transform, typeof(HumanoidControl));
teleporter.clickEvent.SetMethod(EventHandler.Type.OnStart, teleporter.TeleportTransform);
transportTypeProp = serializedObject.FindProperty("transportType");
}
protected Transform FindDeepParentComponent(Transform t, System.Type type) {
Component component = t.GetComponent(type.Name);
if (component == null) {
if (t.parent != null)
return FindDeepParentComponent(t.parent, type);
else
return null;
} else
return t;
}
#endregion
#region Inspector
public override void OnInspectorGUI() {
serializedObject.Update();
pointer.active = EditorGUILayout.Toggle("Active", pointer.active);
pointer.timedClick = EditorGUILayout.FloatField("Timed teleport", pointer.timedClick);
pointer.focusPointObj = (GameObject)EditorGUILayout.ObjectField("Target Point Object", pointer.focusPointObj, typeof(GameObject), true);
pointerModeProp.intValue = (int)(InteractionPointer.RayType)EditorGUILayout.EnumPopup("Mode", (InteractionPointer.RayType)pointerModeProp.intValue);
transportTypeProp.intValue = (int)(Teleporter.TransportType)EditorGUILayout.EnumPopup("Transport Type", (Teleporter.TransportType)transportTypeProp.intValue);
if (pointer.rayType == InteractionPointer.RayType.Straight) {
maxDistanceProp.floatValue = EditorGUILayout.FloatField("Maximum Distance", maxDistanceProp.floatValue);
}
if (pointer.rayType == InteractionPointer.RayType.Bezier) {
maxDistanceProp.floatValue = EditorGUILayout.FloatField("Maximum Distance", maxDistanceProp.floatValue);
EditorGUI.BeginDisabledGroup(Application.isPlaying);
resolutionProp.floatValue = EditorGUILayout.FloatField("Resolution", resolutionProp.floatValue);
EditorGUI.EndDisabledGroup();
}
if (pointer.rayType == InteractionPointer.RayType.Gravity) {
speedProp.floatValue = EditorGUILayout.FloatField("Speed", speedProp.floatValue);
resolutionProp.floatValue = EditorGUILayout.FloatField("Resolution", resolutionProp.floatValue);
}
else if (pointer.rayType == InteractionPointer.RayType.SphereCast) {
maxDistanceProp.floatValue = EditorGUILayout.FloatField("Maximum Distance", maxDistanceProp.floatValue);
radiusProp.floatValue = EditorGUILayout.FloatField("Radius", radiusProp.floatValue);
}
serializedObject.ApplyModifiedProperties();
}
#endregion
}
}