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}\"");
        }
示例#2
0
        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);
        }