/// <summary> /// セクションコレクションからレイヤーアイテムを作成する。 /// </summary> /// <param name="sections">セクションコレクション。</param> /// <param name="baseSection">ベースセクション。</param> /// <returns>レイヤーアイテム。</returns> private static LayerItem FromSectionsToLayerItem( IniFileSectionCollection sections, IniFileSection baseSection) { Debug.Assert(sections != null); Debug.Assert(baseSection != null); var result = new LayerItem(); // ベースセクションのプロパティ値設定 ExoFileItemsConverter.ToProperties(baseSection.Items, ref result); // コンポーネント群追加 var componentSections = Enumerable .Range(0, int.MaxValue) .Select( i => sections.FirstOrDefault( s => s.Name == baseSection.Name + @"." + i)) .TakeWhile(s => s != null); foreach (var cs in componentSections) { result.Components.Add(ComponentMaker.FromExoFileItems(cs.Items)); } return(result); }
/// <summary> /// レイヤーアイテムからセクション群を作成して追加する。 /// </summary> /// <param name="layerItem">レイヤーアイテム。</param> /// <param name="index">レイヤーアイテムインデックス。</param> /// <param name="target">追加先のセクションコレクション。</param> private static void FromLayerItemToSections( LayerItem layerItem, int index, IniFileSectionCollection target) { Debug.Assert(layerItem != null); Debug.Assert(index >= 0); Debug.Assert(target != null); // ベースセクションアイテム群取得 var items = ExoFileItemsConverter.ToItems(layerItem); // ベースセクションアイテム群を整理 if (layerItem.GroupId <= 0) { items.Remove(LayerItem.ExoFileItemNameOfGroupId); } if (layerItem.IsAudio) { items.Remove(LayerItem.ExoFileItemNameOfIsClipping); items.Remove(LayerItem.ExoFileItemNameOfIsCameraTarget); } else { items.Remove(LayerItem.ExoFileItemNameOfIsAudio); if (!layerItem.IsClipping) { items.Remove(LayerItem.ExoFileItemNameOfIsClipping); } } if (layerItem.ChainIndex < 0) { items.Remove(LayerItem.ExoFileItemNameOfChainIndex); } // ベースセクション追加 var baseName = index.ToString(); target.Add(baseName, items); // コンポーネントセクション群追加 baseName += '.'; foreach (var v in layerItem.Components.Select((c, i) => new { c, i })) { target.Add(baseName + v.i, v.c.ToExoFileItems()); } }