/// <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(); }
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; } } }