public float3 Evaluate(float time)
        {
            keys.buffer = keys.GetBuffer(entityManager);
            ColorKeyData keyLeft  = keys.buffer[0].Value;
            ColorKeyData keyRight = keys.buffer[keys.buffer.Length - 1].Value;

            for (int i = 0; i < keys.buffer.Length; i++)
            {
                if (keys.buffer[i].Value.Time <= time)
                {
                    keyLeft = keys.buffer[i].Value;
                }
                if (keys.buffer[i].Value.Time >= time)
                {
                    keyRight = keys.buffer[i].Value;
                    break;
                }
            }

            if (blendMode == MegaGradient.BlendMode.Linear)
            {
                float blendTime = Mathf.InverseLerp(keyLeft.Time, keyRight.Time, time);
                return(math.lerp(keyLeft.ColorValue, keyRight.ColorValue, blendTime));
                //	return Color.Lerp(keyLeft.Color, keyRight.Color, blendTime);
            }
            else
            {
                return(keyRight.ColorValue);
            }
        }
        public void Convert(Entity entity, EntityManager dstManager, GameObjectConversionSystem conversionSystem)
        {
            MegaGradientData data = new MegaGradientData(dstManager);

            data.blendMode      = editorGradient.blendMode;
            data.randomizeColor = editorGradient.randomizeColor;
            data.keys.GetBuffer(dstManager);
            editorGradient.hide = true;
            for (int i = 0; i < editorGradient.NumKeys; i++)
            {
                if (i < data.NumKeys)
                {
                    data.keys.buffer[i] = new ColorKeyDataBufferElement {
                        Value = ColorKeyData.ColorKeyToColorKeyData(editorGradient.GetKey(i))
                    }
                }
                ;
                else
                {
                    data.keys.buffer.Add(new ColorKeyDataBufferElement {
                        Value = ColorKeyData.ColorKeyToColorKeyData(editorGradient.GetKey(i))
                    });
                }
            }
            dstManager.AddComponentData(entity, data);
        }
        private int FinishAddition(float3 color, float time)
        {
            ColorKeyData newKeys = new ColorKeyData(color, time);

            for (int i = 0; i < keys.buffer.Length; i++)
            {
                if (newKeys.Time < keys.buffer[i].Value.Time)
                {
                    keys.buffer.Insert(i, new ColorKeyDataBufferElement {
                        Value = newKeys
                    });
                    return(i);
                }
            }
            keys.buffer.Add(new ColorKeyDataBufferElement {
                Value = newKeys
            });
            return(keys.buffer.Length - 1);
        }