private void Drag() { var current = Event.current; if (VisualRect.Contains(current.mousePosition) && IsDraggable) { VisualRect.position += current.delta; current.Use(); } }
void CreateRectangle(Rect backRect) { if (Event.current.type == EventType.MouseUp && Event.current.button == 0) { Vector2 rectScale = Event.current.mousePosition - startMouseHoldPosition; if (Mathf.Abs(rectScale.y) > 5 && Mathf.Abs(rectScale.x) > 5) { Rect selectionRect = new Rect(startMouseHoldPosition, rectScale); var min = selectionRect.min; var max = selectionRect.max; min.x = Mathf.Clamp(min.x, 0 + offset.x * zoom, (backRect.width + offset.x) * zoom); min.y = Mathf.Clamp(min.y, 0 + offset.y * zoom, (backRect.height + offset.y) * zoom); max.x = Mathf.Clamp(max.x, 0 + offset.x * zoom, (backRect.width + offset.x) * zoom); max.y = Mathf.Clamp(max.y, 0 + offset.y * zoom, (backRect.height + offset.y) * zoom); selectionRect.min = min / zoom; selectionRect.max = max / zoom; selectionRect.center -= offset; Rect r = selectionRect; if (r.height < 0) { r.center += r.height * Vector2.up; r.height = Mathf.Abs(r.height); } if (r.width < 0) { r.center += r.width * Vector2.right; r.width = Mathf.Abs(r.width); } selectionRect = r; var visualRect = new VisualRect(); visualRect.Rect = selectionRect; Undo.RecordObject(rectsContainer, "Create rect"); visualRects.Add(visualRect); } } }
private void AutoSplit() { Undo.RecordObject(rectsContainer, "Auto split"); visualRects.Clear(); Vector2 tileSize = new Vector2((float)backRect.width / tiles.x, (float)backRect.height / tiles.y); for (int x = 0; x < tiles.x; x++) { for (int y = 0; y < tiles.y; y++) { Rect tileRect = new Rect(Vector2.Scale(tileSize, new Vector2(x, y)), tileSize); var vr = new VisualRect(); vr.Rect = tileRect; visualRects.Add(vr); } } }
void DrawCanvas(Rect fullRect) { EditorGUI.DrawRect(backRect, Color.black); GUI.EndGroup(); Rect groupRect = backRect; groupRect.yMin += tabHeight / zoom; groupRect.yMax += tabHeight / zoom; groupRect.width /= zoom; groupRect.height /= zoom; backRect.center += offset; GUI.BeginGroup(groupRect); GUI.matrix = zoomedMatrix; GUI.DrawTextureWithTexCoords(backRect, DPTResourcesLoader.AlphaGrid, new Rect(0, 0, backRect.width / DPTResourcesLoader.AlphaGrid.width, backRect.height / DPTResourcesLoader.AlphaGrid.height)); GUI.color = Color.black; GUI.DrawTextureWithTexCoords(backRect, template.DecalMaterial.mainTexture, new Rect(-0.005f, 0.005f, 1, 1)); GUI.color = Color.white; GUI.DrawTextureWithTexCoords(backRect, template.DecalMaterial.mainTexture, new Rect(0, 0, 1, 1)); GUI.matrix = guiMatrix; GUI.EndGroup(); GUI.BeginGroup(fullRect); if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { selectedVisualRect = null; } if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Delete) { Undo.RecordObject(rectsContainer, "Delete rect"); if (selectedVisualRect != null) { visualRects.Remove(selectedVisualRect); } } for (int i = 0; i < visualRects.Count; i++) { Vector2 tabOffset = new Vector4(0, tabHeight); Rect r = visualRects[i].Rect; r.min += offset - tabOffset; r.max += offset - tabOffset; r.min += tabOffset; r.max += tabOffset; r.min *= zoom; r.max *= zoom; //if (r.height < 0) //{ // r.center += r.height * Vector2.up; // r.height = Mathf.Abs(r.height); //} //if (r.width < 0) //{ // r.center += r.width * Vector2.right; // r.width = Mathf.Abs(r.width); //} if (Event.current.type == EventType.MouseDown && Event.current.button == 0) { var mouseIN = r.Contains(Event.current.mousePosition); if (mouseIN) { selectedVisualRect = visualRects[i]; } } Color outlineColor = defaultFrameColor; if (selectedVisualRect == visualRects[i]) { outlineColor.a = 1f; } else { outlineColor.a = 1f; } Color faceColor = defaultFrameColor; if (selectedVisualRect == visualRects[i]) { faceColor.a *= 0.1f; } else { faceColor.a *= 0.05f; } Handles.DrawSolidRectangleWithOutline(r, faceColor, Color.clear); Vector3[] points = new Vector3[5]; points[0] = r.min; points[1] = new Vector3(r.min.x, r.max.y); points[2] = r.max; points[3] = new Vector3(r.max.x, r.min.y); points[4] = r.min; Handles.color = outlineColor; Handles.DrawAAPolyLine(5f, 5, points); } }