private void DrawCurve(SineDeformer sine)
        {
            var forward = sine.Axis.forward;
            var size    = HandleUtility.GetHandleSize(sine.Axis.position) * 5f;
            var a       = sine.Axis.position - (forward * size);
            var b       = sine.Axis.position + (forward * size);

            var pointSet         = false;
            var lastPointOnCurve = Vector3.zero;

            for (int i = 0; i <= DeformHandles.DEF_CURVE_SEGMENTS; i++)
            {
                var pointOnLine     = sine.Axis.worldToLocalMatrix.MultiplyPoint3x4(Vector3.Lerp(a, b, i / (float)DeformHandles.DEF_CURVE_SEGMENTS));
                var newPointOnCurve = pointOnLine + Vector3.up * Mathf.Sin((pointOnLine.z * sine.Frequency + sine.GetTotalOffset()) * Mathf.PI * 2f);
                newPointOnCurve.y *= sine.Amplitude;
                newPointOnCurve.y *= Mathf.Exp(-sine.Falloff * Mathf.Abs(newPointOnCurve.z));
                newPointOnCurve    = sine.Axis.localToWorldMatrix.MultiplyPoint3x4(newPointOnCurve);
                if (pointSet)
                {
                    DeformHandles.Line(lastPointOnCurve, newPointOnCurve, DeformHandles.LineMode.Solid);
                }
                lastPointOnCurve = newPointOnCurve;
                pointSet         = true;
            }
        }
        private void DrawGuides(SineDeformer sine)
        {
            var direction = sine.Axis.forward;
            var size      = HandleUtility.GetHandleSize(sine.Axis.position) * 5f;
            var baseA     = sine.Axis.position - direction * size;
            var baseB     = sine.Axis.position + direction * size;

            DeformHandles.Line(baseA, baseB, DeformHandles.LineMode.LightDotted);
            DeformHandles.Line(baseA + sine.Axis.up * sine.Amplitude, baseB + sine.Axis.up * sine.Amplitude, DeformHandles.LineMode.LightDotted);
            DeformHandles.Line(baseA - sine.Axis.up * sine.Amplitude, baseB - sine.Axis.up * sine.Amplitude, DeformHandles.LineMode.LightDotted);
        }
        private void DrawMagnitudeHandle(SineDeformer sine)
        {
            var direction = sine.Axis.up;
            var magnitudeHandleWorldPosition = sine.Axis.position + direction * sine.Amplitude * sine.Axis.lossyScale.y;

            using (var check = new EditorGUI.ChangeCheckScope())
            {
                var newMagnitudeWorldPosition = DeformHandles.Slider(magnitudeHandleWorldPosition, direction);
                if (check.changed)
                {
                    Undo.RecordObject(sine, "Changed Magnitude");
                    var newMagnitude = DeformHandlesUtility.DistanceAlongAxis(sine.Axis, sine.Axis.position, newMagnitudeWorldPosition, Axis.Y) / sine.Axis.lossyScale.y;
                    sine.Amplitude = newMagnitude;
                }
            }
        }
        private void DrawFrequencyHandle(SineDeformer sine)
        {
            var direction = sine.Axis.forward;
            var frequencyHandleWorldPosition = sine.Axis.position + direction * (1f / sine.Frequency * sine.Axis.lossyScale.z);

            using (var check = new EditorGUI.ChangeCheckScope())
            {
                var newFrequencyWorldPosition = DeformHandles.Slider(frequencyHandleWorldPosition, direction);
                if (check.changed)
                {
                    Undo.RecordObject(sine, "Changed Frequency");
                    var newFrequency = sine.Axis.lossyScale.z / DeformHandlesUtility.DistanceAlongAxis(sine.Axis, sine.Axis.position, newFrequencyWorldPosition, Axis.Z);
                    sine.Frequency = newFrequency;
                }
            }
        }
Example #5
0
 void Start()
 {
     sine = GetComponentInChildren <SineDeformer>();
 }