Add special TweenTo.

This commit is contained in:
Gandifil
2024-01-22 20:10:34 +03:00
parent f961461a67
commit a2e3aacb90
+17 -1
View File
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using Microsoft.Xna.Framework;
namespace MonoGame.Extended.Tweening
{
@@ -26,6 +27,21 @@ namespace MonoGame.Extended.Tweening
public Tween<TMember> TweenTo<TTarget, TMember>(TTarget target, Expression<Func<TTarget, TMember>> expression, TMember toValue, float duration, float delay = 0f)
where TTarget : class
where TMember : struct
{
switch (toValue)
{
case Color toValueColor:
return (Tween<TMember>)(object)TweenTo<TTarget, Color, ColorTween>(target, expression as Expression<Func<TTarget, Color>>, toValueColor, duration, delay);
default:
return TweenTo<TTarget, TMember, LinearTween<TMember>>(target, expression, toValue, duration, delay);
}
}
public Tween<TMember> TweenTo<TTarget, TMember, TTween>(TTarget target, Expression<Func<TTarget, TMember>> expression, TMember toValue, float duration, float delay = 0f)
where TTarget : class
where TMember : struct
where TTween : Tween<TMember>
{
var memberExpression = (MemberExpression)expression.Body;
var memberInfo = memberExpression.Member;
@@ -35,7 +51,7 @@ namespace MonoGame.Extended.Tweening
activeTween?.Cancel();
AllocationCount++;
var tween = new LinearTween<TMember>(target, duration, delay, member, toValue);
var tween = (TTween)Activator.CreateInstance(typeof(TTween), target, duration, delay, member, toValue);
_activeTweens.Add(tween);
return tween;
}