/// <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); } }
/// <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); } } }
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); }