Beispiel #1
0
        /// <summary>
        /// Adds a new control point to the scene view and its drag point data
        /// to the game object.
        /// </summary>
        public void AddDragPointOnTraveller()
        {
            if (CurveTravellerControlPointIdx < 0 || CurveTravellerControlPointIdx >= ControlPoints.Count)
            {
                return;
            }

            var dragPoint = new DragPointData(DragPointEditable.GetDragPoints()[CurveTravellerControlPointIdx])
            {
                IsLocked = false
            };

            var   newIdx            = CurveTravellerControlPointIdx + 1;
            float ratio             = (float)newIdx / (DragPointEditable.GetDragPoints().Length - 1);
            var   dragPointPosition = Transform.worldToLocalMatrix.MultiplyPoint(CurveTravellerPosition);

            dragPointPosition -= DragPointEditable.GetEditableOffset();
            dragPointPosition -= DragPointEditable.GetDragPointOffset(ratio);
            dragPoint.Vertex   = dragPointPosition.ToVertex3D();
            var dragPoints = DragPointEditable.GetDragPoints().ToList();

            dragPoints.Insert(newIdx, dragPoint);
            DragPointEditable.SetDragPoints(dragPoints.ToArray());

            ControlPoints.Insert(newIdx,
                                 new ControlPoint(
                                     DragPointEditable.GetDragPoints()[newIdx],
                                     GUIUtility.GetControlID(FocusType.Passive),
                                     newIdx,
                                     ratio
                                     ));
            RebuildControlPoints();
        }
Beispiel #2
0
        /// <summary>
        /// Removes a control point and its data.
        /// </summary>
        /// <param name="controlId"></param>
        public void RemoveDragPoint(int controlId)
        {
            var idx = ControlPoints.FindIndex(controlPoint => controlPoint.ControlId == controlId);

            if (idx >= 0)
            {
                var removalOk = !ControlPoints[idx].DragPoint.IsLocked;
                if (!removalOk)
                {
                    removalOk = EditorUtility.DisplayDialog("Locked DragPoint Removal", "This drag point is locked!\nAre you really sure you want to remove it?", "Yes", "No");
                }

                if (removalOk)
                {
                    var dragPoints = DragPointEditable.GetDragPoints().ToList();
                    dragPoints.RemoveAt(idx);
                    DragPointEditable.SetDragPoints(dragPoints.ToArray());
                    ControlPoints.RemoveAt(idx);
                    RebuildControlPoints();
                }
            }
        }