Пример #1
0
        public void Load(Stream stream)
        {
            var resource = new ResourceFile_GTA5_pc <GtaDrawable>();

            resource.Load(stream);

            drawable = resource.ResourceData;
        }
Пример #2
0
        /// <summary>
        /// Loads the texture dictionary from a file.
        /// </summary>
        public void Load(string fileName)
        {
            var resource = new ResourceFile_GTA5_pc <GtaDrawable>();

            resource.Load(fileName);

            drawable = resource.ResourceData;
        }
Пример #3
0
        public static JObject Deamon_GetDrawableJSON(GtaDrawable drawable, string drawablePath)
        {
            Console.WriteLine("Requested drawable : " + drawable.Name.Value);

            var txds = Deamon_LoadExternalTextures(drawablePath);

            var data = new JObject()
            {
                ["shaderGroup"] = new JObject()
                {
                    ["shaders"]  = new JArray(),
                    ["textures"] = new JArray()
                },
                ["models"] = new JObject()
                {
                    ["high"]    = new JArray(),
                    ["medium"]  = new JArray(),
                    ["low"]     = new JArray(),
                    ["verylow"] = new JArray(),
                    ["x"]       = new JArray(),
                }
            };

            var jShaders  = (JArray)data["shaderGroup"]["shaders"];
            var jTextures = (JArray)data["shaderGroup"]["textures"];

            for (int i = 0; i < drawable.ShaderGroup.Shaders.Count; i++)
            {
                var shader = drawable.ShaderGroup.Shaders[i];

                var jShader = new JObject()
                {
                    ["textures"] = new JObject()
                };

                for (int j = 0; j < shader.ParametersList.Parameters.Count; j++)
                {
                    var param = shader.ParametersList.Parameters[j];

                    if (param.Data is TextureDX11)
                    {
                        var tx     = param.Data as TextureDX11;
                        var txName = tx.Name.Value.ToLowerInvariant();

                        switch (param.Unknown_1h)
                        {
                        case 0: jShader["textures"]["diffuse"] = txName; break;

                        case 2: jShader["textures"]["specular"] = txName; break;

                        case 3: jShader["textures"]["bump"] = txName; break;
                        }
                    }
                    else if (param.Data is Texture)
                    {
                        var txName = (param.Data as Texture).Name.Value.ToLowerInvariant();

                        for (int k = 0; k < txds.Length; k++)
                        {
                            var txd = txds[k];

                            for (int l = 0; l < txd.TextureDictionary.Textures.Entries.Count; l++)
                            {
                                var tx      = txd.TextureDictionary.Textures.Entries[l];
                                var txName2 = tx.Name.Value.ToLowerInvariant();

                                if (txName == txName2)
                                {
                                    switch (param.Unknown_1h)
                                    {
                                    case 0: jShader["textures"]["diffuse"] = txName; break;

                                    case 2: jShader["textures"]["specular"] = txName; break;

                                    case 3: jShader["textures"]["bump"] = txName; break;
                                    }

                                    break;
                                }
                            }
                        }
                    }
                }

                jShaders.Add(jShader);
            }

            for (int i = 0; i < txds.Length; i++)
            {
                var txd = txds[i];

                for (int j = 0; j < txd.TextureDictionary.Textures.Entries.Count; j++)
                {
                    var tx        = txd.TextureDictionary.Textures.Entries[j];
                    var txWrapper = new TextureWrapper_GTA5_pc(tx);
                    var txName    = tx.Name.Value.ToLowerInvariant();
                    var path      = Path.GetTempPath() + "\\gtautil_texture_" + txName + ".dds";

                    for (int m = 0; m < jShaders.Count; m++)
                    {
                        var jShader = (JObject)jShaders[m];

                        if ((string)jShader["textures"]["diffuse"] == txName || (string)jShader["textures"]["specular"] == txName || (string)jShader["textures"]["bump"] == txName)
                        {
                            Console.WriteLine("Reusing external texture " + txName);

                            DDSIO.SaveTextureData(txWrapper, path);

                            Utils.Hash(txName);

                            var jTx        = new JObject();
                            var txNameHash = Jenkins.Hash(txName);

                            jTx["hash"]   = txNameHash;
                            jTx["name"]   = txName;
                            jTx["path"]   = path;
                            jTx["width"]  = tx.Width;
                            jTx["height"] = tx.Height;

                            jTextures.Add(jTx);
                        }
                    }
                }
            }

            for (int i = 0; i < drawable.ShaderGroup.TextureDictionary.Textures.Entries.Count; i++)
            {
                var tx        = drawable.ShaderGroup.TextureDictionary.Textures.Entries[i];
                var txWrapper = new TextureWrapper_GTA5_pc(tx);
                var txName    = tx.Name.Value.ToLowerInvariant();
                var path      = Path.GetTempPath() + "\\gtautil_texture_" + txName + ".dds";

                DDSIO.SaveTextureData(txWrapper, path);

                Utils.Hash(txName);

                var jTx        = new JObject();
                var txNameHash = drawable.ShaderGroup.TextureDictionary.TextureNameHashes.Entries[i].Value;

                jTx["hash"]   = txNameHash;
                jTx["name"]   = txName;
                jTx["path"]   = path;
                jTx["width"]  = tx.Width;
                jTx["height"] = tx.Height;

                jTextures.Add(jTx);
            }

            for (int i = 0; i < drawable.DrawableModelsHigh.Entries.Count; i++)
            {
                var jModel = Deamon_GetModelData(drawable.DrawableModelsHigh?.Entries[i]);
                ((JArray)data["models"]["high"]).Add(jModel);
            }

            for (int i = 0; i < drawable.DrawableModelsMedium?.Entries.Count; i++)
            {
                var jModel = Deamon_GetModelData(drawable.DrawableModelsMedium.Entries[i]);
                ((JArray)data["models"]["medium"]).Add(jModel);
            }

            for (int i = 0; i < drawable.DrawableModelsLow?.Entries.Count; i++)
            {
                var jModel = Deamon_GetModelData(drawable.DrawableModelsLow.Entries[i]);
                ((JArray)data["models"]["low"]).Add(jModel);
            }

            for (int i = 0; i < drawable.DrawableModelsVeryLow?.Entries.Count; i++)
            {
                var jModel = Deamon_GetModelData(drawable.DrawableModelsVeryLow.Entries[i]);
                ((JArray)data["models"]["verylow"]).Add(jModel);
            }

            for (int i = 0; i < drawable.DrawableModelsX?.Entries.Count; i++)
            {
                var jModel = Deamon_GetModelData(drawable.DrawableModelsX.Entries[i]);
                ((JArray)data["models"]["x"]).Add(jModel);
            }

            return(data);
        }
 public DrawableWrapper_GTA5_pc(GtaDrawable drawable)
 {
     this.drawable = drawable;
 }