public VLSEdge(VLSBehaviour _parent, Vector3 _pointA, Vector3 _pointB) { pointA.position.Set(_pointA.x, _pointA.y, 0); pointB.position.Set(_pointB.x, _pointB.y, 0); CalculateNormal(); }
protected void DrawEdgeEditor() { Vector3 positionAverage = Vector2.zero; VLSBehaviour obst = (serializedObject.targetObject as VLSBehaviour); Transform transform = obst.gameObject.transform; float guiSize = HandleUtility.GetHandleSize(transform.position) * guiScale; Event e = Event.current; Vector3 mousePosition = HandleUtility.GUIPointToWorldRay(e.mousePosition).origin; Handles.DrawSolidDisc(obst.transform.position, -Vector3.forward, guiSize); if (Handles.Button(obst.transform.position, Quaternion.identity, guiSize * 1.5f, guiSize * 2, Handles.CircleCap)) { selectedVertices.Clear(); Tools.hidden = false; //Tools.current = prevTool; } serializedObject.Update(); { if (e.control) { Vector3 vPos = new Vector3(); int index = GetClosestEdgePointToPosition(mousePosition, guiSize * 2, ref vPos); if (index >= 0) { if (Handles.Button(vPos, Quaternion.identity, guiSize, guiSize * 2, Handles.CircleCap)) { obst.InsertLocalVertex(index, obst.transform.InverseTransformPoint(vPos)); selectedVertices.Clear(); selectedVertices.Add(index); GUI.changed = true; Tools.hidden = true; } } } for (int i = 0; i < vertices.arraySize; i++) { Vector3 position = vertices.GetArrayElementAtIndex(i).vector3Value; bool isSelected = selectedVertices.Contains(i); Handles.color = (isSelected) ? Color.green : Color.gray; Handles.DrawSolidDisc(transform.TransformPoint(position), Vector3.forward, guiSize); if (isSelected) { positionAverage += obst.LocalVertex(i); } if (Handles.Button(transform.TransformPoint(position), Quaternion.identity, guiSize, guiSize, Handles.CircleCap)) { if (e.shift) { if (selectedVertices.Contains(i)) { selectedVertices.Remove(i); } else { selectedVertices.Add(i); } } else { selectedVertices.Clear(); selectedVertices.Add(i); } Tools.hidden = true; } } if (selectedVertices.Count > 0) { positionAverage /= selectedVertices.Count; Vector3 tPos = transform.TransformPoint(positionAverage); Vector3 delta = Handles.PositionHandle(tPos, (Tools.pivotRotation == PivotRotation.Global) ? Quaternion.identity : obst.transform.rotation) - tPos; for (int i = 0; i < selectedVertices.Count; i++) { obst.LocalVertex(selectedVertices[i], obst.LocalVertex(selectedVertices[i]) + transform.InverseTransformVector(delta)); } if (e.isKey && (e.keyCode == KeyCode.Backspace)) { for (int i = 0; i < selectedVertices.Count; i++) { obst.RemoveLocalVertex(selectedVertices[i]); } selectedVertices.Clear(); GUI.changed = true; } } } serializedObject.ApplyModifiedProperties(); }