private Entity GetCurveEntityFromAnimationCurve(AnimationCurve curve, float multiplier, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
        {
            var curveEntity = conversionSystem.CreateAdditionalEntity(this);
            var keysEntity  = conversionSystem.CreateAdditionalEntity(this);

            var curveFloat = new BezierCurveFloat {
                keys = keysEntity
            };

            dstManager.AddComponentData <BezierCurveFloat>(curveEntity, curveFloat);

            var buffer    = dstManager.AddBuffer <BezierKeyFloat>(keysEntity);
            var keyFrames = curve.keys;

            for (int i = 0; i < keyFrames.Length; i++)
            {
                var keyFrame = keyFrames[i];
                var time     = keyFrame.time;
                var value    = keyFrame.value;
                value *= multiplier;

                var inValue  = value - keyFrame.inTangent * 0.15f;
                var outValue = value + keyFrame.outTangent * 0.15f;
                buffer.Add(new BezierKeyFloat(time, value, inValue, outValue));
            }

            return(curveEntity);
        }
        private Entity GetCurveFromMMC(UnityEngine.ParticleSystem.MinMaxCurve mmc, EntityManager dstManager, Entity curveEntity, Entity keysEntity, bool toDegrees = false)
        {
            //var curveEntity = dstManager.CreateEntity();
            //var keysEntity = dstManager.CreateEntity();

            //UnityEngine.Debug.Log("ParticleSystemConversionSystem: curveEntity = " + curveEntity);

            if (mmc.mode == ParticleSystemCurveMode.Constant)
            {
                var curve = new StepCurveFloat {
                    keys = keysEntity
                };
                dstManager.AddComponentData <StepCurveFloat>(curveEntity, curve);

                var buffer = dstManager.AddBuffer <KeyFloat>(keysEntity);
                var value  = toDegrees ? math.degrees(mmc.constant) : mmc.constant;
                buffer.Add(new KeyFloat(0f, value));
                buffer.Add(new KeyFloat(1f, value));
            }
            else if (mmc.mode == ParticleSystemCurveMode.TwoConstants)
            {
                var curve = new LinearCurveFloat {
                    keys = keysEntity
                };
                dstManager.AddComponentData <LinearCurveFloat>(curveEntity, curve);

                var buffer = dstManager.AddBuffer <KeyFloat>(keysEntity);
                var min    = toDegrees ? math.degrees(mmc.constantMin) : mmc.constantMin;
                var max    = toDegrees ? math.degrees(mmc.constantMax) : mmc.constantMax;
                buffer.Add(new KeyFloat(0f, min));
                buffer.Add(new KeyFloat(1f, max));
            }
            else if (mmc.mode == ParticleSystemCurveMode.Curve)
            {
                var curve = new BezierCurveFloat {
                    keys = keysEntity
                };
                dstManager.AddComponentData <BezierCurveFloat>(curveEntity, curve);

                var buffer     = dstManager.AddBuffer <BezierKeyFloat>(keysEntity);
                var keyFrames  = mmc.curve.keys;
                var multiplier = mmc.curveMultiplier;
                for (int i = 0; i < keyFrames.Length; i++)
                {
                    var keyFrame = keyFrames[i];
                    var value    = toDegrees ? math.degrees(keyFrame.value) : keyFrame.value;
                    value *= multiplier;

                    var inValue  = value - keyFrame.inTangent * 0.15f;
                    var outValue = value + keyFrame.outTangent * 0.15f;
                    buffer.Add(new BezierKeyFloat(keyFrame.time, value, inValue, outValue));
                }
            }
            else if (mmc.mode == ParticleSystemCurveMode.TwoCurves)
            {
                var curve = new BezierCurveFloat {
                    keys = keysEntity
                };
                dstManager.AddComponentData <BezierCurveFloat>(curveEntity, curve);

                var buffer   = dstManager.AddBuffer <BezierKeyFloat>(keysEntity);
                var mmcCurve = mmc.curveMin;
                if (mmcCurve.length < mmc.curveMax.length)
                {
                    mmcCurve = mmc.curveMax;
                }

                var keyFrames  = mmcCurve.keys;
                var multiplier = mmc.curveMultiplier;
                for (int i = 0; i < keyFrames.Length; i++)
                {
                    var keyFrame = keyFrames[i];
                    var value    = toDegrees ? math.degrees(keyFrame.value) : keyFrame.value;
                    value *= multiplier;

                    var inValue  = value - keyFrame.inTangent * 0.15f;
                    var outValue = value + keyFrame.outTangent * 0.15f;
                    buffer.Add(new BezierKeyFloat(keyFrame.time, value, inValue, outValue));
                }
            }

            return(curveEntity);
        }