Пример #1
0
        internal void AddLerp(Lerper lerper, EaseTargetInfo info, object from, object to)
        {
            varHash.Add(info.PropertyName, vars.Count);
            vars.Add(info);

            start.Add(from);
            end.Add(to);

            lerpers.Add(lerper);
        }
Пример #2
0
        /// <summary>
        /// <para>Tweens a set of properties on an object.</para>
        /// <para>To tween instance properties/fields, pass the object.</para>
        /// <para>To tween static properties/fields, pass the type of the object, using typeof(ObjectType) or object.GetType().</para>
        /// </summary>
        /// <param name="target">The object or type to tween.</param>
        /// <param name="values">The values to tween to, in an anonymous type ( new { prop1 = 100, prop2 = 0} ).</param>
        /// <param name="duration">Duration of the tween in seconds.</param>
        /// <param name="delay">Delay before the tween starts, in seconds.</param>
        /// <param name="overwrite">Whether pre-existing tweens should be overwritten if this tween involves the same properties.</param>
        /// <returns>The tween created, for setting properties on.</returns>
        public Tween Tween <T>(T target, object values, float duration, float delay = 0, bool overwrite = true) where T : class
        {
            if (target == null)
            {
                throw new ArgumentNullException(nameof(target));
            }

            //	Prevent tweening on structs if you cheat by casting target as Object
            var targetType = target.GetType();

            if (targetType.IsValueType)
            {
                throw new Exception("Target of tween cannot be a struct!");
            }

            var tween = new Tween(target, duration, delay, this);

            toAdd.Add(tween);

            if (values == null) // valid in case of manual timer
            {
                return(tween);
            }

            var props = values.GetType().GetProperties();

            foreach (PropertyInfo t1 in props)
            {
                List <Tween> library;
                if (overwrite && tweens.TryGetValue(target, out library))
                {
                    foreach (Tween t in library)
                    {
                        t.Cancel(t1.Name);
                    }
                }

                var property = t1;
                var info     = new EaseTargetInfo(target, property.Name);
                var to       = new EaseTargetInfo(values, property.Name, false);
                var lerper   = CreateLerper(info.PropertyType);

                tween.AddLerp(lerper, info, info.Value, to.Value);
            }

            AddAndRemove();
            return(tween);
        }
Пример #3
0
        /// <summary>
        /// Apply target values to a starting point before tweening.
        /// </summary>
        /// <param name="values">The values to apply, in an anonymous type ( new { prop1 = 100, prop2 = 0} ).</param>
        /// <returns>A reference to this.</returns>
        public Tween From(object values)
        {
            var props = values.GetType().GetProperties();

            foreach (var property in props)
            {
                var propValue = property.GetValue(values, null);

                int index;
                if (varHash.TryGetValue(property.Name, out index))
                {
                    //	if we're already tweening this value, adjust the range
                    start[index] = propValue;
                }

                //	if we aren't tweening this value, just set it
                var easeTargetInfo = new EaseTargetInfo(Target, property.Name)
                {
                    Value = propValue
                };
            }

            return(this);
        }