DG.Tweening.Core.DOSetter <T> GenerateSetter <T>(PropertyTrack propTrack, Component comp) { PropertyInfo propInfo = propTrack.GetCachedPropertyInfo(); if (propInfo != null) { return(delegate(T x) { propInfo.SetValue(comp, x, null); }); } FieldInfo fieldInfo = propTrack.GetCachedFieldInfo(); if (fieldInfo != null) { return(delegate(T x) { fieldInfo.SetValue(comp, x); }); } return(null); }
public override void build(SequenceControl seq, Track track, int index, UnityEngine.Object target) { //allow tracks with just one key if (track.keys.Count == 1) { interp = Interpolation.None; } else if (canTween && track.canTween) { //invalid or in-between keys if (endFrame == -1) { return; } } PropertyTrack propTrack = track as PropertyTrack; PropertyTrack.ValueType valueType = propTrack.valueType; //get component and fill the cached method info Component comp = propTrack.GetTargetComp(target as GameObject); if (comp == null) { return; } string varName = propTrack.getMemberName(); int frameRate = seq.take.frameRate; //change to use setvalue track in AMSequence if (!string.IsNullOrEmpty(varName)) { propTrack.RefreshData(comp); //allow tracks with just one key if (!propTrack.canTween || !canTween) { seq.Insert(this, GenerateSingleValueTweener(seq, propTrack, frameRate, comp)); } else { //grab end frame var endKey = track.keys[index + 1] as PropertyKey; if (targetsAreEqual(valueType, endKey)) { return; } Tweener tween = null; var time = getTime(frameRate); PropertyInfo propInfo = propTrack.GetCachedPropertyInfo(); if (propInfo != null) { switch (valueType) { case PropertyTrack.ValueType.Integer: tween = DOTween.To(new IntPlugin(), () => System.Convert.ToInt32(val), (x) => propInfo.SetValue(comp, x, null), System.Convert.ToInt32(endKey.val), time); break; case PropertyTrack.ValueType.Float: tween = DOTween.To(new FloatPlugin(), () => System.Convert.ToSingle(val), (x) => propInfo.SetValue(comp, x, null), System.Convert.ToSingle(endKey.val), time); break; case PropertyTrack.ValueType.Double: tween = DOTween.To(new DoublePlugin(), () => val, (x) => propInfo.SetValue(comp, x, null), endKey.val, time); break; case PropertyTrack.ValueType.Long: tween = DOTween.To(new LongPlugin(), () => System.Convert.ToInt64(val), (x) => propInfo.SetValue(comp, x, null), System.Convert.ToInt64(endKey.val), time); break; case PropertyTrack.ValueType.Vector2: tween = DOTween.To(TweenPluginFactory.CreateVector2(), () => vect2, (x) => propInfo.SetValue(comp, x, null), endKey.vect2, time); break; case PropertyTrack.ValueType.Vector3: tween = DOTween.To(TweenPluginFactory.CreateVector3(), () => vect3, (x) => propInfo.SetValue(comp, x, null), endKey.vect3, time); break; case PropertyTrack.ValueType.Color: tween = DOTween.To(TweenPluginFactory.CreateColor(), () => color, (x) => propInfo.SetValue(comp, x, null), endKey.color, time); break; case PropertyTrack.ValueType.Rect: tween = DOTween.To(new RectPlugin(), () => rect, (x) => propInfo.SetValue(comp, x, null), endKey.rect, time); break; case PropertyTrack.ValueType.Vector4: tween = DOTween.To(TweenPluginFactory.CreateVector4(), () => vect4, (x) => propInfo.SetValue(comp, x, null), endKey.vect4, time); break; case PropertyTrack.ValueType.Quaternion: tween = DOTween.To(new PureQuaternionPlugin(), () => quat, (x) => propInfo.SetValue(comp, x, null), endKey.quat, time); break; } } else { FieldInfo fieldInfo = propTrack.GetCachedFieldInfo(); if (fieldInfo != null) { switch (valueType) { case PropertyTrack.ValueType.Integer: tween = DOTween.To(new IntPlugin(), () => System.Convert.ToInt32(val), (x) => fieldInfo.SetValue(comp, x), System.Convert.ToInt32(endKey.val), time); break; case PropertyTrack.ValueType.Float: tween = DOTween.To(new FloatPlugin(), () => System.Convert.ToSingle(val), (x) => fieldInfo.SetValue(comp, x), System.Convert.ToSingle(endKey.val), time); break; case PropertyTrack.ValueType.Double: tween = DOTween.To(new DoublePlugin(), () => val, (x) => fieldInfo.SetValue(comp, x), endKey.val, time); break; case PropertyTrack.ValueType.Long: tween = DOTween.To(new LongPlugin(), () => System.Convert.ToInt64(val), (x) => fieldInfo.SetValue(comp, x), System.Convert.ToInt64(endKey.val), time); break; case PropertyTrack.ValueType.Vector2: tween = DOTween.To(TweenPluginFactory.CreateVector2(), () => vect2, (x) => fieldInfo.SetValue(comp, x), endKey.vect2, time); break; case PropertyTrack.ValueType.Vector3: tween = DOTween.To(TweenPluginFactory.CreateVector3(), () => vect3, (x) => fieldInfo.SetValue(comp, x), endKey.vect3, time); break; case PropertyTrack.ValueType.Color: tween = DOTween.To(TweenPluginFactory.CreateColor(), () => color, (x) => fieldInfo.SetValue(comp, x), endKey.color, time); break; case PropertyTrack.ValueType.Rect: tween = DOTween.To(new RectPlugin(), () => (Rect)fieldInfo.GetValue(comp), (x) => fieldInfo.SetValue(comp, x), endKey.rect, time); break; case PropertyTrack.ValueType.Vector4: tween = DOTween.To(TweenPluginFactory.CreateVector4(), () => vect4, (x) => fieldInfo.SetValue(comp, x), endKey.vect4, time); break; case PropertyTrack.ValueType.Quaternion: tween = DOTween.To(new PureQuaternionPlugin(), () => quat, (x) => fieldInfo.SetValue(comp, x), endKey.quat, time); break; } } } if (tween != null) { if (hasCustomEase()) { tween.SetEase(easeCurve); } else { tween.SetEase((Ease)easeType, amplitude, period); } seq.Insert(this, tween); } } } else { Debug.LogError("Animator: No FieldInfo or PropertyInfo set."); } return; }