示例#1
0
        public void Save(ETextureParams item, string file)
        {
            using (var w = new BinaryWriter(File.OpenWrite(file)))
            {
                open_chunk(w, THM_CHUNK_TYPE);
                w.Write(0); // skip
                close_chunk(w);

                open_chunk(w, THM_CHUNK_TEXTUREPARAM);
                w.Write((int)item.fmt);
                w.Write((int)item.flags);
                w.Write(0);
                w.Write(0);
                w.Write(0);
                w.Write(0);
                w.Write(0);
                w.Write(0);
                close_chunk(w);

                open_chunk(w, THM_CHUNK_TEXTURE_TYPE);
                w.Write((int)item.type);
                close_chunk(w);

                open_chunk(w, THM_CHUNK_DETAIL_EXT);
                write_stringZ(w, item.detail_name);
                w.Write(item.detail_scale);
                close_chunk(w);

                open_chunk(w, THM_CHUNK_MATERIAL);
                w.Write((int)item.material);
                w.Write(item.material_weight);
                close_chunk(w);

                open_chunk(w, THM_CHUNK_BUMP);
                w.Write(0.0f);
                w.Write((int)item.bump_mode);
                write_stringZ(w, item.bump_name);
                close_chunk(w);

                open_chunk(w, THM_CHUNK_EXT_NORMALMAP);
                write_stringZ(w, "");
                close_chunk(w);

                open_chunk(w, THM_CHUNK_FADE_DELAY);
                w.Write((byte)0);
                close_chunk(w);
            }
        }
示例#2
0
        public ETextureParams Load(string file)
        {
            using (var r = new BinaryReader(File.OpenRead(file)))
            {
                if (!find_chunk(r, THM_CHUNK_TYPE))
                {
                    return(null);
                }

                r.ReadUInt32(); // skip

                if (!find_chunk(r, THM_CHUNK_TEXTUREPARAM))
                {
                    return(null);
                }

                ETextureParams result = new ETextureParams();

                result.fmt   = (ETFormat)r.ReadInt32();
                result.flags = (Flags)r.ReadUInt32();

                // not used at all
                uint border_color = r.ReadUInt32();
                uint fade_color   = r.ReadUInt32();
                uint fade_amount  = r.ReadUInt32();
                uint mip_filter   = r.ReadUInt32();
                uint width        = r.ReadUInt32();
                uint height       = r.ReadUInt32();
                // not used at all

                if (find_chunk(r, THM_CHUNK_TEXTURE_TYPE))
                {
                    result.type = (ETType)r.ReadUInt32();
                }

                if (find_chunk(r, THM_CHUNK_DETAIL_EXT))
                {
                    result.detail_name  = read_stringZ(r);
                    result.detail_scale = r.ReadSingle();
                }

                if (find_chunk(r, THM_CHUNK_MATERIAL))
                {
                    result.material        = (ETMaterial)r.ReadUInt32();
                    result.material_weight = r.ReadSingle();
                }

                if (find_chunk(r, THM_CHUNK_BUMP))
                {
                    float      bump_virtual_height = r.ReadSingle();
                    ETBumpMode bump_mode           = (ETBumpMode)r.ReadUInt32();
                    if (bump_mode < ETBumpMode.tbmNone)
                    {
                        bump_mode = ETBumpMode.tbmNone; //.. временно (до полного убирания Autogen)
                    }
                    result.bump_mode = bump_mode;
                    result.bump_name = read_stringZ(r);
                }

                // not used at all
                if (find_chunk(r, THM_CHUNK_EXT_NORMALMAP))
                {
                    string ext_normal_map_name = read_stringZ(r);
                }

                if (find_chunk(r, THM_CHUNK_FADE_DELAY))
                {
                    byte fade_delay = r.ReadByte();
                }
                // not used at all

                return(result);
            }
        }