Example #1
0
        /// <summary>
        /// Computes the director of the connector
        /// </summary>
        /// <param Name="pivotDirection">enum describing director of connector pivot</param>
        /// <param Name="manualPivotDirection">is the pivot set manually</param>
        /// <param Name="relativeTo">Transform that describes the frame of reference of the pivot</param>
        /// <returns>a vector describing the pivot direction in world space</returns>
        public static Vector3 GetDirectionFromPivotDirection(ConnectorPivotDirection pivotDirection, Vector3 manualPivotDirection, Transform relativeTo)
        {
            Vector3 dir = Vector3.zero;

            switch (pivotDirection)
            {
            case ConnectorPivotDirection.North:
                dir = Vector3.up;
                break;

            case ConnectorPivotDirection.NorthEast:
                dir = Vector3.Lerp(Vector3.up, Vector3.right, 0.5f).normalized;
                break;

            case ConnectorPivotDirection.East:
                dir = Vector3.right;
                break;

            case ConnectorPivotDirection.SouthEast:
                dir = Vector3.Lerp(Vector3.down, Vector3.right, 0.5f).normalized;
                break;

            case ConnectorPivotDirection.South:
                dir = Vector3.down;
                break;

            case ConnectorPivotDirection.SouthWest:
                dir = Vector3.Lerp(Vector3.down, Vector3.left, 0.5f).normalized;
                break;

            case ConnectorPivotDirection.West:
                dir = Vector3.left;
                break;

            case ConnectorPivotDirection.NorthWest:
                dir = Vector3.Lerp(Vector3.up, Vector3.left, 0.5f).normalized;
                break;

            case ConnectorPivotDirection.InFront:
                dir = Vector3.forward;
                break;

            case ConnectorPivotDirection.Manual:
                dir = manualPivotDirection.normalized;
                break;
            }

            return(relativeTo.TransformDirection(dir));
        }
 private ConnectorPivotDirection DrawPivotDirectionButton(ConnectorPivotDirection direction, string displayName, ConnectorPivotDirection selection, float widthMultiplier = 1)
 {
     GUI.color = (direction == selection) ? Color.white : Color.gray;
     if (GUILayout.Button(
             displayName,
             EditorStyles.miniButtonMid,
             GUILayout.MinWidth(pivotDirectionControlWidth * widthMultiplier),
             GUILayout.MinHeight(pivotDirectionControlHeight),
             GUILayout.MaxWidth(pivotDirectionControlWidth * widthMultiplier),
             GUILayout.MaxHeight(pivotDirectionControlHeight)))
     {
         return(direction);
     }
     GUI.color = Color.white;
     return(selection);
 }
        private ConnectorPivotDirection DrawPivotDirection(ConnectorPivotDirection selection)
        {
            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();

            EditorGUILayout.BeginVertical();

            selection = DrawPivotDirectionButton(ConnectorPivotDirection.Manual, "Manual", selection, 3);

            EditorGUILayout.BeginHorizontal();
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.Northeast, "NE", selection);
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.North, "North", selection);
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.Northwest, "NW", selection);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.East, "East", selection);
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.InFront, "Front", selection);
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.West, "West", selection);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.Southeast, "SE", selection);
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.South, "South", selection);
            selection = DrawPivotDirectionButton(ConnectorPivotDirection.Southwest, "SW", selection);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.EndVertical();

            GUILayout.FlexibleSpace();
            EditorGUILayout.EndHorizontal();
            EditorGUILayout.Space();

            return(selection);
        }
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            if (multiLineHelpBoxStyle == null)
            {
                multiLineHelpBoxStyle          = new GUIStyle(EditorStyles.helpBox);
                multiLineHelpBoxStyle.wordWrap = true;
            }

            connectorTarget          = serializedObject.FindProperty("target");
            connectorFollowType      = serializedObject.FindProperty("connectorFollowType");
            pivotMode                = serializedObject.FindProperty("pivotMode");
            pivotDirection           = serializedObject.FindProperty("pivotDirection");
            pivotDirectionOrient     = serializedObject.FindProperty("pivotDirectionOrient");
            manualPivotDirection     = serializedObject.FindProperty("manualPivotDirection");
            manualPivotLocalPosition = serializedObject.FindProperty("manualPivotLocalPosition");
            pivotDistance            = serializedObject.FindProperty("pivotDistance");

            editorSettingsFoldout = EditorGUILayout.Foldout(editorSettingsFoldout, EditorSettingsContent, true);
            SessionState.SetBool(EditorSettingsFoldoutKey, editorSettingsFoldout);

            if (editorSettingsFoldout)
            {
                EditorGUI.BeginChangeCheck();
                DrawManualDirectionHandle = EditorGUILayout.Toggle("Draw Manual Direction Handle", DrawManualDirectionHandle);

                if (EditorGUI.EndChangeCheck())
                {
                    SessionState.SetBool(DrawManualDirectionHandleKey, DrawManualDirectionHandle);
                }
            }

            if (connectorTarget.objectReferenceValue == null)
            {
                EditorGUILayout.HelpBox("No target set. ToolTip will not use connector component.", MessageType.Info);
                EditorGUILayout.PropertyField(connectorTarget);
            }
            else
            {
                EditorGUILayout.PropertyField(connectorTarget);

                string helpText = string.Empty;
                switch (connector.ConnectorFollowingType)
                {
                case ConnectorFollowType.AnchorOnly:
                    helpText = "Only the tooltip's anchor will follow the target. Tooltip content will not be altered.";
                    break;

                case ConnectorFollowType.Position:
                    helpText = "The entire tooltip will follow the target. Tooltip will not rotate.";
                    break;

                case ConnectorFollowType.PositionAndYRotation:
                    helpText = "The entire tooltip will follow the target. Tooltip will match target's Y rotation.";
                    break;

                case ConnectorFollowType.PositionAndXYRotation:
                    helpText = "The entire tooltip will follow the target. Tooltip will match target's X and Y rotation.";
                    break;
                }

                EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                EditorGUILayout.LabelField(helpText, EditorStyles.miniLabel);
                EditorGUILayout.EndVertical();
                EditorGUILayout.PropertyField(connectorFollowType);

                switch (connector.ConnectorFollowingType)
                {
                case ConnectorFollowType.AnchorOnly:
                    // Pivot mode doesn't apply to anchor-only connections
                    break;

                default:
                    EditorGUILayout.PropertyField(pivotMode);
                    switch (connector.PivotMode)
                    {
                    case ConnectorPivotMode.Manual:
                        // We just want to set the pivot ourselves
                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                        EditorGUILayout.LabelField("Pivot will not be altered by connector.", EditorStyles.miniLabel);
                        EditorGUILayout.EndVertical();
                        break;

                    case ConnectorPivotMode.Automatic:
                        EditorGUILayout.PropertyField(pivotDirectionOrient);
                        switch (connector.PivotDirectionOrient)
                        {
                        case ConnectorOrientType.OrientToCamera:
                            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                            EditorGUILayout.LabelField("Pivot will be set in direction relative to camera.", EditorStyles.miniLabel);
                            EditorGUILayout.EndVertical();
                            break;

                        case ConnectorOrientType.OrientToObject:
                            EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                            EditorGUILayout.LabelField("Pivot will be set in direction relative to target.", EditorStyles.miniLabel);
                            EditorGUILayout.EndVertical();
                            break;
                        }
                        ConnectorPivotDirection newPivotDirection = DrawPivotDirection(connector.PivotDirection);
                        pivotDirection.enumValueIndex = (int)newPivotDirection;
                        switch (connector.PivotDirection)
                        {
                        case ConnectorPivotDirection.Manual:
                            EditorGUILayout.PropertyField(manualPivotDirection);
                            break;

                        default:
                            break;
                        }
                        EditorGUILayout.PropertyField(pivotDistance);
                        break;

                    case ConnectorPivotMode.LocalPosition:
                        EditorGUILayout.BeginVertical(EditorStyles.helpBox);
                        EditorGUILayout.LabelField("Pivot will be set to position relative to target.", EditorStyles.miniLabel);
                        EditorGUILayout.EndVertical();
                        EditorGUILayout.PropertyField(manualPivotLocalPosition);
                        break;
                    }
                    break;
                }
            }

            serializedObject.ApplyModifiedProperties();
        }
