1
This commit is contained in:
126
Assets/Dreamteck/Splines/Editor/TransformModuleEditor.cs
Normal file
126
Assets/Dreamteck/Splines/Editor/TransformModuleEditor.cs
Normal file
@@ -0,0 +1,126 @@
|
||||
namespace Dreamteck.Splines.Editor
|
||||
{
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
public class TransformModuleEditor : SplineUserSubEditor
|
||||
{
|
||||
private TransformModule motionApplier;
|
||||
private string[] toolStrings = new string[] { "3D", "2D" };
|
||||
|
||||
public TransformModuleEditor(SplineUser user, SplineUserEditor parent, TransformModule input) : base(user, parent)
|
||||
{
|
||||
title = "Motion";
|
||||
motionApplier = input;
|
||||
}
|
||||
|
||||
public override void DrawInspector()
|
||||
{
|
||||
base.DrawInspector();
|
||||
if (!isOpen) return;
|
||||
EditorGUI.indentLevel = 1;
|
||||
|
||||
int selected = GUILayout.Toolbar(motionApplier.is2D ? 1 : 0, toolStrings);
|
||||
motionApplier.is2D = selected == 1;
|
||||
|
||||
if (motionApplier.is2D)
|
||||
{
|
||||
motionApplier.applyPosition2D = EditorGUILayout.Toggle("Apply Position", motionApplier.applyPosition2D);
|
||||
}
|
||||
else
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Position", GUILayout.Width(EditorGUIUtility.labelWidth));
|
||||
motionApplier.applyPositionX = EditorGUILayout.Toggle(motionApplier.applyPositionX, GUILayout.Width(30));
|
||||
GUILayout.Label("X", GUILayout.Width(20));
|
||||
motionApplier.applyPositionY = EditorGUILayout.Toggle(motionApplier.applyPositionY, GUILayout.Width(30));
|
||||
GUILayout.Label("Y", GUILayout.Width(20));
|
||||
motionApplier.applyPositionZ = EditorGUILayout.Toggle(motionApplier.applyPositionZ, GUILayout.Width(30));
|
||||
GUILayout.Label("Z", GUILayout.Width(20));
|
||||
EditorGUILayout.EndHorizontal();
|
||||
EditorGUIUtility.labelWidth = 150;
|
||||
motionApplier.retainLocalPosition = EditorGUILayout.Toggle("Retain Local Position", motionApplier.retainLocalPosition);
|
||||
EditorGUIUtility.labelWidth = 0;
|
||||
if (motionApplier.retainLocalPosition)
|
||||
{
|
||||
EditorGUILayout.HelpBox("Retain Local Position is an experimental feature and will always accumulate an offset error based on how fast the follower is going.", MessageType.Info);
|
||||
}
|
||||
}
|
||||
|
||||
if (motionApplier.applyPosition)
|
||||
{
|
||||
EditorGUI.indentLevel = 2;
|
||||
if (motionApplier.is2D)
|
||||
{
|
||||
Vector2 offset2d = motionApplier.offset;
|
||||
offset2d.y = EditorGUILayout.FloatField("Offset", offset2d.y);
|
||||
motionApplier.offset = offset2d;
|
||||
} else
|
||||
{
|
||||
motionApplier.offset = EditorGUILayout.Vector2Field("Offset", motionApplier.offset);
|
||||
}
|
||||
|
||||
}
|
||||
EditorGUI.indentLevel = 1;
|
||||
|
||||
if (motionApplier.is2D)
|
||||
{
|
||||
motionApplier.applyRotation2D = EditorGUILayout.Toggle("Apply Rotation", motionApplier.applyRotation2D);
|
||||
} else
|
||||
{
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Rotation", GUILayout.Width(EditorGUIUtility.labelWidth));
|
||||
motionApplier.applyRotationX = EditorGUILayout.Toggle(motionApplier.applyRotationX, GUILayout.Width(30));
|
||||
GUILayout.Label("X", GUILayout.Width(20));
|
||||
motionApplier.applyRotationY = EditorGUILayout.Toggle(motionApplier.applyRotationY, GUILayout.Width(30));
|
||||
GUILayout.Label("Y", GUILayout.Width(20));
|
||||
motionApplier.applyRotationZ = EditorGUILayout.Toggle(motionApplier.applyRotationZ, GUILayout.Width(30));
|
||||
GUILayout.Label("Z", GUILayout.Width(20));
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
EditorGUIUtility.labelWidth = 150;
|
||||
motionApplier.retainLocalRotation = EditorGUILayout.Toggle("Retain Local Rotation", motionApplier.retainLocalRotation);
|
||||
EditorGUIUtility.labelWidth = 0;
|
||||
if (motionApplier.retainLocalRotation)
|
||||
{
|
||||
EditorGUILayout.HelpBox("Retain Local Rotation is an experimental feature and will always accumulate an offset error based on how fast the follower is going.", MessageType.Info);
|
||||
}
|
||||
}
|
||||
|
||||
if (motionApplier.applyRotation)
|
||||
{
|
||||
EditorGUI.indentLevel = 2;
|
||||
if (motionApplier.is2D)
|
||||
{
|
||||
Vector3 rot2d = motionApplier.rotationOffset;
|
||||
rot2d.z = EditorGUILayout.FloatField("Offset", rot2d.z);
|
||||
motionApplier.rotationOffset = rot2d;
|
||||
} else
|
||||
{
|
||||
motionApplier.rotationOffset = EditorGUILayout.Vector3Field("Offset", motionApplier.rotationOffset);
|
||||
}
|
||||
}
|
||||
EditorGUI.indentLevel = 1;
|
||||
EditorGUILayout.BeginHorizontal();
|
||||
EditorGUILayout.LabelField("Scale", GUILayout.Width(EditorGUIUtility.labelWidth));
|
||||
motionApplier.applyScaleX = EditorGUILayout.Toggle(motionApplier.applyScaleX, GUILayout.Width(30));
|
||||
GUILayout.Label("X", GUILayout.Width(20));
|
||||
motionApplier.applyScaleY = EditorGUILayout.Toggle(motionApplier.applyScaleY, GUILayout.Width(30));
|
||||
GUILayout.Label("Y", GUILayout.Width(20));
|
||||
motionApplier.applyScaleZ = EditorGUILayout.Toggle(motionApplier.applyScaleZ, GUILayout.Width(30));
|
||||
GUILayout.Label("Z", GUILayout.Width(20));
|
||||
EditorGUILayout.EndHorizontal();
|
||||
|
||||
if (motionApplier.applyScale)
|
||||
{
|
||||
EditorGUI.indentLevel = 2;
|
||||
motionApplier.baseScale = EditorGUILayout.Vector3Field("Base scale", motionApplier.baseScale);
|
||||
}
|
||||
|
||||
motionApplier.velocityHandleMode = (TransformModule.VelocityHandleMode)EditorGUILayout.EnumPopup("Velocity Mode", motionApplier.velocityHandleMode);
|
||||
EditorGUI.indentLevel = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user