/// <summary>
        /// Gets property information for a property by name & containing class or struct name
        /// </summary>
        /// <param name="game">Game to lookup informatino from</param>
        /// <param name="propname">Name of property information to look up</param>
        /// <param name="containingClassOrStructName">Name of containing class or struct name</param>
        /// <param name="nonVanillaClassInfo">Dynamically built property info</param>
        /// <returns></returns>
        public static PropertyInfo GetPropertyInfo(MEGame game, string propname, string containingClassOrStructName, ClassInfo nonVanillaClassInfo = null)
        {
            bool         inStruct = false;
            PropertyInfo p        = null;

            switch (game)
            {
            case MEGame.ME1:
                p = ME1UnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct, nonVanillaClassInfo);
                break;

            case MEGame.ME2:
                p = ME2UnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct, nonVanillaClassInfo);
                break;

            case MEGame.ME3:
            case MEGame.UDK:
                p = ME3UnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct, nonVanillaClassInfo);
                if (p == null && game == MEGame.UDK)
                {
                    p = UDKUnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct, nonVanillaClassInfo);
                }
                break;
            }
            if (p == null)
            {
                inStruct = true;
                switch (game)
                {
                case MEGame.ME1:
                    p = ME1UnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct);
                    break;

                case MEGame.ME2:
                    p = ME2UnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct);
                    break;

                case MEGame.ME3:
                    p = ME3UnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct);
                    break;

                case MEGame.UDK:
                    p = ME3UnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct);
                    if (p == null && game == MEGame.UDK)
                    {
                        p = UDKUnrealObjectInfo.getPropertyInfo(containingClassOrStructName, propname, inStruct, nonVanillaClassInfo);
                    }
                    break;
                }
            }
            return(p);
        }
        public static PropertyInfo GetPropertyInfo(MEGame game, string propname, string typeName)
        {
            bool         inStruct = false;
            PropertyInfo p        = null;

            switch (game)
            {
            case MEGame.ME1:
                p = ME1UnrealObjectInfo.getPropertyInfo(typeName, propname, inStruct);
                break;

            case MEGame.ME2:
                p = ME2UnrealObjectInfo.getPropertyInfo(typeName, propname, inStruct);
                break;

            case MEGame.ME3:
                p = ME3UnrealObjectInfo.getPropertyInfo(typeName, propname, inStruct);
                break;
            }
            if (p == null)
            {
                inStruct = true;
                switch (game)
                {
                case MEGame.ME1:
                    p = ME1UnrealObjectInfo.getPropertyInfo(typeName, propname, inStruct);
                    break;

                case MEGame.ME2:
                    p = ME2UnrealObjectInfo.getPropertyInfo(typeName, propname, inStruct);
                    break;

                case MEGame.ME3:
                    p = ME3UnrealObjectInfo.getPropertyInfo(typeName, propname, inStruct);
                    break;
                }
            }
            return(p);
        }