Ejemplo n.º 1
0
        public ReadOnlyCollection <Message> Get(
            MessageType type,
            out int totalCount,
            uint?count            = 20,
            uint?offset           = null,
            TimeSpan?timeOffset   = null,
            MessagesFilter?filter = null,
            uint?previewLength    = 0,
            long?lastMessageId    = null)
        {
            var parameters = new MessagesGetParams
            {
                Out           = type,
                Offset        = offset,
                Filters       = filter,
                PreviewLength = previewLength,
                LastMessageId = lastMessageId
            };

            var response = _vk.Call("messages.get", parameters);

            totalCount = response["count"];

            return(Get(parameters).Messages);
        }
Ejemplo n.º 2
0
        public ReadOnlyCollection <Message> Get(
            MessageType type,
            out int totalCount,
            int?count             = null,
            int?offset            = null,
            DateTime?timeOffset   = null,
            MessagesFilter?filter = null,
            int?previewLength     = null,
            long?lastMessageId    = null)
        {
            VkErrors.ThrowIfNumberIsNegative(() => count);
            VkErrors.ThrowIfNumberIsNegative(() => offset);
            VkErrors.ThrowIfNumberIsNegative(() => previewLength);
            VkErrors.ThrowIfNumberIsNegative(() => lastMessageId);

            var parameters = new VkParameters
            {
                { "out", type },
                { "offset", offset },
                { "count", count },
                { "time_offset", timeOffset },
                { "filters", filter },
                { "preview_length", previewLength },
                { "last_message_id", lastMessageId }
            };

            VkResponse response = _vk.Call("messages.get", parameters);

            totalCount = response["count"];

            VkResponseArray items = response["items"];

            return(items.ToReadOnlyCollectionOf <Message>(item => item));
        }
Ejemplo n.º 3
0
        public ReadOnlyCollection <Message> Get(
            MessageType type,
            out int totalCount,
            uint?count            = 20,
            uint?offset           = null,
            TimeSpan?timeOffset   = null,
            MessagesFilter?filter = null,
            uint?previewLength    = 0,
            ulong?lastMessageId   = null)
        {
            var parameters = new VkParameters
            {
                { "out", type },
                { "offset", offset },
                { "filters", filter },
                { "preview_length", previewLength },
                { "last_message_id", lastMessageId }
            };

            if (count <= 200)
            {
                parameters.Add("count", count);
            }
            if (timeOffset.HasValue)
            {
                parameters.Add("time_offset", timeOffset.Value.TotalSeconds);
            }
            VkResponse response = _vk.Call("messages.get", parameters);

            totalCount = response["count"];

            return(response["items"].ToReadOnlyCollectionOf <Message>(item => item));
        }
        public RawSceneObjectsList LoadScene()
        {
            using (Logger.EnterTimingStage("Loading all data from GTA"))
            {
                MessagesFilter?oldMessagesFilter = null;
                if (!Config.Instance.Loading.DetailedLogOutput)
                {
                    oldMessagesFilter             = Log.Instance.MessagesToOutput;
                    Log.Instance.MessagesToOutput = MessagesFilter.Warning | MessagesFilter.Error;
                }
                try
                {
                    string mainImgPath          = Config.Instance.GTAFolderPath + "models/gta3.img";
                    var    loadedArchiveEntries = LoadMainImgArchive(mainImgPath);
                    foreach (var item in loadedArchiveEntries)
                    {
                        loadedModels[item.Name.Substring(0, item.Name.Length - 4)] = new ModelEntry(item); // берём название модели без расширения .dff
                    }
                    LoadDatFile("data/default.dat");
                    LoadDatFile(GetVersionSpecificDatFile(gtaVersion));

                    var sceneLowDetailed  = new List <RawSceneObject>();
                    var sceneHighDetailed = new List <RawSceneObject>();
                    int missedIDEs        = 0;

                    PreprocessIpls();

                    int shadowMinIdx = int.MaxValue;

                    foreach (var obj in objPlacements)
                    {
                        bool lowDetailedObj = obj.Name.StartsWith("lod");

                        string textureFolder = null;
                        var    modelEntry    = loadedModels[obj.Name];

                        if (modelEntry.Model == null)
                        {
                            if (objDefinitions.ContainsKey(obj.Id))
                            {
                                textureFolder = objDefinitions[obj.Id].TextureFolder;
                            }
                            else
                            {
                                ++missedIDEs;
                            }

                            var modelData = new DffLoader(modelEntry.FileProxy.GetData(), modelEntry.FileProxy.Name, textureFolder).Load();

                            // ignore object that has no texture coordinates
                            bool no_texture_coords = false;
                            foreach (var mesh in modelData.Meshes)
                            {
                                if (mesh.TextureCoords == null)
                                {
                                    no_texture_coords = true;
                                    break;
                                }
                            }
                            if (no_texture_coords)
                            {
                                continue;
                            }

                            modelEntry.Model = modelData;
                        }

                        // нам не нужны модели без значимой геометрии
                        if (modelEntry.Model.Meshes.Count == 0)
                        {
                            continue;
                        }

                        Matrix matrix = Matrix.CreateScale(obj.Scale) * Matrix.CreateFromQuaternion(obj.Rotation) * Matrix.CreateTranslation(obj.Position);

                        var objToAdd = new RawSceneObject(modelEntry.Model, matrix);
                        if (lowDetailedObj)
                        {
                            sceneLowDetailed.Add(objToAdd);
                        }
                        else
                        {
                            sceneHighDetailed.Add(objToAdd);
                            if (shadowMinIdx == int.MaxValue && isShadow(obj))
                            {
                                shadowMinIdx = sceneHighDetailed.Count - 1;
                            }
                        }
                    }

                    if (missedIDEs != 0)
                    {
                        Logger.Print(String.Format("Missed IDE(s): {0}", missedIDEs), MessageType.Warning);
                    }
                    else
                    {
                        Logger.Print("No IDE was missed!");
                    }

                    if (TexturesStorage.Instance.MissedTextures != 0)
                    {
                        Logger.Print(String.Format("Missed textures(s): {0}", TexturesStorage.Instance.MissedTextures), MessageType.Warning);
                    }
                    else
                    {
                        Logger.Print("No texture was missed!");
                    }

                    if (oldMessagesFilter != null)
                    {
                        Log.Instance.MessagesToOutput = oldMessagesFilter.Value;
                    }

                    Logger.Print("Scene loaded!");
                    Logger.PrintStatistic();
                    Logger.Print(String.Format("Objects located on scene: {0} high-detailed, {1} low-detailed", sceneHighDetailed.Count, sceneLowDetailed.Count));
                    Logger.Flush();

                    var result = new RawSceneObjectsList(sceneHighDetailed, sceneLowDetailed);
                    result.ShadowsStartIdx = shadowMinIdx;
                    return(result);
                }
                catch (Exception er)
                {
                    Logger.Print("Failed to load scene! " + er, MessageType.Error);
                    Logger.PrintStatistic();
                    throw;
                }
                finally
                {
                    if (oldMessagesFilter != null)
                    {
                        Log.Instance.MessagesToOutput = oldMessagesFilter.Value;
                    }
                }
            }
        }