// 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); }
// 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; }
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; }