// Token: 0x060000E0 RID: 224 RVA: 0x0000AF74 File Offset: 0x00009174
        public static ACCMaterialEx Load(string file)
        {
            bool flag;

            using (BinaryReader binaryReader = new BinaryReader(FileUtilEx.Instance.GetStream(file, out flag), Encoding.UTF8))
            {
                string text = binaryReader.ReadString();
                if (flag || binaryReader.BaseStream.Position > 0L)
                {
                    if (text == FileConst.HEAD_MATE)
                    {
                        return(ACCMaterialEx.Load(binaryReader));
                    }
                    StringBuilder stringBuilder = LogUtil.Log(new object[]
                    {
                        "指定されたファイルのヘッダが不正です。",
                        text,
                        file
                    });
                    throw new ACCException(stringBuilder.ToString());
                }
            }
            ACCMaterialEx result;

            using (BinaryReader binaryReader2 = new BinaryReader(new MemoryStream(FileUtilEx.Instance.LoadInternal(file), false), Encoding.UTF8))
            {
                string text2 = binaryReader2.ReadString();
                if (!(text2 == FileConst.HEAD_MATE))
                {
                    StringBuilder stringBuilder2 = LogUtil.Log(new object[]
                    {
                        "指定されたファイルのヘッダが不正です。",
                        text2,
                        file
                    });
                    throw new ACCException(stringBuilder2.ToString());
                }
                result = ACCMaterialEx.Load(binaryReader2);
            }
            return(result);
        }
Esempio n. 2
0
        public void Init(ACCMaterial edited)
        {
            editedMat = edited;

            // ファイルからマテリアル情報をロード
            if (onlyModel)
            {
                // modelファイルからマテリアルのロード
            }
            else if (!string.IsNullOrEmpty(filename))
            {
                LogUtil.Debug("load material file", filename);
                srcMat        = ACCMaterialEx.Load(filename);
                shaderChanged = (editedMat.type != srcMat.type);
            }

            // pmat チェック
            //  透過型のみを対象とし、
            //     1. マテリアル名に対応するpmatが存在しない場合
            //     2. renderQueueが変更されている場合
            if (edited.type.isTrans)
            {
                // renderqueueがデフォルト値であれば変更不要
                if (Math.Abs(edited.renderQueue.val - 2000) < 0.01f)
                {
                    needPmat = false;
                }
                else
                {
                    needPmat = true;

                    var matName = (srcMat != null)? srcMat.name2 : edited.name;
                    var srcRq   = MaterialUtil.GetRenderQueue(matName);
                    // 既存のマテリアル名に対応するpmatが存在しない => 変更必要
                    if (srcRq < 0)
                    {
                        needPmatChange = true;
                    }
                    LogUtil.DebugF("render queue: src={0}, edited={1}", srcRq, edited.renderQueue);

                    needPmatChange |= !NumberUtil.Equals(edited.renderQueue.val, srcRq, 0.01f);
                    pmatExport      = needPmatChange;
                }
            }

            if (!shaderChanged)
            {
                // TODO modelロードでsrcMatを作成した場合は条件削除可能
                if (srcMat != null)
                {
                    hasParamChanged = editedMat.HasChanged(srcMat);
                }
            }

            editname = editedMat.material.name;
            var maid = MaidHolder.Instance.CurrentMaid;

            // テクスチャの変更フラグチェック
            foreach (var texProp in editedMat.type.texProps)
            {
                //foreach (string propName in editedMat.type1.texPropNames) {
                LogUtil.Debug("propName:", texProp.key);

                var tex          = editedMat.material.GetTexture(texProp.propId);
                var filter       = ACCTexturesView.GetFilter(maid, slotName, editedMat.material, texProp.propId);
                var colorChanged = (filter != null) && !filter.HasNotChanged();
                var fileChanged  = false;
                if (tex != null && srcMat != null)
                {
                    ACCTextureEx baseTex;
                    if (srcMat.texDic.TryGetValue(texProp.key, out baseTex))
                    {
                        fileChanged = (baseTex.editname != tex.name);
                    }
                }

                var trgtTex = new TargetTexture(colorChanged, fileChanged, tex)
                {
                    filter = filter
                };
                texDic[texProp.key] = trgtTex;
                hasTexColorChanged |= colorChanged;
                hasTexFileChanged  |= fileChanged;
            }
            LogUtil.Debug("target material initialized");
        }
Esempio n. 3
0
        // Token: 0x06000139 RID: 313 RVA: 0x0000C670 File Offset: 0x0000A870
        public void Init(ACCMaterial edited)
        {
            this.editedMat = edited;
            if (!this.onlyModel && !string.IsNullOrEmpty(this.filename))
            {
                LogUtil.Debug(new object[]
                {
                    "load material file",
                    this.filename
                });
                this.srcMat        = ACCMaterialEx.Load(this.filename);
                this.shaderChanged = (this.editedMat.type != this.srcMat.type);
            }
            if (edited.type.isTrans)
            {
                if (Math.Abs(edited.renderQueue.val - 2000f) < 0.01f)
                {
                    this.needPmat = false;
                }
                else
                {
                    this.needPmat = true;
                    string matName     = (this.srcMat != null) ? this.srcMat.name2 : edited.name;
                    float  renderQueue = MaterialUtil.GetRenderQueue(matName);
                    if (renderQueue < 0f)
                    {
                        this.needPmatChange = true;
                    }
                    LogUtil.DebugF("render queue: src={0}, edited={1}", new object[]
                    {
                        renderQueue,
                        edited.renderQueue
                    });
                    this.needPmatChange |= !NumberUtil.Equals(edited.renderQueue.val, renderQueue, 0.01f);
                    this.pmatExport      = this.needPmatChange;
                }
            }
            if (!this.shaderChanged && this.srcMat != null)
            {
                this.hasParamChanged = this.editedMat.HasChanged(this.srcMat);
            }
            this.editname = this.editedMat.material.name;
            Maid currentMaid = MaidHolder.Instance.CurrentMaid;

            foreach (ShaderPropTex shaderPropTex in this.editedMat.type.texProps)
            {
                LogUtil.Debug(new object[]
                {
                    "propName:",
                    shaderPropTex.key
                });
                Texture texture = this.editedMat.material.GetTexture(shaderPropTex.propId);
                TextureModifier.FilterParam filter = ACCTexturesView.GetFilter(currentMaid, this.slotName, this.editedMat.material, shaderPropTex.propId);
                bool         flag  = filter != null && !filter.HasNotChanged();
                bool         flag2 = false;
                ACCTextureEx acctextureEx;
                if (texture != null && this.srcMat != null && this.srcMat.texDic.TryGetValue(shaderPropTex.key, out acctextureEx))
                {
                    flag2 = (acctextureEx.editname != texture.name);
                }
                TargetTexture value = new TargetTexture(flag, flag2, texture)
                {
                    filter = filter
                };
                this.texDic[shaderPropTex.key] = value;
                this.hasTexColorChanged        = (this.hasTexColorChanged || flag);
                this.hasTexFileChanged         = (this.hasTexFileChanged || flag2);
            }
            LogUtil.Debug(new object[]
            {
                "target material initialized"
            });
        }