Пример #1
0
        public bool targetsAreEqual(AMMaterialTrack.ValueType valueType, AMMaterialKey nextKey)
        {
            if (nextKey)
            {
                if (valueType == AMMaterialTrack.ValueType.Float || valueType == AMMaterialTrack.ValueType.Range)
                {
                    return(val == nextKey.val);
                }
                if (valueType == AMMaterialTrack.ValueType.Vector)
                {
                    return(vector == nextKey.vector);
                }
                if (valueType == AMMaterialTrack.ValueType.Color)
                {
                    return(color == nextKey.color);
                }
                if (valueType == AMMaterialTrack.ValueType.TexOfs)
                {
                    return(texOfs == nextKey.texOfs);
                }
                if (valueType == AMMaterialTrack.ValueType.TexScale)
                {
                    return(texScale == nextKey.texScale);
                }
            }

            return(true);
        }
Пример #2
0
        public override void updateCache(AMITarget target)
        {
            base.updateCache(target);

            for (int i = 0; i < keys.Count; i++)
            {
                AMMaterialKey key = keys[i] as AMMaterialKey;

                if (key.version > 0 && key.version != version)
                {
                    //TODO: ...
                }

                key.version = version;

                if (keys.Count > (i + 1))
                {
                    key.endFrame = keys[i + 1].frame;
                }
                else
                {
                    if (!canTween || (i > 0 && !keys[i - 1].canTween))
                    {
                        key.interp = (int)AMKey.Interpolation.None;
                    }

                    key.endFrame = -1;
                }
            }
        }
Пример #3
0
        public override void CopyTo(AMKey key)
        {
            base.CopyTo(key);

            AMMaterialKey a = key as AMMaterialKey;

            a.texture = texture;
            a._val4   = _val4;
        }
Пример #4
0
        public string getValueString(AMMaterialTrack.ValueType valueType, AMMaterialKey nextKey, bool brief)
        {
            System.Text.StringBuilder s = new System.Text.StringBuilder();

            switch (valueType)
            {
            case AMMaterialTrack.ValueType.Float:
            case AMMaterialTrack.ValueType.Range:
                s.Append(formatNumeric(val));
                if (!brief && nextKey)
                {
                    s.Append(" -> "); s.Append(formatNumeric(nextKey.val));
                }
                break;

            case AMMaterialTrack.ValueType.Vector:
                s.Append(_val4.ToString());
                if (!brief && nextKey)
                {
                    s.Append(" -> "); s.Append(nextKey._val4.ToString());
                }
                break;

            case AMMaterialTrack.ValueType.Color:
                s.Append(color.ToString());
                if (!brief && nextKey)
                {
                    s.Append(" -> "); s.Append(nextKey.color.ToString());
                }
                break;

            case AMMaterialTrack.ValueType.TexEnv:
                s.Append(texture ? texture.name : "None");
                break;

            case AMMaterialTrack.ValueType.TexOfs:
                s.Append(texOfs.ToString());
                if (!brief && nextKey)
                {
                    s.Append(" -> "); s.Append(nextKey.texOfs.ToString());
                }
                break;

            case AMMaterialTrack.ValueType.TexScale:
                s.Append(texScale.ToString());
                if (!brief && nextKey)
                {
                    s.Append(" -> "); s.Append(nextKey.texScale.ToString());
                }
                break;
            }

            return(s.ToString());
        }
Пример #5
0
        public override void CopyTo(AMKey key)
        {
            AMMaterialKey a = key as AMMaterialKey;

            a.enabled = false;

            a.frame = frame;

            a.texture = texture;
            a._val4   = _val4;

            a.easeType   = easeType;
            a.customEase = new List <float>(customEase);
        }
Пример #6
0
        public static void ApplyValueLerp(AMMaterialTrack.ValueType valueType, string prop, int propId, Material mat, AMMaterialKey fromKey, AMMaterialKey toKey, float t)
        {
            switch (valueType)
            {
            case AMMaterialTrack.ValueType.Float:
            case AMMaterialTrack.ValueType.Range:
                mat.SetFloat(propId, Mathf.Lerp(fromKey.val, toKey.val, t));
                break;

            case AMMaterialTrack.ValueType.Vector:
                mat.SetVector(propId, Vector4.Lerp(fromKey.vector, toKey.vector, t));
                break;

            case AMMaterialTrack.ValueType.Color:
                mat.SetColor(propId, Color.Lerp(fromKey.color, toKey.color, t));
                break;

            case AMMaterialTrack.ValueType.TexOfs:
                mat.SetTextureOffset(prop, Vector2.Lerp(fromKey.texOfs, toKey.texOfs, t));
                break;

            case AMMaterialTrack.ValueType.TexScale:
                mat.SetTextureScale(prop, Vector2.Lerp(fromKey.texScale, toKey.texScale, t));
                break;
            }
        }
