void HandleInput(Event guiEvent, VoiceOverrideDoor voiceOverrideDoor) { Ray mouseRay = HandleUtility.GUIPointToWorldRay(guiEvent.mousePosition); float drawPlaneHeight = 0; float dstToDrawPlane = (drawPlaneHeight - mouseRay.origin.y) / mouseRay.direction.y; Vector3 mousePosition = mouseRay.GetPoint(dstToDrawPlane); if (guiEvent.type == EventType.MouseDown && guiEvent.button == 0 && guiEvent.modifiers == EventModifiers.None) { HandleLeftMouseDown(mousePosition, voiceOverrideDoor); } }
void HandleLeftMouseDown(Vector3 mousePosition, VoiceOverrideDoor voiceOverrideDoor) { if (Utilities.IsValid(voiceOverrideDoor.voiceOverrideRoom)) { var roomGuiPosition = HandleUtility.WorldToGUIPoint(voiceOverrideDoor.voiceOverrideRoom.transform.position); var mouseGuiPosition = HandleUtility.WorldToGUIPoint(mousePosition); var clickCloseToRoomGameObject = Vector2.Distance(roomGuiPosition, mouseGuiPosition) < 10f; if (clickCloseToRoomGameObject) { Selection.SetActiveObjectWithContext(voiceOverrideDoor.voiceOverrideRoom.gameObject, voiceOverrideDoor.voiceOverrideRoom); EditorGUIUtility.PingObject(voiceOverrideDoor.voiceOverrideRoom); } } }
public static void DrawDoorInfo(VoiceOverrideDoor voiceOverrideDoor) { if (!voiceOverrideDoor) { return; } var doorTransform = voiceOverrideDoor.transform; var doorPosition = doorTransform.position; var exitDirection = doorTransform.TransformDirection(voiceOverrideDoor.exitDirection).normalized; Handles.color = Color.red; Handles.DrawDottedLine(doorPosition, doorPosition + exitDirection, 2); GUI.color = Color.red; Handles.Label(doorPosition + exitDirection, "Outside"); Handles.color = Color.green; Handles.DrawDottedLine(doorPosition, doorPosition - exitDirection, 2); GUI.color = Color.green; Handles.Label(doorPosition - exitDirection, "Inside"); }