Mercurial > hg > Game > Games
diff Orchestland/Assets/LeapMotion/Editor/HandControllerEditor.cs @ 1:f7675884f2a1
Add Orchestland project
author | Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:09:20 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/LeapMotion/Editor/HandControllerEditor.cs Fri Jul 17 23:09:20 2015 +0900 @@ -0,0 +1,168 @@ +/******************************************************************************\ +* Copyright (C) Leap Motion, Inc. 2011-2014. * +* Leap Motion proprietary. Licensed under Apache 2.0 * +* Available at http://www.apache.org/licenses/LICENSE-2.0.html * +\******************************************************************************/ + +using UnityEditor; +using UnityEngine; +using System.Collections; + +[CustomEditor(typeof(HandController))] +public class HandControllerEditor : Editor { + + private const float BOX_RADIUS = 0.45f; + private const float BOX_WIDTH = 0.965f; + private const float BOX_DEPTH = 0.6671f; + + public void OnSceneGUI() { + HandController controller = (HandController)target; + Vector3 origin = controller.transform.TransformPoint(Vector3.zero); + + Vector3 local_top_left = new Vector3(-BOX_WIDTH, BOX_RADIUS, BOX_DEPTH); + Vector3 top_left = + controller.transform.TransformPoint(BOX_RADIUS * local_top_left.normalized); + + Vector3 local_top_right = new Vector3(BOX_WIDTH, BOX_RADIUS, BOX_DEPTH); + Vector3 top_right = + controller.transform.TransformPoint(BOX_RADIUS * local_top_right.normalized); + + Vector3 local_bottom_left = new Vector3(-BOX_WIDTH, BOX_RADIUS, -BOX_DEPTH); + Vector3 bottom_left = + controller.transform.TransformPoint(BOX_RADIUS * local_bottom_left.normalized); + + Vector3 local_bottom_right = new Vector3(BOX_WIDTH, BOX_RADIUS, -BOX_DEPTH); + Vector3 bottom_right = + controller.transform.TransformPoint(BOX_RADIUS * local_bottom_right.normalized); + + Handles.DrawLine(origin, top_left); + Handles.DrawLine(origin, top_right); + Handles.DrawLine(origin, bottom_left); + Handles.DrawLine(origin, bottom_right); + + Vector3 top_normal = controller.transform.TransformDirection( + Vector3.Cross(local_top_left, local_top_right)); + float top_angle = Vector3.Angle(local_top_left, local_top_right); + Handles.DrawWireArc(origin, top_normal, + controller.transform.TransformDirection(local_top_left), + top_angle, controller.transform.lossyScale.x * BOX_RADIUS); + + Vector3 left_normal = controller.transform.TransformDirection( + Vector3.Cross(local_bottom_left, local_top_left)); + float left_angle = Vector3.Angle(local_bottom_left, local_top_left); + Handles.DrawWireArc(origin, left_normal, + controller.transform.TransformDirection(local_bottom_left), + left_angle, controller.transform.lossyScale.x * BOX_RADIUS); + + Vector3 bottom_normal = controller.transform.TransformDirection( + Vector3.Cross(local_bottom_left, local_bottom_right)); + float bottom_angle = Vector3.Angle(local_bottom_left, local_bottom_right); + Handles.DrawWireArc(origin, bottom_normal, + controller.transform.TransformDirection(local_bottom_left), + bottom_angle, controller.transform.lossyScale.x * BOX_RADIUS); + + Vector3 right_normal = controller.transform.TransformDirection( + Vector3.Cross(local_bottom_right, local_top_right)); + float right_angle = Vector3.Angle(local_bottom_right, local_top_right); + Handles.DrawWireArc(origin, right_normal, + controller.transform.TransformDirection(local_bottom_right), + right_angle, controller.transform.lossyScale.x * BOX_RADIUS); + + Vector3 local_left_face = Vector3.Lerp(local_top_left, local_bottom_left, 0.5f); + Vector3 local_right_face = Vector3.Lerp(local_top_right, local_bottom_right, 0.5f); + + Vector3 across_normal = controller.transform.TransformDirection(-Vector3.forward); + float across_angle = Vector3.Angle(local_left_face, local_right_face); + Handles.DrawWireArc(origin, across_normal, + controller.transform.TransformDirection(local_left_face), + across_angle, controller.transform.lossyScale.x * BOX_RADIUS); + + Vector3 local_top_face = Vector3.Lerp(local_top_left, local_top_right, 0.5f); + Vector3 local_bottom_face = Vector3.Lerp(local_bottom_left, local_bottom_right, 0.5f); + + Vector3 depth_normal = controller.transform.TransformDirection(-Vector3.right); + float depth_angle = Vector3.Angle(local_top_face, local_bottom_face); + Handles.DrawWireArc(origin, depth_normal, + controller.transform.TransformDirection(local_top_face), + depth_angle, controller.transform.lossyScale.x * BOX_RADIUS); + } + + public override void OnInspectorGUI() { + HandController controller = (HandController)target; + + controller.separateLeftRight = EditorGUILayout.Toggle("Separate Left/Right", + controller.separateLeftRight); + + if (controller.separateLeftRight) { + controller.leftGraphicsModel = + (HandModel)EditorGUILayout.ObjectField("Left Hand Graphics Model", + controller.leftGraphicsModel, + typeof(HandModel), true); + controller.rightGraphicsModel = + (HandModel)EditorGUILayout.ObjectField("Right Hand Graphics Model", + controller.rightGraphicsModel, + typeof(HandModel), true); + controller.leftPhysicsModel = + (HandModel)EditorGUILayout.ObjectField("Left Hand Physics Model", + controller.leftPhysicsModel, + typeof(HandModel), true); + controller.rightPhysicsModel = + (HandModel)EditorGUILayout.ObjectField("Right Hand Physics Model", + controller.rightPhysicsModel, + typeof(HandModel), true); + } + else { + controller.leftGraphicsModel = controller.rightGraphicsModel = + (HandModel)EditorGUILayout.ObjectField("Hand Graphics Model", + controller.leftGraphicsModel, + typeof(HandModel), true); + + controller.leftPhysicsModel = controller.rightPhysicsModel = + (HandModel)EditorGUILayout.ObjectField("Hand Physics Model", + controller.leftPhysicsModel, + typeof(HandModel), true); + } + + controller.toolModel = + (ToolModel)EditorGUILayout.ObjectField("Tool Model", + controller.toolModel, + typeof(ToolModel), true); + + controller.handParent = + (Transform)EditorGUILayout.ObjectField("Hand Parent Transform", + controller.handParent, + typeof(Transform), true); + + EditorGUILayout.Space(); + + controller.isHeadMounted = EditorGUILayout.Toggle("Is Head Mounted", + controller.isHeadMounted); + + controller.mirrorZAxis = EditorGUILayout.Toggle("Mirror Z Axis", controller.mirrorZAxis); + + controller.handMovementScale = + EditorGUILayout.Vector3Field("Hand Movement Scale", controller.handMovementScale); + + controller.destroyHands = EditorGUILayout.Toggle("Destroy Hands", + controller.destroyHands); + + EditorGUILayout.Space(); + controller.enableRecordPlayback = EditorGUILayout.Toggle("Enable Record/Playback", + controller.enableRecordPlayback); + if (controller.enableRecordPlayback) { + controller.recordingAsset = + (TextAsset)EditorGUILayout.ObjectField("Recording File", + controller.recordingAsset, + typeof(TextAsset), true); + controller.recorderSpeed = EditorGUILayout.FloatField("Playback Speed Multiplier", + controller.recorderSpeed); + controller.recorderLoop = EditorGUILayout.Toggle("Playback Loop", + controller.recorderLoop); + } + + if (GUI.changed) + EditorUtility.SetDirty(controller); + + Undo.RecordObject(controller, "Hand Preferences Changed: " + controller.name); + } +}