2 using System.Collections.Generic;
3 using System.Diagnostics;
10 /// 曲ツリーを構成するノードの抽象クラス。
12 public abstract class Node : FDK.Activity
14 public string タイトル { set; get; } = "(no title)";
20 /// これが 非null の場合は、親ノードの子ノードリストに自身が含まれていることを意味する。
21 /// これが null の場合は、ルートノードであるか、または曲ツリーにまだ登録されていないノードであることを意味する。
22 /// ルートノード以外のノードは、基本的に null にはならない。
24 public Node 親ノード { get; set; } = null;
28 /// 原則として、ルートノード/BOX ノード以外は 空リスト である。(一応、null にはしない。)
30 public List<Node> 子ノードリスト { get; } = new List<Node>();
36 var 兄弟リスト = this.親ノード.子ノードリスト;
37 Trace.Assert( 0 < 兄弟リスト.Count, "[バグあり] 兄弟リストの要素数がゼロです。兄弟リストには最低でも自分がいるはず。" );
39 var index = 兄弟リスト.IndexOf( this );
40 Trace.Assert( 0 <= index, "[バグあり] 自分が兄弟リストに存在していません。" );
43 if( 0 > index ) // 先頭なら
44 index = 兄弟リスト.Count - 1; // 末尾へ。
46 return 兄弟リスト[ index ];
53 var 兄弟リスト = this.親ノード.子ノードリスト;
54 if( 0 == 兄弟リスト.Count )
55 throw new SSTException( "兄弟リストの Count が 0 です。" );
57 var index = 兄弟リスト.IndexOf( this );
59 throw new SSTException( "兄弟リストに this が存在していません。" );
62 if( 兄弟リスト.Count <= index ) // 末尾なら
65 return 兄弟リスト[ index ];
69 public SharpDX.Size2F ノードの全体サイズdpx => new SharpDX.Size2F( 314f, 220f );
70 public virtual SharpDX.Size2F ノードの画像領域のサイズdpx => new SharpDX.Size2F( 314f, 220f-82f );
71 public virtual SharpDX.Size2F ノードのタイトル領域のサイズdpx => new SharpDX.Size2F( 314f, 82f );
72 public SharpDX.Size2F タイトル画像サイズdpx => this.タイトル文画像.サイズdpx;
74 protected override void On活性化( デバイスリソース dr )
77 this.子リスト.Add( this.タイトル文画像 = new タイトルテクスチャ( this.タイトル ) );
79 protected override void On非活性化( デバイスリソース dr )
81 this.子リスト.Remove( this.タイトル文画像 );
83 protected override void Onデバイス依存リソースの作成( デバイスリソース dr )
85 // まだ既定の曲画像が生成されてなかったら生成する。
86 if( null == Node.既定の曲画像 )
88 Node.既定の曲画像 = new テクスチャ( @"$(Static)\images\選曲パネル.png" );
89 Node.既定の曲画像.活性化する( dr ); // 既定の曲画像には子Activityはないので、ここで活性化してよい。
92 protected override void Onデバイス依存リソースの解放( デバイスリソース dr )
94 // まだ既定の曲画像が解放されてなかったら解放する。
95 if( null != Node.既定の曲画像 )
97 Node.既定の曲画像.非活性化する( dr ); // 既定の曲画像には子Activityはないので、ここで非活性化してよい。
102 public virtual void ノード画像を描画する( デバイスリソース dr, SharpDX.Matrix ワールド変換行列 )
104 if( Node.既定の曲画像.活性化している )
105 Node.既定の曲画像.進行描画する( dr, ワールド変換行列 );
107 public virtual void タイトル画像を描画する( デバイスリソース dr, SharpDX.Matrix ワールド変換行列 )
109 if( this.タイトル文画像.活性化している )
110 this.タイトル文画像.進行描画する( dr, ワールド変換行列 );
113 protected タイトルテクスチャ タイトル文画像 = null;
115 protected static FDK.メディア.テクスチャ 既定の曲画像 = null; // 全インスタンスで共有