protected override Vector2Int ScreenToGrid(Vector2 screenPosition) { if (tilemap != null) { var transform = tilemap.transform; Vector3 forward = tilemap.orientationMatrix.MultiplyVector(transform.forward) * -1f; Plane plane = new Plane(forward, transform.position); Vector3Int cell = LocalToGrid(tilemap, GridEditorUtility.ScreenToLocal(transform, screenPosition, plane)); return(new Vector2Int(cell.x, cell.y)); } if (grid) { Vector3Int cell = LocalToGrid(grid, GridEditorUtility.ScreenToLocal(gridTransform, screenPosition, GetGridPlane(grid))); return(new Vector2Int(cell.x, cell.y)); } return(Vector2Int.zero); }
protected override Vector2Int ScreenToGrid(Vector2 screenPosition) { Vector2Int result; if (this.tilemap != null) { Transform transform = this.tilemap.transform; Vector3 inNormal = this.tilemap.orientationMatrix.MultiplyVector(transform.forward) * -1f; Plane plane = new Plane(inNormal, transform.position); Vector3Int vector3Int = this.LocalToGrid(this.tilemap, GridEditorUtility.ScreenToLocal(transform, screenPosition, plane)); result = new Vector2Int(vector3Int.x, vector3Int.y); } else if (this.grid) { Vector3Int vector3Int2 = this.LocalToGrid(this.grid, GridEditorUtility.ScreenToLocal(this.gridTransform, screenPosition, this.GetGridPlane(this.grid))); result = new Vector2Int(vector3Int2.x, vector3Int2.y); } else { result = Vector2Int.zero; } return(result); }
private void OnSceneGUIDelegate(SceneView sceneView) { Event evt = Event.current; if (evt.type != EventType.DragUpdated && evt.type != EventType.DragPerform && evt.type != EventType.DragExited && evt.type != EventType.Repaint) { return; } Grid activeGrid = GetActiveGrid(); if (activeGrid == null || DragAndDrop.objectReferences.Length == 0) { return; } Vector3 localMouse = GridEditorUtility.ScreenToLocal(activeGrid.transform, evt.mousePosition); Vector3Int mouseGridPosition = activeGrid.LocalToCell(localMouse); switch (evt.type) { //TODO: Cache this case EventType.DragUpdated: DragAndDrop.visualMode = DragAndDropVisualMode.Copy; List <TileBase> tiles = TileDragAndDrop.GetValidTiles(DragAndDrop.objectReferences); instance.m_HoverData = TileDragAndDrop.CreateHoverData(null, null, tiles); if (instance.m_HoverData.Count > 0) { Event.current.Use(); GUI.changed = true; } break; case EventType.DragPerform: if (instance.m_HoverData.Count > 0) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; Dictionary <Vector2Int, TileBase> tileSheet = TileDragAndDrop.ConvertToTileSheet(instance.m_HoverData); Tilemap tilemap = GetOrCreateActiveTilemap(); tilemap.ClearAllEditorPreviewTiles(); foreach (KeyValuePair <Vector2Int, TileBase> item in tileSheet) { Vector3Int position = new Vector3Int(mouseGridPosition.x + item.Key.x, mouseGridPosition.y + item.Key.y, 0); tilemap.SetTile(position, item.Value); } instance.m_HoverData = null; GUI.changed = true; Event.current.Use(); } break; case EventType.Repaint: if (instance.m_HoverData != null) { Tilemap map = Selection.activeGameObject.GetComponentInParent <Tilemap>(); if (map != null) { map.ClearAllEditorPreviewTiles(); } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; foreach (KeyValuePair <Vector2Int, Object> item in instance.m_HoverData) { Vector3Int gridPos = mouseGridPosition + new Vector3Int(item.Key.x, item.Key.y, 0); if (item.Value is TileBase) { TileBase tile = item.Value as TileBase; if (map != null) { map.SetEditorPreviewTile(gridPos, tile); } } } } break; } if (instance.m_HoverData != null && ( Event.current.type == EventType.DragExited || Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Escape)) { if (instance.m_HoverData.Count > 0) { Tilemap map = Selection.activeGameObject.GetComponentInParent <Tilemap>(); if (map != null) { map.ClearAllEditorPreviewTiles(); } Event.current.Use(); } instance.m_HoverData = null; } }
private void OnSceneGUIDelegate(SceneView sceneView) { Event current = Event.current; if (current.type == EventType.DragUpdated || current.type == EventType.DragPerform || current.type == EventType.DragExited || current.type == EventType.Repaint) { Grid activeGrid = TileDragAndDropManager.GetActiveGrid(); if (!(activeGrid == null) && DragAndDrop.objectReferences.Length != 0) { Vector3 localPosition = GridEditorUtility.ScreenToLocal(activeGrid.transform, current.mousePosition); Vector3Int a = activeGrid.LocalToCell(localPosition); EventType type = current.type; if (type != EventType.DragUpdated) { if (type != EventType.DragPerform) { if (type == EventType.Repaint) { if (ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData != null) { Tilemap componentInParent = Selection.activeGameObject.GetComponentInParent <Tilemap>(); if (componentInParent != null) { componentInParent.ClearAllEditorPreviewTiles(); } DragAndDrop.visualMode = DragAndDropVisualMode.Copy; foreach (KeyValuePair <Vector2Int, UnityEngine.Object> current2 in ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData) { Vector3Int position = a + new Vector3Int(current2.Key.x, current2.Key.y, 0); if (current2.Value is TileBase) { TileBase tile = current2.Value as TileBase; if (componentInParent != null) { componentInParent.SetEditorPreviewTile(position, tile); } } } } } } else if (ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData.Count > 0) { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; Dictionary <Vector2Int, TileBase> dictionary = TileDragAndDrop.ConvertToTileSheet(ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData); Tilemap orCreateActiveTilemap = TileDragAndDropManager.GetOrCreateActiveTilemap(); orCreateActiveTilemap.ClearAllEditorPreviewTiles(); foreach (KeyValuePair <Vector2Int, TileBase> current3 in dictionary) { Vector3Int position2 = new Vector3Int(a.x + current3.Key.x, a.y + current3.Key.y, 0); orCreateActiveTilemap.SetTile(position2, current3.Value); } ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData = null; GUI.changed = true; Event.current.Use(); } } else { DragAndDrop.visualMode = DragAndDropVisualMode.Copy; List <TileBase> validTiles = TileDragAndDrop.GetValidTiles(DragAndDrop.objectReferences); ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData = TileDragAndDrop.CreateHoverData(null, null, validTiles); if (ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData.Count > 0) { Event.current.Use(); GUI.changed = true; } } if (ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData != null && (Event.current.type == EventType.DragExited || (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Escape))) { if (ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData.Count > 0) { Tilemap componentInParent2 = Selection.activeGameObject.GetComponentInParent <Tilemap>(); if (componentInParent2 != null) { componentInParent2.ClearAllEditorPreviewTiles(); } Event.current.Use(); } ScriptableSingleton <TileDragAndDropManager> .instance.m_HoverData = null; } } } }