Пример #7
0
        public override void build(AMSequence seq, AMTrack track, int index, UnityEngine.Object target)
        {
            AMMaterialTrack matTrack = track as AMMaterialTrack;

            AMMaterialTrack.ValueType propType = matTrack.propertyType;

            Material matInst = matTrack.materialInstance;

            string prop   = matTrack.property;
            int    propId = Shader.PropertyToID(prop);

            int frameRate = seq.take.frameRate;

            Tweener tween = null;

            int           keyCount   = track.keys.Count;
            AMMaterialKey endKey     = index + 1 < keyCount ? track.keys[index + 1] as AMMaterialKey : null;
            float         frameCount = endKey != null ? endKey.frame - frame + 1 : 1f;

            switch (propType)
            {
            case AMMaterialTrack.ValueType.Float:
            case AMMaterialTrack.ValueType.Range:
                if (!canTween || keyCount == 1)     //allow one key
                {
                    var setTween = DOTween.To(new AMPlugValueSet <float>(), () => val, (x) => matInst.SetFloat(propId, x), val, frameCount / frameRate);
                    setTween.plugOptions.SetSequence(seq);
                    seq.Insert(this, setTween);
                }
                else
                {
                    if (targetsAreEqual(propType, endKey))
                    {
                        return;
                    }

                    tween = DOTween.To(new FloatPlugin(), () => matInst.GetFloat(propId), (x) => matInst.SetFloat(propId, x), endKey.val, getTime(frameRate));
                }
                break;

            case AMMaterialTrack.ValueType.Vector:
                if (!canTween || keyCount == 1)     //allow one key
                {
                    var setTween = DOTween.To(new AMPlugValueSet <Vector4>(), () => vector, (x) => matInst.SetVector(propId, x), vector, frameCount / frameRate);
                    setTween.plugOptions.SetSequence(seq);
                    seq.Insert(this, setTween);
                }
                else
                {
                    if (targetsAreEqual(propType, endKey))
                    {
                        return;
                    }

                    tween = DOTween.To(AMPluginFactory.CreateVector4(), () => matInst.GetVector(propId), (x) => matInst.SetVector(propId, x), endKey.vector, getTime(frameRate));
                }
                break;

            case AMMaterialTrack.ValueType.Color:
                if (!canTween || keyCount == 1)     //allow one key
                {
                    var val      = color;
                    var setTween = DOTween.To(new AMPlugValueSet <Color>(), () => val, (x) => matInst.SetColor(propId, x), val, frameCount / frameRate);
                    setTween.plugOptions.SetSequence(seq);
                    seq.Insert(this, setTween);
                }
                else
                {
                    if (targetsAreEqual(propType, endKey))
                    {
                        return;
                    }

                    tween = DOTween.To(AMPluginFactory.CreateColor(), () => matInst.GetColor(propId), (x) => matInst.SetColor(propId, x), endKey.color, getTime(frameRate));
                }
                break;

            case AMMaterialTrack.ValueType.TexOfs:
                if (!canTween || keyCount == 1)     //allow one key
                {
                    var val      = texOfs;
                    var setTween = DOTween.To(new AMPlugValueSet <Vector2>(), () => val, (x) => matInst.SetTextureOffset(prop, x), val, frameCount / frameRate);
                    setTween.plugOptions.SetSequence(seq);
                    seq.Insert(this, setTween);
                }
                else
                {
                    if (targetsAreEqual(propType, endKey))
                    {
                        return;
                    }

                    tween = DOTween.To(AMPluginFactory.CreateVector2(), () => matInst.GetTextureOffset(prop), (x) => matInst.SetTextureOffset(prop, x), endKey.texOfs, getTime(frameRate));
                }
                break;

            case AMMaterialTrack.ValueType.TexScale:
                if (!canTween || keyCount == 1)     //allow one key
                {
                    var val      = texScale;
                    var setTween = DOTween.To(new AMPlugValueSet <Vector2>(), () => val, (x) => matInst.SetTextureScale(prop, x), val, frameCount / frameRate);
                    setTween.plugOptions.SetSequence(seq);
                    seq.Insert(this, setTween);
                }
                else
                {
                    if (targetsAreEqual(propType, endKey))
                    {
                        return;
                    }

                    tween = DOTween.To(AMPluginFactory.CreateVector2(), () => matInst.GetTextureScale(prop), (x) => matInst.SetTextureScale(prop, x), endKey.texScale, getTime(frameRate));
                }
                break;

            case AMMaterialTrack.ValueType.TexEnv:
                var texEnvTween = DOTween.To(new AMPlugValueSet <Texture>(), () => texture, (x) => matInst.SetTexture(propId, x), texture, frameCount / frameRate);
                texEnvTween.plugOptions.SetSequence(seq);
                seq.Insert(this, texEnvTween);
                break;
            }

            if (tween != null)
            {
                if (hasCustomEase())
                {
                    tween.SetEase(easeCurve);
                }
                else
                {
                    tween.SetEase((Ease)easeType, amplitude, period);
                }

                seq.Insert(this, tween);
            }
        }
