public void SetTangentMode(int index, ShapeTangentMode mode) { SplineControlPoint newPoint = m_ControlPoints[index]; newPoint.mode = mode; m_ControlPoints[index] = newPoint; }
public SplinePointDto(Vector3 position, Vector3 leftTangent, Vector3 rightTangent, ShapeTangentMode tangentMode) { Position = new Vector3Dto(position); LeftTangent = new Vector3Dto(leftTangent); RightTangent = new Vector3Dto(rightTangent); TangentMode = tangentMode; }
public Vector3 GetRightTangent(int index) { ShapeTangentMode mode = GetTangentMode(index); if (mode == ShapeTangentMode.Linear) { return(Vector3.zero); } return(m_ControlPoints[index].rightTangent); }
public void SetRightTangent(int index, Vector3 tangent) { ShapeTangentMode mode = GetTangentMode(index); if (mode == ShapeTangentMode.Linear) { return; } SplineControlPoint newPoint = m_ControlPoints[index]; newPoint.rightTangent = tangent; m_ControlPoints[index] = newPoint; }
private void CycleTangentMode() { ISelection selection = ShapeEditorCache.GetSelection(); if (selection.single == -1) { return; } Undo.RecordObject(m_CurrentEditor.target, "Edit Tangent Mode"); ShapeTangentMode oldMode = m_Spline.GetTangentMode(selection.single); ShapeTangentMode newMode = GetNextTangentMode(oldMode); RefreshTangentsAfterModeChange(selection.single, newMode); }
private void RefreshTangentsAfterModeChange(int pointIndex, ShapeTangentMode newMode) { m_Spline.SetTangentMode(pointIndex, newMode); m_Spline.SetLeftTangent(pointIndex, ShapeEditorCache.instance.leftTangent); m_Spline.SetRightTangent(pointIndex, ShapeEditorCache.instance.rightTangent); if (newMode == ShapeTangentMode.Continuous) { bool setFromRightTangent = ShapeEditorCache.instance.rightTangentChanged; if (m_Spline.GetRightTangent(pointIndex).sqrMagnitude == 0f) { setFromRightTangent = false; } if (m_Spline.GetLeftTangent(pointIndex).sqrMagnitude == 0f) { setFromRightTangent = true; } if (setFromRightTangent) { m_Spline.SetLeftTangent(pointIndex, m_Spline.GetRightTangent(pointIndex) * -1f); } else { m_Spline.SetRightTangent(pointIndex, m_Spline.GetLeftTangent(pointIndex) * -1f); } } if (newMode == ShapeTangentMode.Continuous || newMode == ShapeTangentMode.Broken) { if (m_Spline.GetLeftTangent(pointIndex).sqrMagnitude == 0f && m_Spline.GetRightTangent(pointIndex).sqrMagnitude == 0f) { ResetTangents(pointIndex); } } EditorUtility.SetDirty(m_CurrentEditor.target); }
public override void ScrollRubber(float deltaPos) { Vector2 newPos; Spline spline = shape.spline; float camWidth = GameManager.instance.CameraWidth * 2f; int pointIndexToMove = -1; for (int i = 1; i < pointsCount - 1; i++) { newPos = spline.GetPosition(i); newPos.x += deltaPos * bandScrollKoefficient; if (newPos.x > camWidth) { newPos.x -= camWidth * 2f; pointIndexToMove = i; } else if (newPos.x < -camWidth) { newPos.x += camWidth * 2f; pointIndexToMove = i; } spline.SetPosition(i, newPos); } if (pointIndexToMove >= 0) { Vector3 pos = spline.GetPosition(pointIndexToMove); Vector3 lt = spline.GetLeftTangent(pointIndexToMove); Vector3 rt = spline.GetRightTangent(pointIndexToMove); ShapeTangentMode tm = spline.GetTangentMode(pointIndexToMove); spline.RemovePointAt(pointIndexToMove); int insertIndex = deltaPos > 0 ? 1 : pointsCount - 2; spline.InsertPointAt(insertIndex, pos); spline.SetTangentMode(insertIndex, tm); spline.SetLeftTangent(insertIndex, lt); spline.SetRightTangent(insertIndex, rt); } }
public void SetTangentMode(int pointIndex, ShapeTangentMode mode) { m_SplineEditor.SetTangentModeUseThisOne(pointIndex, (SplineEditor.TangentMode)mode); }
private static ShapeTangentMode GetNextTangentMode(ShapeTangentMode current) { return((ShapeTangentMode)((((int)current) + 1) % Enum.GetValues(typeof(ShapeTangentMode)).Length)); }
private void InsertPoint(Spline spline, int index, Vector3 point, ShapeTangentMode mode) { spline.InsertPointAt(index, point); spline.SetTangentMode(index, mode); spline.SetSpriteIndex(index, UnityEngine.Random.Range(0, _config.GrassShape.angleRanges[0].sprites.Count)); }
const float SCALE = 0.35f;//4.25f; /// <summary> /// Updates a sprite shape. /// </summary> /// <param name="controller">Sprite Shape Controller</param> /// <param name="pathCreator">Path Creator</param> /// <param name="j">Index of last bezier path segment updated</param> public static int UpdateSpriteShape(SpriteShapeController controller, PathCreator pathCreator, int j, ShapeTangentMode tangentMode = ShapeTangentMode.Continuous, bool sharpCorners = false) { Spline spline = controller.spline; spline.isOpenEnded = !pathCreator.path.isClosedLoop; int numSegments = pathCreator.bezierPath.NumSegments; int index = spline.GetPointCount(); Vector3[] segment; if (index == 2 || index == 0) { spline.Clear(); index = 0; segment = pathCreator.bezierPath.GetPointsInSegment(0); InsertPointBezier(spline, segment[0], index); index++; InsertPointBezier(spline, segment[3], index); index++; } for (int i = j + 1; i < numSegments; i++) { if (!(i == numSegments - 1 && !spline.isOpenEnded)) { segment = pathCreator.bezierPath.GetPointsInSegment(i); InsertPointBezier(spline, segment[3], index); index++; j = i; } } if (!sharpCorners) { spline.SetTangentMode(0, ShapeTangentMode.Continuous); spline.SetRightTangent(0, pathCreator.path.anchorTangents[0] * SCALE); int anchorT = 1; for (int i = 1; i < spline.GetPointCount() - 1; i++) { spline.SetTangentMode(i, ShapeTangentMode.Continuous); spline.SetLeftTangent(i, -pathCreator.path.anchorTangents[anchorT] * SCALE); anchorT++; spline.SetRightTangent(i, pathCreator.path.anchorTangents[anchorT] * SCALE); anchorT++; } spline.SetLeftTangent(spline.GetPointCount() - 1, -pathCreator.path.anchorTangents[pathCreator.path.anchorTangents.Length - 1] * SCALE); if (!spline.isOpenEnded) { spline.SetLeftTangent(0, -pathCreator.path.anchorTangents[0] * SCALE); spline.SetTangentMode(0, ShapeTangentMode.Continuous); spline.SetRightTangent(spline.GetPointCount() - 1, pathCreator.path.anchorTangents[pathCreator.path.anchorTangents.Length - 1] * SCALE); spline.SetTangentMode(spline.GetPointCount() - 1, ShapeTangentMode.Continuous); } } else { for (int i = 0; i < spline.GetPointCount() - 1; i++) { spline.SetTangentMode(i, ShapeTangentMode.Continuous); spline.SetLeftTangent(i, Vector3.zero); spline.SetRightTangent(i, Vector3.zero); } } return(j); }