public void LerpView(string viewName) { currentViewname = viewName; string n = viewName.ToLower(); switch (n) { case "user": LerpRotation(userRotation); LerpDistance(userDistance); LerpTarget(userTarget); return; default: for (int i = 0; i < knownCameraViews.Count; ++i) { if (knownCameraViews[i].name.ToLower().Equals(n)) { //Debug.Log("doing " + n + " "+Show.Stringify(knownCameraViews[i])); LerpTo(knownCameraViews[i]); return; } } break; } ReflectionParseExtension.TryConvertEnumWildcard(typeof(Direction3D), viewName, out object v); if (v != null) { LerpDirection((Direction3D)v); return; } Debug.LogWarning($"unkown view name \"{viewName}\""); }
public static bool TryConvert(object value, out object desiredValue, Type typeToGet) { //public static bool TryConvert(ref object value, Type typeToGet) { // if (value != null && value.GetType() == typeToGet) return true; if (value != null && value.GetType() == typeToGet) { desiredValue = value; return(true); } desiredValue = default; try { if (typeToGet.IsEnum) { string str = value as string; if (str != null && ReflectionParseExtension.TryConvertEnumWildcard(typeToGet, str, out desiredValue)) { return(true); } return(false); } switch (Type.GetTypeCode(typeToGet)) { case TypeCode.Boolean: case TypeCode.SByte: case TypeCode.Byte: case TypeCode.Char: case TypeCode.Int16: case TypeCode.UInt16: case TypeCode.Int32: case TypeCode.UInt32: case TypeCode.Single: case TypeCode.Int64: case TypeCode.UInt64: case TypeCode.Double: case TypeCode.String: desiredValue = System.Convert.ChangeType(value, typeToGet); break; default: if (value is string s && Deserialization.TryGetValue(typeToGet, out TryParseFunction f)) { return(f.Invoke(s, out desiredValue)); } if (TryConvertIList(value, out desiredValue, typeToGet)) { return(true); } return(false); } } catch { return(false); } return(true); }