Exemple #1
0
 // Token: 0x06000362 RID: 866 RVA: 0x0001E3C9 File Offset: 0x0001C5C9
 public static void Init(UIParams uiparams)
 {
     TextureModifier.uiParams = uiparams;
     if (ACCTexturesView.uiParams != null)
     {
         return;
     }
     ACCTexturesView.uiParams = uiparams;
     ACCTexturesView.uiParams.Add(ACCTexturesView.updateUI);
     ACCTexturesView.InitUIParams(uiparams);
 }
Exemple #2
0
        // Token: 0x06000370 RID: 880 RVA: 0x0001E7E0 File Offset: 0x0001C9E0
        public ACCTexturesView(Material m, int matNo)
        {
            this.material = m;
            ShaderType type = ShaderType.Resolve(m.shader.name);

            this.original = ACCTexturesView.Load(m, type);
            this.edited   = new List <ACCTexture>(this.original.Count);
            foreach (ACCTexture src in this.original)
            {
                this.edited.Add(new ACCTexture(src));
            }
            this.matNo = matNo;
        }
Exemple #3
0
        public bool SaveFiles(ACCMenu menu)
        {
            var outDir = fileUtil.GetACCDirectory(trgtMenu.editfile);

            if (!Directory.Exists(outDir))
            {
                Directory.CreateDirectory(outDir);
            }

            LogUtil.Debug("output path:", outDir);
            var filepath = Path.Combine(outDir, menu.EditFileName());

            // menu出力
            ACCMenu.WriteMenuFile(filepath, menu);

            var writeFiles = new HashSet <string>();

            // filterがあれば、適用しアイコンを変更
            var iconfilepath = Path.Combine(outDir, menu.EditIconFileName());

            writeFiles.Add(iconfilepath);
            var icontxt = settings.txtPrefixTex + iconfilepath;

            fileUtil.CopyTex(menu.icon, iconfilepath, icontxt, null);
            LogUtil.Debug("tex file:", iconfilepath);

            // model 出力 (additem)
            foreach (var pair in menu.itemFiles)
            {
                var infile = pair.Key;
                var item   = pair.Value;
                if (!item.needUpdate)
                {
                    continue;
                }
                var filename = item.EditFileName();
                if (HasAlreadyWritten(writeFiles, filename))
                {
                    continue;
                }

                var modelfilepath = Path.Combine(outDir, filename);

                // modelファイルのスロットのマテリアル/テクスチャ情報を抽出
                var slotMat = menu.slotMaterials[item.slot];
                // onlyModelでない場合はshader変更のみとしておく
                // material slotとmatNoで特定
                // texture  propName
                // 必要に応じてtex出力
                fileUtil.WriteModelFile(infile, modelfilepath, slotMat);
                LogUtil.Debug("model file:", modelfilepath);
            }

            // mate出力
            foreach (var tm in menu.slotMaterials.Values)
            {
                foreach (var trgtMat in tm.materials)
                {
                    // マテリアル変更が指定された場合 => TODO 切り替え可能とする場合:menuにマテリアル変更を追加する必要あり
                    if (!trgtMat.onlyModel)
                    {
                        var filename = trgtMat.EditFileName();
                        if (HasAlreadyWritten(writeFiles, filename))
                        {
                            continue;
                        }

                        var matefilepath = Path.Combine(outDir, filename);
                        fileUtil.WriteMateFile(trgtMat.filename, matefilepath, trgtMat);
                        LogUtil.Debug("mate file:", matefilepath);

                        if (trgtMat.needPmatChange)
                        {
                            var name         = Path.GetFileNameWithoutExtension(filename);
                            var pmatfile     = name + FileConst.EXT_PMAT;
                            var pmatfilepath = Path.Combine(outDir, pmatfile);
                            fileUtil.WritePmat(pmatfilepath, trgtMat.editname,
                                               trgtMat.RenderQueue(), trgtMat.ShaderName());
                            LogUtil.Debug("pmat file:", pmatfilepath);
                        }
                    }

                    // テクスチャ出力
                    foreach (var trgtTex in trgtMat.texDic.Values)
                    {
                        if (!trgtTex.needOutput)
                        {
                            continue;
                        }

                        var tex2D = trgtTex.tex as Texture2D;
                        if (tex2D == null)
                        {
                            LogUtil.Debug("tex is not Texture2D", trgtTex.editname);
                            continue;
                            // TODO RenderTexの場合は無理やりTexture2Dに変換も可能だが…
                        }
                        var texfilename = trgtTex.EditFileName();
                        if (HasAlreadyWritten(writeFiles, texfilename))
                        {
                            continue;
                        }

                        var texfilepath = Path.Combine(outDir, texfilename);
                        fileUtil.WriteTexFile(texfilepath, trgtTex.EditTxtPath(), tex2D.EncodeToPNG());
                        LogUtil.Debug("tex file:", texfilepath);
                    }
                }
            }

            // めくれ、ずらし用menuファイルの出力
            foreach (var res in menu.resFiles.Values)
            {
                // 各モデルファイルで出力が必要となるファイルについて、
                // 元が同名のファイルを参照している場合でも関係なく出力
                // 設定が違う場合もある上、editnameはすべて別名になるはず
                var filename = res.EditFileName();
                if (HasAlreadyWritten(writeFiles, filename))
                {
                    continue;
                }


                var menufilepath  = Path.Combine(outDir, filename);
                var toCreateFiles = fileUtil.WriteMenuFile(res.filename, menufilepath, res);
                LogUtil.Debug("menu file:", menufilepath);

                foreach (var toCreate in toCreateFiles)
                {
                    // modelを出力
                    if (toCreate.item != null)
                    {
                        var filename0 = toCreate.replaced;
                        if (HasAlreadyWritten(writeFiles, filename0))
                        {
                            continue;
                        }

                        var modelfilepath = Path.Combine(outDir, filename0);
                        var slotMat       = menu.slotMaterials[toCreate.item.slot];
                        // TODO リプレースが想定される情報であるかチェック
                        fileUtil.WriteModelFile(toCreate.source, modelfilepath, slotMat);

                        // .mate出力
                    }
                    else if (toCreate.material != null)
                    {
                        var trgtMat   = toCreate.material;
                        var filename0 = toCreate.replaced;
                        if (HasAlreadyWritten(writeFiles, filename0))
                        {
                            continue;
                        }

                        // mate出力==別のtexファイルを出力する可能性有り
                        var matefilepath = Path.Combine(outDir, filename0);
                        fileUtil.WriteMateFile(toCreate.source, matefilepath, trgtMat);
                        // マテリアル名は上位と同じにして、同一pmatを使用する
                        //if (trgtMat.needPmatChange) {
                        //    var name = Path.GetFileNameWithoutExtension(filename);
                        //    var pmatfile = name + FileConst.EXT_PMAT;
                        //    string pmatfilepath = Path.Combine(outDir, pmatfile);
                        //    outUtil.WritePmat(pmatfilepath, trgtMat.editname,
                        //                      trgtMat.RenderQueue(), trgtMat.ShaderName());
                        //    LogUtil.DebugLog("pmatファイルを出力しました。", pmatfilepath);
                        //}

                        foreach (var tex in trgtMat.texDic.Values)
                        {
                            if (!tex.needOutput)
                            {
                                continue;
                            }

                            var tex2D = tex.tex as Texture2D;
                            if (tex2D == null)
                            {
                                LogUtil.Debug("tex is not 2D", tex.editname);
                                continue;
                            }
                            var texfilename = tex.EditFileName();
                            if (HasAlreadyWritten(writeFiles, texfilename))
                            {
                                continue;
                            }

                            // テクスチャをロードし、フィルタを適用
                            Texture2D loadedTex   = null;
                            Texture2D filteredTex = null;
                            if (!tex.fileChanged)   // texファイル変更済の場合はロードされたデータ済みから出力(そのままtex2dを使用)
                            {
                                var texfile = tex.workfilename + FileConst.EXT_TEXTURE;
                                if (!fileUtil.Exists(texfile))
                                {
                                    LogUtil.LogF("リソース参照で使用されているtexファイル({0})が見つかりません。texファイルを出力できません。", texfile);
                                    continue;
                                }
                                loadedTex = TexUtil.Instance.Load(texfile);
                                tex2D     = loadedTex;
                            }

                            if (tex.colorChanged)
                            {
                                filteredTex = ACCTexturesView.Filter(tex2D, tex.filter);
                                tex2D       = filteredTex;
                            }
                            var texfilepath = Path.Combine(outDir, texfilename);
                            fileUtil.WriteTexFile(texfilepath, tex.EditTxtPath(), tex2D.EncodeToPNG());
                            LogUtil.Debug("tex file:", texfilepath);

                            if (loadedTex != null)
                            {
                                UnityEngine.Object.DestroyImmediate(loadedTex);
                            }
                            if (filteredTex != null)
                            {
                                UnityEngine.Object.DestroyImmediate(filteredTex);
                            }
                        }
                    }
                }
            }
            return(true);
        }
    private List<ACCTexturesView> InitTexView(Material[] materials) {
        var ret = new List<ACCTexturesView>(materials.Length);
        int matNo = 0;
        foreach (Material material in materials) {
            try {
                var view = new ACCTexturesView(material, matNo++);
                ret.Add(view);

                // マテリアル数が少ない場合はデフォルトで表示
                view.expand = (materials.Length <= 2);
                
            } catch(Exception e) {
                LogUtil.Error(material.name, e);
            }
        }
        return ret;
    }