Ejemplo n.º 1
0
 /// <summary>
 /// Dumps the keys in this collection, and then copies keys to match the entire state of the passed in object.
 /// </summary>
 /// <param name="obj"></param>
 public void CopyFrom(object obj)
 {
     _table.Clear();
     foreach (var m in DynamicUtil.GetMembers(obj, false, System.Reflection.MemberTypes.Property | System.Reflection.MemberTypes.Field))
     {
         _table[m.Name] = DynamicUtil.GetValue(obj, m);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Iterates over keys in this collection and attempts to update the values associated with that
        /// key to the value pulled from a property on object.
        /// </summary>
        /// <param name="obj"></param>
        public void CopyFrom(object obj)
        {
            using (var lst = TempCollection.GetList <string>())
            {
                var e = _table.Keys.GetEnumerator();
                while (e.MoveNext())
                {
                    lst.Add(e.Current);
                }

                var e2 = lst.GetEnumerator();
                while (e2.MoveNext())
                {
                    _table[e2.Current] = DynamicUtil.GetValue(obj, e2.Current);
                }
            }
        }
Ejemplo n.º 3
0
        private static object ReduceSubObject(object obj, string sprop, out string lastProp)
        {
            if (obj == null)
            {
                lastProp = null;
                return(null);
            }

            var arr = sprop.Split('.');

            lastProp = arr[arr.Length - 1];
            for (int i = 0; i < arr.Length - 1; i++)
            {
                obj = DynamicUtil.GetValue(obj, arr[i]);
                if (obj == null)
                {
                    return(null);
                }
            }

            return(obj);
        }
        private double EvalVariable()
        {
            _strBuilder.Length = 0;
            int i = _reader.Read();

            if (i < 0)
            {
                return(ConvertUtil.ToDouble(_x));
            }

            _current = (char)i;
            if (_current == '.')
            {
                //access x
                for (i = _reader.Read(); i >= 0; i = _reader.Read())
                {
                    _current = (char)i;

                    if (char.IsLetterOrDigit(_current) || _current == '_')
                    {
                        _strBuilder.Append(_current);
                    }
                    else if (char.IsWhiteSpace(_current) || IsArithmeticSymbol(_current) || _current == ')')
                    {
                        break;
                    }
                    else
                    {
                        throw new System.InvalidOperationException("Failed to parse the command.");
                    }
                }

                var str = _strBuilder.ToString();
                _strBuilder.Length = 0;
                return(ConvertUtil.ToDouble(DynamicUtil.GetValue(_x, str)));
            }
            else if (char.IsLetterOrDigit(_current) || _current == '_' || _current == '-')
            {
                //global
                _strBuilder.Append(char.ToLower(_current));

                for (i = _reader.Read(); i >= 0; i = _reader.Read())
                {
                    _current = (char)i;

                    if (char.IsLetterOrDigit(_current) || _current == '_')
                    {
                        _strBuilder.Append(char.ToLower(_current));
                    }
                    else if (char.IsWhiteSpace(_current) || IsArithmeticSymbol(_current) || _current == ')')
                    {
                        break;
                    }
                    else
                    {
                        throw new System.InvalidOperationException("Failed to parse the command.");
                    }
                }


                var str = _strBuilder.ToString();
                _strBuilder.Length = 0;

                switch (str)
                {
                case "pi":
                    return(System.Math.PI);

                case "2pi":
                    const double TWO_PI = System.Math.PI * 2d;
                    return(TWO_PI);

                case "pi_2":
                    const double PI_TWO = System.Math.PI / 2d;
                    return(PI_TWO);

                case "rad2deg":
                    const double RAD2DEG = 180d / System.Math.PI;
                    return(RAD2DEG);

                case "deg2rad":
                    const double DEG2RAD = System.Math.PI / 180d;
                    return(DEG2RAD);

                case "secsinmin":
                    return(60d);

                case "secsinhour":
                    return(3600d);

                case "secsinday":
                    return(86400d);

                case "secsinweek":
                    return(604800d);

                case "secsinyear":
                    return(31536000d);

                case "infinity":
                case "inf":
                    return(double.PositiveInfinity);

                case "-infinity":
                case "-inf":
                    return(double.NegativeInfinity);

                default:
                    return(0d);
                }
            }
            else if (char.IsWhiteSpace(_current) || IsArithmeticSymbol(_current) || _current == ')')
            {
                return(ConvertUtil.ToDouble(_x));
            }
            else
            {
                throw new System.InvalidOperationException("Failed to parse the command.");
            }
        }
        private double EvalVariable()
        {
            _strBuilder.Length = 0;
            int i = _reader.Read();

            if (i < 0)
            {
                return(ConvertUtil.ToDouble(_x));
            }

            _current = (char)i;
            if (_current == '.')
            {
                var    target = _x;
                string sprop;

                //access x
                for (i = _reader.Read(); i >= 0; i = _reader.Read())
                {
                    _current = (char)i;

                    if (char.IsLetterOrDigit(_current) || _current == '_')
                    {
                        _strBuilder.Append(_current);
                    }
                    else if (_current == '.')
                    {
                        sprop = _strBuilder.ToString();
                        _strBuilder.Length = 0;
                        target             = DynamicUtil.GetValue(target, sprop);
                    }
                    else if (char.IsWhiteSpace(_current) || IsArithmeticSymbol(_current) || _current == ')' || _current == ',')
                    {
                        break;
                    }
                    else
                    {
                        throw new System.InvalidOperationException("Failed to parse the command.");
                    }
                }

                sprop = _strBuilder.ToString();
                _strBuilder.Length = 0;
                return(ConvertUtil.ToDouble(DynamicUtil.GetValue(target, sprop)));
            }
            else if (_current == '(')
            {
                for (i = _reader.Read(); i >= 0; i = _reader.Read())
                {
                    _current = (char)i;

                    if (char.IsLetterOrDigit(_current) || _current == '_')
                    {
                        _strBuilder.Append(_current);
                    }
                    else if (_current == ')')
                    {
                        break;
                    }
                    else
                    {
                        throw new System.InvalidOperationException("Failed to parse the command.");
                    }
                }

                i = _reader.Read();
                if (i < 0 || (char)i != '.')
                {
                    throw new System.InvalidOperationException("Failed to parse the command.");
                }

                string stp = _strBuilder.ToString();
                _strBuilder.Length = 0;

                var    go     = GameObjectUtil.GetGameObjectFromSource(_x);
                object target = go != null?go.GetComponent(stp) : null;

                string sprop;

                //access target
                for (i = _reader.Read(); i >= 0; i = _reader.Read())
                {
                    _current = (char)i;

                    if (char.IsLetterOrDigit(_current) || _current == '_')
                    {
                        _strBuilder.Append(_current);
                    }
                    else if (_current == '.')
                    {
                        sprop = _strBuilder.ToString();
                        _strBuilder.Length = 0;
                        target             = DynamicUtil.GetValue(target, sprop);
                    }
                    else if (char.IsWhiteSpace(_current) || IsArithmeticSymbol(_current) || _current == ')' || _current == ',' || _current == ']')
                    {
                        break;
                    }
                    else
                    {
                        throw new System.InvalidOperationException("Failed to parse the command.");
                    }
                }

                sprop = _strBuilder.ToString();
                _strBuilder.Length = 0;
                return(ConvertUtil.ToDouble(DynamicUtil.GetValue(target, sprop)));
            }
            else if (char.IsLetterOrDigit(_current) || _current == '_' || _current == '-')
            {
                //global
                _strBuilder.Append(char.ToLower(_current));

                for (i = _reader.Read(); i >= 0; i = _reader.Read())
                {
                    _current = (char)i;

                    if (char.IsLetterOrDigit(_current) || _current == '_')
                    {
                        _strBuilder.Append(char.ToLower(_current));
                    }
                    else if (char.IsWhiteSpace(_current) || IsArithmeticSymbol(_current) || _current == ')' || _current == ',')
                    {
                        break;
                    }
                    else
                    {
                        throw new System.InvalidOperationException("Failed to parse the command.");
                    }
                }


                var str = _strBuilder.ToString();
                _strBuilder.Length = 0;

                switch (str)
                {
                case "pi":
                    return(System.Math.PI);

                case "2pi":
                    const double TWO_PI = System.Math.PI * 2d;
                    return(TWO_PI);

                case "pi_2":
                    const double PI_TWO = System.Math.PI / 2d;
                    return(PI_TWO);

                case "rad2deg":
                    const double RAD2DEG = 180d / System.Math.PI;
                    return(RAD2DEG);

                case "deg2rad":
                    const double DEG2RAD = System.Math.PI / 180d;
                    return(DEG2RAD);

                case "secsinmin":
                    return(60d);

                case "secsinhour":
                    return(3600d);

                case "secsinday":
                    return(86400d);

                case "secsinweek":
                    return(604800d);

                case "secsinyear":
                    return(31536000d);

                case "infinity":
                case "inf":
                    return(double.PositiveInfinity);

                case "-infinity":
                case "-inf":
                    return(double.NegativeInfinity);

                case "time":
                    return(UnityEngine.Time.time);

                case "unscaledtime":
                    return(UnityEngine.Time.unscaledTime);

                case "fixedtime":
                    return(UnityEngine.Time.fixedTime);

                case "deltatime":
                    return(UnityEngine.Time.deltaTime);

                case "fixeddeltatime":
                    return(UnityEngine.Time.fixedDeltaTime);

                default:
                    return(0d);
                }
            }
            else if (char.IsWhiteSpace(_current) || IsArithmeticSymbol(_current) || _current == ')' || _current == ',')
            {
                return(ConvertUtil.ToDouble(_x));
            }
            else
            {
                throw new System.InvalidOperationException("Failed to parse the command.");
            }
        }
        public static TweenHash TweenToToken(this TweenHash hash, com.spacepuppy.Tween.Ease ease, float dur, object token)
        {
            if (hash == null || token == null)
            {
                return(hash);
            }

            object value;

            if (token is IStateToken)
            {
                var st = token as IStateToken;
                foreach (var sname in st.GetMemberNames(false))
                {
                    value = st.GetValue(sname);
                    if (value == null)
                    {
                        continue;
                    }

                    switch (VariantReference.GetVariantType(value.GetType()))
                    {
                    case VariantType.String:
                    case VariantType.Boolean:
                    case VariantType.Integer:
                    case VariantType.Float:
                    case VariantType.Double:
                    case VariantType.Vector2:
                    case VariantType.Vector3:
                    case VariantType.Vector4:
                    case VariantType.Quaternion:
                    case VariantType.Color:
                    case VariantType.Rect:
                        hash.To(sname, ease, dur, value);
                        break;
                    }
                }
            }
            else
            {
                foreach (var sname in DynamicUtil.GetMemberNames(token, false, System.Reflection.MemberTypes.Field | System.Reflection.MemberTypes.Property))
                {
                    value = DynamicUtil.GetValue(token, sname);
                    if (value == null)
                    {
                        continue;
                    }

                    switch (VariantReference.GetVariantType(value.GetType()))
                    {
                    case VariantType.String:
                    case VariantType.Boolean:
                    case VariantType.Integer:
                    case VariantType.Float:
                    case VariantType.Double:
                    case VariantType.Vector2:
                    case VariantType.Vector3:
                    case VariantType.Vector4:
                    case VariantType.Quaternion:
                    case VariantType.Color:
                    case VariantType.Rect:
                        hash.To(sname, ease, dur, value);
                        break;
                    }
                }
            }

            return(hash);
        }