// Handle events when mouse point enter or leaves the SceneView void ProcessMouseEnterLeaveSceneview() { // If mouse enters SceneView window, show visualizer if (Event.current.type == EventType.MouseEnterWindow) { MAST_Placement_Visualizer.SetVisualizerVisibility(true); } // If mouse leaves SceneView window else if (Event.current.type == EventType.MouseLeaveWindow) { // Hide visualizer MAST_Placement_Visualizer.SetVisualizerVisibility(false); // Stop any drawing if (drawing) { drawing = false; } // Stop any painting if (painting) { MAST_Placement_PaintArea.DeletePaintArea(); painting = false; } // Stop any erasing if (erasing) { erasing = false; } } }
// --------------------------------------------------------------------------- // Clean-up // --------------------------------------------------------------------------- private void CleanUpInterface() { //Debug.Log("Cleaning Up Interface"); // Remove SceneView delegate #if UNITY_2019_1_OR_NEWER SceneView.duringSceneGui -= this.OnScene; #else SceneView.onSceneGUIDelegate -= this.OnScene; #endif // Delete placement grid MAST_Grid_Manager.DestroyGrid(); // Deselect palette item and delete visualizer MAST_Palette.selectedItemIndex = -1; MAST_Placement_Visualizer.RemoveVisualizer(); // Deselect draw tool and change placement mode to none MAST_Settings.gui.toolbar.selectedDrawToolIndex = -1; MAST_Placement_Interface.ChangePlacementMode(MAST_Placement_Interface.PlacementMode.None); // Cancel any drawing or painting drawing = false; painting = false; erasing = false; MAST_Placement_PaintArea.DeletePaintArea(); }
// --------------------------------------------------------------------------- #region SceneView // --------------------------------------------------------------------------- private void OnScene(SceneView sceneView) { // Exit now if game is playing //if (inPlayMode) // return; // Handle SceneView GUI SceneviewGUI(sceneView); // Handle view focus ProcessMouseEnterLeaveSceneview(); // Process HotKeys and repaint all views if any changes were made if (HotKeys.ProcessHotkeys()) { UnityEditorInternal.InternalEditorUtility.RepaintAllViews(); } // If draw tool was deselected by a hotkey if (MAST_Settings.gui.toolbar.selectedDrawToolIndex != 1) { // Stop any drawing if (drawing) { drawing = false; } } // If paint area tool was deselected by a hotkey if (MAST_Settings.gui.toolbar.selectedDrawToolIndex != 2) { // Stop any painting if (painting) { MAST_Placement_PaintArea.DeletePaintArea(); painting = false; } } // If erase tool was deselected by a hotkey if (MAST_Settings.gui.toolbar.selectedDrawToolIndex != 4) { // Stop any erasing if (erasing) { erasing = false; } } // If a palette item is selected or erase tool is selected, handle object placement if (MAST_Palette.selectedItemIndex > -1 || MAST_Settings.gui.toolbar.selectedDrawToolIndex == 4) { ObjectPlacement(); } }
// --------------------------------------------------------------------------- // Clean-up // --------------------------------------------------------------------------- private void CleanUpInterface() { //Debug.Log("Cleaning Up Interface"); // Delete placement grid MAST_Grid_Manager.DestroyGrid(); // Deselect palette item and delete visualizer MAST_Palette.selectedItemIndex = -1; MAST_Placement_Visualizer.RemoveVisualizer(); // Deselect draw tool and change placement mode to none MAST_Settings.gui.toolbar.selectedDrawToolIndex = -1; MAST_Placement_Interface.ChangePlacementMode(MAST_Placement_Interface.PlacementMode.None); // Cancel any drawing or painting drawing = false; painting = false; erasing = false; MAST_Placement_PaintArea.DeletePaintArea(); }
// Handle object placement private void ObjectPlacement() { // Get mouse events for object placement when in the Scene View Event currentEvent = Event.current; // Change position of visualizer MAST_Placement_Visualizer.UpdateVisualizerPosition(); switch (MAST_Settings.gui.toolbar.selectedDrawToolIndex) { // Draw single tool case 0: // Randomizer tool case 3: // If left mouse button was clicked if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) { // Keep mouseclick from selecting other objects GUIUtility.hotControl = GUIUtility.GetControlID(FocusType.Passive); Event.current.Use(); // Place selected prefab on grid MAST_Placement_Place.PlacePrefabInScene(); } break; // Draw continuous tool case 1: // If not already drawing and the left mouse button pressed if (!drawing) { if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) { // Start drawing drawing = true; // Keep mouseclick from selecting other objects GUIUtility.hotControl = GUIUtility.GetControlID(FocusType.Passive); Event.current.Use(); } } // If drawing and left mouse button not released if (drawing) { // Place selected prefab on grid MAST_Placement_Place.PlacePrefabInScene(); // If left mouse button released if (currentEvent.type == EventType.MouseUp && currentEvent.button == 0) { drawing = false; } } break; // Paint area tool case 2: // If not already painting and the left mouse button pressed if (!painting) { if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) { // Start drawing painting = true; // Start paint area at current mouse location MAST_Placement_PaintArea.StartPaintArea(); // Keep mouseclick from selecting other objects GUIUtility.hotControl = GUIUtility.GetControlID(FocusType.Passive); Event.current.Use(); } } // If drawing and left mouse button not released if (painting) { // Update the paint area as the mouse moves MAST_Placement_PaintArea.UpdatePaintArea(); // If left mouse button released if (currentEvent.type == EventType.MouseUp && currentEvent.button == 0) { MAST_Placement_PaintArea.CompletePaintArea(); painting = false; } } break; // Erase tool case 4: // If not already erasing and the left mouse button pressed if (!erasing) { if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) { // Start drawing erasing = true; // Keep mouseclick from selecting other objects GUIUtility.hotControl = GUIUtility.GetControlID(FocusType.Passive); Event.current.Use(); } } // If erasing and left mouse button not released if (erasing) { // Place selected prefab on grid MAST_Placement_Interface.ErasePrefab(); // If left mouse button released if (currentEvent.type == EventType.MouseUp && currentEvent.button == 0) { erasing = false; } } break; } }
// --------------------------------------------------------------------------- #region Change Placement Mode // --------------------------------------------------------------------------- public static void ChangePlacementMode(PlacementMode newPlacementMode) { // Get new selected Draw Tool placementMode = newPlacementMode; // Remove any previous visualizer MAST_Placement_Visualizer.RemoveVisualizer(); // -------------------------------- // Create Visualizer // -------------------------------- // If changed tool to Nothing or Eraser if (placementMode == PlacementMode.None || placementMode == PlacementMode.Erase) { // Deselect any item in the palette MAST_Palette.selectedItemIndex = -1; // If changed tool to Eraser if (placementMode == PlacementMode.Erase) { // Create eraser visualizer ChangePrefabToEraser(); } // If changed tool to Nothing, remove the visualizer else { MAST_Placement_Visualizer.RemoveVisualizer(); } } // If changed tool to Draw Single, Draw Continuous, Paint Area, or Randomizer else { // If a palette item is selected if (MAST_Palette.selectedItemIndex != -1) { // Create visualizer from selected item in the palette ChangeSelectedPrefab(); // If changed tool to Randomizer if (placementMode == PlacementMode.Randomize) { // Make a new random seed MAST_Placement_Randomizer.GenerateNewRandomSeed(); } } } // If Draw Continuous nor Paint Area tools are selected if (placementMode != PlacementMode.DrawContinuous && placementMode != PlacementMode.PaintArea) { // Delete last saved position MAST_Placement_Place.lastPosition = Vector3.positiveInfinity; // Remove any paint area visualization MAST_Placement_PaintArea.DeletePaintArea(); } }