/// <summary> /// マテリアルリストを読み込む /// </summary> /// <param name="materialDirectory">ルートディレクトリ</param> public void LoadMaterials(string materialDirectory) { materials.Clear(); string dirPath = System.IO.Path.Combine(materialDirectory, SubDirectoryName); string[] paths = System.IO.Directory.GetFiles(dirPath); foreach (string path in paths) { if (MaterialEntryFile.IsMaterialEntryFile(path)) { string fname = System.IO.Path.GetFileName(path); try { MaterialEntryFile entryFile = new MaterialEntryFile(path); string relativePath = System.IO.Path.Combine(SubDirectoryName, fname); Material material = new Material(relativePath, entryFile); Add(material); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(e); } } } }
/// <summary> /// パスからエントリファイルを読み込む。 /// </summary> /// <param name="path">ファイルパス</param> public static MaterialEntryFile LoadFrom(string path) { MaterialEntryFile materialEntryFile = new MaterialEntryFile(path); materialEntryFile.Load(); return(materialEntryFile); }
/// <summary> /// entryFileで指定されるエントリに新規レイヤー情報を追加する。 /// </summary> /// <param name="entryFile">エントリファイル</param> /// <param name="layerName">レイヤー名</param> /// <param name="drawLayer">描画レイヤー</param> /// <param name="colorRefs">色参照(nullで既定)</param> /// <param name="colorPropertyName">色参照名</param> private static void AddLayer(MaterialEntryFile entryFile, string layerName, LayerType drawLayer, PartsType?colorRefs, string colorPropertyName) { entryFile.Layers.Add(layerName, new MaterialLayerInfo(layerName) { LayerType = drawLayer, ColorImmutable = false, Coloring = false, ColorPartsRefs = colorRefs, ColorPropertyName = colorPropertyName }); }
/// <summary> /// 空の素材エントリファイルを作成する。 /// </summary> /// <param name="entryFilePath">エントリファイルパス</param> /// <param name="materialType">素材種類</param> /// <returns>素材エントリファイル</returns> public static MaterialEntryFile CreateDefaultEntryFile(string entryFilePath, MaterialType materialType) { MaterialEntryFile entryFile = new MaterialEntryFile(entryFilePath); switch (materialType) { case MaterialType.Accessories: AddLayer(entryFile, "front", LayerType.AccessoryFront); AddLayer(entryFile, "back", LayerType.AccessoryBack); break; case MaterialType.Bodies: AddLayer(entryFile, "costume", LayerType.Costume); AddLayer(entryFile, "body", LayerType.Body, PartsType.Head); break; case MaterialType.Eyes: AddLayer(entryFile, "eyebrow", LayerType.HairStyleFront, PartsType.HairStyle); AddLayer(entryFile, "eye", LayerType.Eye); break; case MaterialType.HairStyles: AddLayer(entryFile, "front", LayerType.HairStyleFront); AddLayer(entryFile, "haed", LayerType.Body, PartsType.Head); AddLayer(entryFile, "back", LayerType.HairStyleBack); break; case MaterialType.HeadAccessories: AddLayer(entryFile, "front", LayerType.HeadAccessoryFront); AddLayer(entryFile, "back", LayerType.HeadAccessoryBack); break; case MaterialType.Heads: AddLayer(entryFile, "ear", LayerType.HeadEar); AddLayer(entryFile, "head", LayerType.Body); break; } return(entryFile); }
/// <summary> /// entryFileで指定されるエントリに新規レイヤー情報を追加する。 /// </summary> /// <param name="entryFile">エントリファイル</param> /// <param name="layerName">レイヤー名</param> /// <param name="drawLayer">描画レイヤー</param> /// <param name="colorRefs">色参照名</param> private static void AddLayer(MaterialEntryFile entryFile, string layerName, LayerType drawLayer, PartsType?colorRefs) => AddLayer(entryFile, layerName, drawLayer, colorRefs, Parts.DefaultColorPropertyName);
/// <summary> /// entryFileで指定されるエントリに新規レイヤー情報を追加する。 /// </summary> /// <param name="entryFile">エントリファイル</param> /// <param name="layerName">レイヤー名</param> /// <param name="drawLayer">描画レイヤー</param> private static void AddLayer(MaterialEntryFile entryFile, string layerName, LayerType drawLayer) => AddLayer(entryFile, layerName, drawLayer, null);
/// <summary> /// コンストラクタ /// </summary> /// <param name="relativePath">素材フォルダルートからの相対パス名 (Accessories\image.pngなど))</param> /// <param name="entryFile">エントリファイル</param> public Material(string relativePath, MaterialEntryFile entryFile) { this.RelativePath = relativePath; this.entryFile = entryFile; }