Example #5
0
        private void OnDrawGizmos()
        {
            if (Application.isPlaying)
            {
                return;
            }

            if (toolTipPrefab == null)
            {
                return;
            }

            if (gameObject == UnityEditor.Selection.activeGameObject)
            {
                Gizmos.color = Color.cyan;
                Transform relativeTo = null;

                ConnectorFollowType     followType           = this.followType;
                ConnectorOrientType     pivotDirectionOrient = this.pivotDirectionOrient;
                ConnectorPivotDirection pivotDirection       = this.pivotDirection;
                ConnectorPivotMode      pivotMode            = this.pivotMode;
                Vector3 manualPivotDirection     = this.manualPivotDirection;
                Vector3 manualPivotLocalPosition = this.manualPivotLocalPosition;
                float   pivotDistance            = this.pivotDistance;

                switch (settingsMode)
                {
                case SettingsMode.UseDefaults:
                    ToolTipConnector connector = toolTipPrefab.GetComponent <ToolTipConnector>();
                    followType               = connector.ConnectorFollowingType;
                    pivotDirectionOrient     = connector.PivotDirectionOrient;
                    pivotDirection           = connector.PivotDirection;
                    pivotMode                = connector.PivotMode;
                    manualPivotDirection     = connector.ManualPivotDirection;
                    manualPivotLocalPosition = connector.ManualPivotLocalPosition;
                    pivotDistance            = connector.PivotDistance;
                    break;
                }

                switch (pivotDirectionOrient)
                {
                case ConnectorOrientType.OrientToCamera:
                    relativeTo = CameraCache.Main.transform;
                    break;

                case ConnectorOrientType.OrientToObject:
                    relativeTo = (anchor != null) ? anchor.transform : transform;
                    break;
                }

                Vector3 targetPosition = (anchor != null) ? anchor.transform.position : transform.position;

                switch (followType)
                {
                case ConnectorFollowType.AnchorOnly:
                    Gizmos.DrawLine(targetPosition, transform.TransformPoint(manualPivotLocalPosition));
                    Gizmos.DrawWireCube(transform.TransformPoint(manualPivotLocalPosition), Vector3.one * 0.05f);
                    break;

                case ConnectorFollowType.Position:
                case ConnectorFollowType.PositionAndXYRotation:
                case ConnectorFollowType.PositionAndYRotation:
                    if (pivotMode == ConnectorPivotMode.Automatic)
                    {
                        Vector3 toolTipPosition = targetPosition + ToolTipConnector.GetDirectionFromPivotDirection(
                            pivotDirection,
                            manualPivotDirection,
                            relativeTo) * pivotDistance;
                        Gizmos.DrawLine(targetPosition, toolTipPosition);
                        Gizmos.DrawWireCube(toolTipPosition, Vector3.one * 0.05f);
                    }
                    else
                    {
                        Vector3 toolTipPosition = transform.TransformPoint(manualPivotLocalPosition);
                        Gizmos.DrawLine(targetPosition, toolTipPosition);
                        Gizmos.DrawWireCube(toolTipPosition, Vector3.one * 0.05f);
                    }
                    break;
                }
            }
        }