/// </summary>
public class BoxNode : Node
{
+ public BoxNode()
+ {
+ }
+ public BoxNode( string boxDefファイルパス, Node 親ノード = null )
+ {
+ var box = new BoxDef( boxDefファイルパス );
+ this.タイトル = box.Title;
+ this.親ノード = 親ノード;
+ }
}
}
public string sstfファイルパス { get; protected set; } = null;
public string 動画ファイルパス { get; protected set; } = null;
- public MusicNode( string sstfファイルパス )
+ public MusicNode()
+ {
+ }
+ public MusicNode( string sstfファイルパス, Node 親ノード = null )
{
this.sstfファイルパス = FDK.フォルダ.絶対パスに含まれるフォルダ変数を展開して返す( sstfファイルパス );
+ this.親ノード = 親ノード;
- // sstf と同じ場所に対応するサムネイル画像ファイルがあるなら、それをサムネイル画像として採用する。
+ #region " sstf ファイルから情報を取得する。"
+ //----------------
+ using( var score = new SSTFormat.スコア() )
+ {
+ score.t曲データファイルを読み込む_ヘッダだけ( this.sstfファイルパス );
+ this.タイトル = score.Header.曲名;
+ }
+ //----------------
+ #endregion
+ #region " sstf と同じ場所に対応するサムネイル画像ファイルがあるなら、それをサムネイル画像として採用する。"
+ //----------------
var サムネイル画像ファイルパス =
( from ファイル名 in Directory.GetFiles( Path.GetDirectoryName( this.sstfファイルパス ) )
where 対応するサムネイル画像名.Any( thumbファイル名 => ( Path.GetFileName( ファイル名 ).ToLower() == thumbファイル名 ) )
select ファイル名 ).FirstOrDefault(); // 複数あったら、最初に見つけたほうを採用。1つも見つからなければ null。
if( null != サムネイル画像ファイルパス )
- {
this.サムネイル画像 = new テクスチャ( サムネイル画像ファイルパス );
- }
-
- // sstf と同じ場所に(対応する拡張子を持った)動画ファイルがあるなら、それを背景動画として採用する。
+ //----------------
+ #endregion
+ #region " sstf と同じ場所に(対応する拡張子を持った)動画ファイルがあるなら、それを背景動画として採用する。"
+ //----------------
this.動画ファイルパス =
( from ファイル名 in Directory.GetFiles( Path.GetDirectoryName( this.sstfファイルパス ) )
where 対応する動画の拡張子.Any( 拡張子名 => ( Path.GetExtension( ファイル名 ).ToLower() == 拡張子名 ) )
- select ファイル名 ).FirstOrDefault(); // 複数あったら、最初に見つけたほうを採用。1つも見つからなければ null。
+ select ファイル名 ).FirstOrDefault();
+ //----------------
+ #endregion
}
protected override void On活性化( デバイスリソース dr )
{
{
public string タイトル { set; get; } = "(no title)";
- /// <summary>
- /// 自身の親のノード。
- /// </summary>
/// <remarks>
/// これが 非null の場合は、親ノードの子ノードリストに自身が含まれていることを意味する。
/// これが null の場合は、ルートノードであるか、または曲ツリーにまだ登録されていないノードであることを意味する。
/// ルートノード以外のノードは、基本的に null にはならない。
/// </remarks>
public Node 親ノード { get; set; } = null;
-
- /// <summary>
- /// 自身の子となるノードのリスト。
+
+ /// <remarks>
/// 原則として、ルートノード/BOX ノード以外は 空リスト である。(一応、null にはしない。)
- /// </summary>
+ /// </remarks>
public List<Node> 子ノードリスト { get; } = new List<Node>();
public Node 前のノード
// (1) このフォルダにあるすべてのsstfファイルから、曲ノードを作成する。
foreach( var fileInfo in dirInfo.GetFiles( "*.sstf", SearchOption.TopDirectoryOnly ) )
{
- var score = new SSTFormat.スコア();
- score.t曲データファイルを読み込む_ヘッダだけ( fileInfo.FullName );
- 追加対象ノード.子ノードリスト.Add( new MusicNode( fileInfo.FullName ) {
- タイトル = score.Header.曲名,
- 親ノード = 追加対象ノード,
- } );
+ 追加対象ノード.子ノードリスト.Add( new MusicNode( fileInfo.FullName, 追加対象ノード ) );
}
// (2) このフォルダのすべてのサブフォルダについて……
var boxファイルパス = Path.Combine( subDirInfo.FullName, @"box.def" );
if( File.Exists( boxファイルパス ) )
{
- var box = new BoxDef( boxファイルパス );
- 追加対象ノード.子ノードリスト.Add( new BoxNode() {
- タイトル = box.Title,
- 親ノード = 追加対象ノード,
- } );
+ 追加対象ノード.子ノードリスト.Add( new BoxNode( boxファイルパス, 追加対象ノード ) );
}
// サブフォルダへ再帰。(通常フォルダでもBOXフォルダでも。)