Пример #8
0
        public override void previewFrame(AMITarget target, float frame, int frameRate, bool play, float playSpeed)
        {
            if (keys == null || keys.Count <= 0)
            {
                return;
            }

            //TODO: figure out how to preview frame during edit
            if (Application.isPlaying)
            {
                if (!mIsInit)
                {
                    Init(target);
                }

                // if before or equal to first frame, or is the only frame
                AMMaterialKey firstKey = keys[0] as AMMaterialKey;
                if (firstKey.endFrame == -1 || (frame <= (float)firstKey.frame && !firstKey.canTween))
                {
                    firstKey.ApplyValue(_propertyType, _property, mPropId, mMatInstance);
                    return;
                }

                // if lies on property action
                for (int i = 0; i < keys.Count; i++)
                {
                    AMMaterialKey key     = keys[i] as AMMaterialKey;
                    AMMaterialKey keyNext = i + 1 < keys.Count ? keys[i + 1] as AMMaterialKey : null;

                    if (frame >= (float)key.endFrame && keyNext != null && (!keyNext.canTween || keyNext.endFrame != -1))
                    {
                        continue;
                    }
                    // if no ease
                    if (!key.canTween || keyNext == null)
                    {
                        key.ApplyValue(_propertyType, _property, mPropId, mMatInstance);
                        return;
                    }
                    // else find value using easing function

                    float numFrames = (float)key.getNumberOfFrames(frameRate);

                    float framePositionInAction = Mathf.Clamp(frame - (float)key.frame, 0f, numFrames);

                    float t;

                    if (key.hasCustomEase())
                    {
                        t = Utility.EaseCustom(0.0f, 1.0f, framePositionInAction / key.getNumberOfFrames(frameRate), key.easeCurve);
                    }
                    else
                    {
                        var ease = Utility.GetEasingFunction((Ease)key.easeType);
                        t = ease(framePositionInAction, key.getNumberOfFrames(frameRate), key.amplitude, key.period);
                    }

                    AMMaterialKey.ApplyValueLerp(_propertyType, _property, mPropId, mMatInstance, key, keyNext, t);
                    return;
                }
            }
        }
Пример #9
0
        public AMMaterialKey addKey(AMITarget target, OnAddKey addCall, int _frame)
        {
            Material mat = GetMaterial(target);
            //mat.get
            //

            AMMaterialKey k = null;

            foreach (AMMaterialKey key in keys)
            {
                // if key exists on frame, update key
                if (key.frame == _frame)
                {
                    k = key;
                }
            }

            if (k == null)
            {
                k        = addCall(gameObject, typeof(AMMaterialKey)) as AMMaterialKey;
                k.frame  = _frame;
                k.interp = (int)AMKey.Interpolation.Linear;
                // add a new key
                keys.Add(k);
            }

            //set value
            if (!string.IsNullOrEmpty(property))
            {
                switch (_propertyType)
                {
                case ValueType.Float:
                case ValueType.Range:
                    k.val = mat.GetFloat(property);
                    break;

                case ValueType.Vector:
                    k.vector = mat.GetVector(property);
                    break;

                case ValueType.Color:
                    k.color = mat.GetColor(property);
                    break;

                case ValueType.TexEnv:
                    k.texture = mat.GetTexture(property);
                    break;

                case ValueType.TexOfs:
                    k.texOfs = mat.GetTextureOffset(property);
                    break;

                case ValueType.TexScale:
                    k.texScale = mat.GetTextureScale(property);
                    break;
                }
            }
            else
            {
                Debug.LogWarning("Property is not set in: " + name);
            }

            updateCache(target);

            return(k);
        }