public void OnSceneGUI() { if (!painter.painter.hasCanvas) { return; } if (!editor.isMouseInWindow || Event.current.modifiers == EventModifiers.Alt) { GlobalPainting.UpdateTerrainBrush(); return; } if (vizCanvasOnTerrain) { GlobalPainting.ShowCanvasProjection(painter.transform.position + Vector3.up * painter.canvasSize.y, painter.transform.rotation, new Vector2(painter.transform.lossyScale.x * painter.canvasSize.x, painter.transform.lossyScale.z * painter.canvasSize.z), painter.painter.vizCanvas, painter.painter.canvasFormat == Painting.Format.Value); } if (debugGenerateRect) { Vector2 totalAreaSize = new Vector2(painter.areaSize.x * painter.areaTiles.x, painter.areaSize.z * painter.areaTiles.y); Rect rect = new Rect(Vector2.Scale(painter.generateRect.position, totalAreaSize) - totalAreaSize / 2, Vector2.Scale(painter.generateRect.size, totalAreaSize)); rect.position += new Vector2(painter.areaPos.x, painter.areaPos.z); Handles.DrawSolidRectangleWithOutline(new Vector3[] { new Vector3(rect.xMin, 0, rect.yMin), new Vector3(rect.xMax, 0, rect.yMin), new Vector3(rect.xMax, 0, rect.yMax), new Vector3(rect.xMin, 0, rect.yMax) }, new Color(1, 1, 1, 0), Color.green); } if (debugNodeRect) { Rect rect = painter.nodeRect; Handles.DrawSolidRectangleWithOutline(new Vector3[] { new Vector3(rect.xMin, 0, rect.yMin), new Vector3(rect.xMax, 0, rect.yMin), new Vector3(rect.xMax, 0, rect.yMax), new Vector3(rect.xMin, 0, rect.yMax) }, new Color(1, 1, 1, 0), Color.red); } painter.painter.blockPainting = Tools.current != Tool.None; if ((Event.current.type == EventType.MouseUp && Event.current.button == 0) || Event.current.button != 0) { painter.painter.StopPainting(SceneViewID); } editor.controlID = GUIUtility.GetControlID(FocusType.Passive); HandleUtility.AddDefaultControl(editor.controlID); if (Event.current.GetTypeForControl(editor.controlID) == EventType.MouseDown) { // Block left-click in scene view GUIUtility.hotControl = editor.controlID; // Event.current.Use (); } Vector2 brushPos; Vector3 worldPos; if (painter.CalcBrushWorldPos(out brushPos, out worldPos)) { if (Event.current.type != EventType.Repaint && Event.current.type != EventType.Layout) { Undo.RecordObject(painter, "Node Painter Shortcut"); } string undoRecord; bool blockPainting = editor.HandleShortcuts(out undoRecord) || painter.painter.blockPainting; if (!string.IsNullOrEmpty(undoRecord)) { Undo.FlushUndoRecordObjects(); } if (Event.current.type == EventType.Layout) { if (blockPainting) { GlobalPainting.UpdateTerrainBrush(); } else if (painter.TCNodeTarget != null) { GlobalPainting.ShowTerrainBrush(painter.painter, worldPos, painter.painter.curBrush.size * painter.TCNodeTarget.size.x * painter.transform.lossyScale.x); } else { GlobalPainting.ShowTerrainBrush(painter.painter, worldPos, painter.painter.curBrush.size * TC_Area2D.current.bounds.size.x * painter.transform.lossyScale.x); } } float expand = painter.painter.curBrush.size; bool isInCanvas = (brushPos.x >= -expand && brushPos.x <= 1 + expand) && (brushPos.y >= -expand && brushPos.y <= 1 + expand); if (painter.painter.PaintUpdate(SceneViewID, editor.controlID, isInCanvas, blockPainting, brushPos)) { Repaint(); } } else { if (GUIUtility.hotControl == editor.controlID) { GUIUtility.hotControl = 0; } GlobalPainting.UpdateTerrainBrush(); } if (editor.isMouseInWindow) { HandleUtility.Repaint(); } }
public override void OnInspectorGUI() { if (editor == null) { return; } if ((Event.current.type == EventType.MouseUp && Event.current.button == 0) || Event.current.button != 0) { painter.painter.StopPainting(GUIWindowID); } editor.GUIWindowID = GUIWindowID; if (Event.current.type != EventType.Repaint && Event.current.type != EventType.Layout) { Undo.RecordObject(painter, "Node Painter Settings"); } string undoRecord; editor.DoPainterGUI(out undoRecord); if (!string.IsNullOrEmpty(undoRecord)) { Undo.FlushUndoRecordObjects(); //Debug.Log ("Recording " + undoRecord + " over " + Undo.GetCurrentGroupName () + "!"); } if (painter.painter.hasCanvas) { expandTargets = EditorGUILayout.Foldout(expandTargets, "Node Targets", PaintingEditor.headerFoldout); if (expandTargets) { painter.TCArea = (TC_Area2D)EditorGUILayout.ObjectField("TC2 Area 2D", painter.TCArea, typeof(TC_Area2D), true); if (painter.painter.canvasFormat != Painting.Format.Multi && painter.TCNode != null) { GUILayout.Label("Current node: " + painter.TCNode.name); } while (painter.channelTargets.Count < painter.painter.canvasChannelCount || painter.channelTargets.Count < 1) { painter.channelTargets.Add(new NodePainter.ChannelNodeTargets()); } // painter.painter.curChannelIndex = Mathf.Clamp (painter.painter.curChannelIndex, 0, painter.painter.canvasChannelCount-1); DrawNodeTargetList(painter.channelTargets[painter.painter.curChannelIndex].targets); if (painter.channelTargets.Count == 0) { GUILayout.Label("No node targets specified!"); } } } AdditionalGUIUtility.Seperator(); if (GUILayout.Button("Show Settings", EditorStyles.toolbarButton)) { SettingsWindow.Open(); } // GUILayout.Label ("Painter's control ID: " + editor.controlID); // GUILayout.Label ("Active control ID: " + GUIUtility.hotControl); EditorGUILayout.Space(); if (editor.isMouseInWindow) { Repaint(); } if (vizCanvasOnTerrain != painter.painter.vizCanvasExternally) { vizCanvasOnTerrain = painter.painter.vizCanvasExternally; if (vizCanvasOnTerrain) { GlobalPainting.ShowCanvasProjection(painter.transform.position + Vector3.up * TC_Area2D.current.bounds.size.y, painter.transform.rotation, new Vector2(painter.transform.localScale.x * painter.TCNodeTarget.size.x, painter.transform.localScale.z * painter.TCNodeTarget.size.z), painter.painter.vizCanvas, painter.painter.canvasFormat == Painting.Format.Value); } else { GlobalPainting.HideCanvasProjection(); } HandleUtility.Repaint(); SceneView.RepaintAll(); } }