+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-using System.Diagnostics;\r
-using System.Drawing;\r
-using System.Drawing.Drawing2D;\r
-using System.Windows.Forms;\r
-using DTXCreator.UndoRedo;\r
-using FDK;\r
-\r
-namespace DTXCreator.譜面\r
-{\r
- internal class C譜面管理\r
- {\r
- public Bitmap bmp背景画像;\r
- public Dictionary<int, float> dicBPx = new Dictionary<int, float>();\r
- public Dictionary<int, C小節> dic小節 = new Dictionary<int, C小節>();\r
- public List<Cレーン> listレーン = new List<Cレーン>();\r
- public static readonly int nレーン割付チップ番号表示高さdot = 10;\r
- public static readonly int nレーン番号表示高さdot = 0x20;\r
- public int n現在のガイド幅grid = ( C小節.n基準の高さgrid / 0x10 );\r
- public int n現在の譜面表示下辺の譜面先頭からの位置grid;\r
- public string strPATH_WAV = "";\r
-\r
- public C譜面管理( Cメインフォーム cm )\r
- {\r
- this._Form = cm;\r
- }\r
- public bool bOPENチップである( Cチップ cc )\r
- {\r
- Cレーン cレーン = this.listレーン[ cc.nレーン番号0to ];\r
- return ( ( cc.n値_整数1to1295 == 2 ) && ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) ) );\r
- }\r
- public bool b確定選択中のチップがある()\r
- {\r
- foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
- {\r
- foreach( Cチップ cチップ in pair.Value.listチップ )\r
- {\r
- if( cチップ.b確定選択中 || cチップ.bドラッグで選択中 )\r
- {\r
- return true;\r
- }\r
- }\r
- }\r
- return false;\r
- }\r
- public decimal dc譜面先頭からの位置gridにおけるBPMを返す( int n譜面先頭からの位置grid )\r
- {\r
- decimal num = this._Form.dc現在のBPM;\r
- C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
- if( c小節 != null )\r
- {\r
- for( int i = 0; i <= c小節.n小節番号0to3599; i++ )\r
- {\r
- C小節 c小節2 = this.p小節を返す( i );\r
- if( c小節2 != null )\r
- {\r
- int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( i );\r
- foreach( Cチップ cチップ in c小節2.listチップ )\r
- {\r
- if( ( cチップ.nチャンネル番号00toFF == 8 ) && ( ( num3 + cチップ.n位置grid ) <= n譜面先頭からの位置grid ) )\r
- {\r
- num = (decimal) cチップ.f値_浮動小数;\r
- }\r
- }\r
- }\r
- }\r
- }\r
- return num;\r
- }\r
- public int nX座標dotが位置するレーン番号を返す( int nXdot )\r
- {\r
- if( nXdot >= 0 )\r
- {\r
- int num = 0;\r
- int num2 = 0;\r
- foreach( Cレーン cレーン in this.listレーン )\r
- {\r
- num += cレーン.n幅dot;\r
- if( nXdot < num )\r
- {\r
- return num2;\r
- }\r
- num2++;\r
- }\r
- }\r
- return -1;\r
- }\r
- public int nY座標dotが位置するgridを返す_ガイド幅単位( int nY )\r
- {\r
- int num = this.nY座標dotが位置するgridを返す_最高解像度( nY );\r
- C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num );\r
- if( c小節 == null )\r
- {\r
- c小節 = this.p小節を返す( this.n現在の最大の小節番号を返す() );\r
- }\r
- int num2 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
- int num3 = ( ( num - num2 ) / this.n現在のガイド幅grid ) * this.n現在のガイド幅grid;\r
- return ( num2 + num3 );\r
- }\r
- public int nY座標dotが位置するgridを返す_最高解像度( int nY )\r
- {\r
- int num = this._Form.pictureBox譜面パネル.ClientSize.Height - nY;\r
- return ( ( num / C小節.n1グリッドの高さdot ) + this.n現在の譜面表示下辺の譜面先頭からの位置grid );\r
- }\r
- public int nレーンの左端X座標dotを返す( int nレーン番号0to )\r
- {\r
- if( ( nレーン番号0to >= 0 ) && ( nレーン番号0to < this.listレーン.Count ) )\r
- {\r
- return this.listレーン[ nレーン番号0to ].n位置Xdot;\r
- }\r
- return -1;\r
- }\r
- public int nレーン名に対応するレーン番号を返す( string strレーン名 )\r
- {\r
- int nLaneNo = 0;\r
- foreach( Cレーン cレーン in this.listレーン )\r
- {\r
- if( cレーン.strレーン名.Equals( strレーン名 ) )\r
- {\r
- return nLaneNo;\r
- }\r
- nLaneNo++;\r
- }\r
- return -1;\r
- }\r
- public int n現在の最大の小節番号を返す()\r
- {\r
- int nBar = -1;\r
- foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
- {\r
- C小節 c小節 = pair.Value;\r
- if( c小節.n小節番号0to3599 > nBar )\r
- {\r
- nBar = c小節.n小節番号0to3599;\r
- }\r
- }\r
- return nBar;\r
- }\r
- public int n全小節の高さdotの合計を返す()\r
- {\r
- int nHeights = 0;\r
- foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
- {\r
- nHeights += pair.Value.n小節長倍率を考慮した現在の小節の高さdot;\r
- }\r
- return nHeights;\r
- }\r
- public int n全小節の高さgridの合計を返す()\r
- {\r
- int num = 0;\r
- foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
- {\r
- num += pair.Value.n小節長倍率を考慮した現在の小節の高さgrid;\r
- }\r
- return num;\r
- }\r
- public int n譜面先頭からの位置gridから描画領域内のY座標dotを返す( int n譜面先頭からの位置grid, Size sz描画領域dot )\r
- {\r
- int num = n譜面先頭からの位置grid - this.n現在の譜面表示下辺の譜面先頭からの位置grid;\r
- return ( sz描画領域dot.Height - ( num * C小節.n1グリッドの高さdot ) );\r
- }\r
- public int n譜面先頭からみた小節先頭の位置gridを返す( int n小節番号0to3599 )\r
- {\r
- if( ( n小節番号0to3599 < 0 ) || ( n小節番号0to3599 > this.n現在の最大の小節番号を返す() ) )\r
- {\r
- return -1;\r
- }\r
- int num = 0;\r
- for( int i = 0; i < n小節番号0to3599; i++ )\r
- {\r
- C小節 c小節 = this.p小節を返す( i );\r
- if( c小節 != null )\r
- {\r
- num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
- }\r
- }\r
- return num;\r
- }\r
- public C小節 pチップの存在する小節を返す( Cチップ cc )\r
- {\r
- foreach( KeyValuePair<int, C小節> pair in this.dic小節 )\r
- {\r
- C小節 c小節 = pair.Value;\r
- if( c小節.listチップ.Contains( cc ) )\r
- {\r
- return c小節;\r
- }\r
- }\r
- return null;\r
- }\r
- public Cチップ p指定された座標dotにあるチップを返す( int x, int y )\r
- {\r
- int num = this.nX座標dotが位置するレーン番号を返す( x );\r
- if( num >= 0 )\r
- {\r
- int num2 = this.nY座標dotが位置するgridを返す_最高解像度( y );\r
- C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num2 );\r
- if( c小節 == null )\r
- {\r
- return null;\r
- }\r
- int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
- foreach( Cチップ cチップ in c小節.listチップ )\r
- {\r
- int num4 = num3 + cチップ.n位置grid;\r
- int num5 = C小節.n位置変換dot2grid( Cチップ.nチップの高さdot );\r
- if( ( ( cチップ.nレーン番号0to == num ) && ( num4 <= num2 ) ) && ( num2 <= ( num4 + num5 ) ) )\r
- {\r
- return cチップ;\r
- }\r
- }\r
- }\r
- return null;\r
- }\r
- public Cチップ p指定位置にあるチップを返す( int n小節番号0to, int nレーン番号0to, int n小節内の位置grid )\r
- {\r
- C小節 c小節 = this.p小節を返す( n小節番号0to );\r
- if( c小節 != null )\r
- {\r
- for( int i = 0; i < c小節.listチップ.Count; i++ )\r
- {\r
- Cチップ cチップ = c小節.listチップ[ i ];\r
- if( ( cチップ.n位置grid == n小節内の位置grid ) && ( cチップ.nレーン番号0to == nレーン番号0to ) )\r
- {\r
- return cチップ;\r
- }\r
- }\r
- }\r
- return null;\r
- }\r
- public C小節 p小節を返す( int n小節番号0to3599 )\r
- {\r
- C小節 c小節 = null;\r
- if( this.dic小節.TryGetValue( n小節番号0to3599, out c小節 ) )\r
- {\r
- return c小節;\r
- }\r
- return null;\r
- }\r
- public C小節 p譜面先頭からの位置gridを含む小節を返す( int n譜面先頭からの位置grid )\r
- {\r
- int num = 0;\r
- int num2 = this.n現在の最大の小節番号を返す();\r
- for( int i = 0; i <= num2; i++ )\r
- {\r
- C小節 c小節 = this.p小節を返す( i );\r
- if( c小節 != null )\r
- {\r
- num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;\r
- if( n譜面先頭からの位置grid < num )\r
- {\r
- return c小節;\r
- }\r
- }\r
- }\r
- return null;\r
- }\r
- public void tチップを削除する( int nレーン番号0to, int n譜面先頭からの位置grid )\r
- {\r
- C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
- if( c小節 != null )\r
- {\r
- bool b削除完了;\r
- int num = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
- this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
- int laneBEAT = this._Form.mgr譜面管理者.nレーン名に対応するレーン番号を返す( "BEAT" );\r
- do\r
- {\r
- Cレーン cレーン = this.listレーン[ nレーン番号0to ];\r
- bool bRGBGuitar = ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtB );\r
- bool bRGBBass = ( ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsB );\r
- b削除完了 = true;\r
- foreach( Cチップ cチップ in c小節.listチップ )\r
- {\r
- if( cチップ.n位置grid == num )\r
- {\r
- //cチップ.nチャンネル番号00toFF = 0xF3; // 裏チップにする (表は0xF8)\r
- //cチップ.b裏 = true;\r
- if( cチップ.nレーン番号0to == nレーン番号0to )\r
- {\r
- Cチップ cc = new Cチップ();\r
- cc.tコピーfrom( cチップ );\r
- Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );\r
- this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo, redo ) );\r
-\r
- #region [ チップオブジェクトを削除する。ただしBEATオブジェクトは削除禁止。裏に回すだけ。]\r
- if ( cチップ.nレーン番号0to != laneBEAT )\r
- {\r
- c小節.listチップ.Remove( cチップ );\r
- b削除完了 = false;\r
- }\r
- else\r
- {\r
- int p = c小節.listチップ.IndexOf( cチップ );\r
- cチップ.nチャンネル番号00toFF = (cチップ.b裏)? 0xF3 : 0xF8; // 表裏反転\r
- cチップ.b裏 = !cチップ.b裏;\r
- c小節.listチップ[ p ] = cチップ;\r
- }\r
- this._Form.b未保存 = true;\r
- #endregion\r
-\r
- break;\r
- }\r
- if( ( bRGBGuitar && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) ) && ( cチップ.n値_整数1to1295 == 2 ) )\r
- {\r
- Cチップ cチップ3 = new Cチップ();\r
- cチップ3.tコピーfrom( cチップ );\r
- Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ3 );\r
- this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo2, redo2 ) );\r
- c小節.listチップ.Remove( cチップ );\r
- b削除完了 = false;\r
- this._Form.b未保存 = true;\r
- break;\r
- }\r
- if( ( bRGBBass && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( cチップ.n値_整数1to1295 == 2 ) )\r
- {\r
- Cチップ cチップ4 = new Cチップ();\r
- cチップ4.tコピーfrom( cチップ );\r
- Cチップ配置用UndoRedo redo3 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ4 );\r
- this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo3, redo3 ) );\r
- c小節.listチップ.Remove( cチップ );\r
- b削除完了 = false;\r
- this._Form.b未保存 = true;\r
- break;\r
- }\r
- }\r
- }\r
- }\r
- while( !b削除完了 );\r
- this._Form.tUndoRedo用GUIの有効無効を設定する();\r
- this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
- }\r
- }\r
- public void tチップを配置または置換する( int nレーン番号0to, int n譜面先頭からの位置grid, int nチップ値_整数, float fチップ値_浮動小数, bool b裏として配置 )\r
- {\r
- C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );\r
- if( c小節 != null )\r
- {\r
- this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();\r
- this.tチップを削除する( nレーン番号0to, n譜面先頭からの位置grid );\r
- if( ( ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) || ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && (nチップ値_整数 == 2 ) )\r
- {\r
- this.tチップを削除する( nレーン番号0to + 1, n譜面先頭からの位置grid );\r
- this.tチップを削除する( nレーン番号0to + 2, n譜面先頭からの位置grid );\r
- }\r
- Cレーン cレーン = this.listレーン[ nレーン番号0to ];\r
- Cチップ item = new Cチップ();\r
- item.nチャンネル番号00toFF = b裏として配置 ? cレーン.nチャンネル番号_裏00toFF : cレーン.nチャンネル番号_表00toFF;\r
- item.nレーン番号0to = nレーン番号0to;\r
- item.n位置grid = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );\r
- item.n値_整数1to1295 = nチップ値_整数;\r
- item.f値_浮動小数 = fチップ値_浮動小数;\r
- item.b裏 = b裏として配置;\r
- c小節.listチップ.Add( item );\r
- Cチップ cc = new Cチップ();\r
- cc.tコピーfrom( item );\r
- Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );\r
- this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のRedo ), redo, redo ) );\r
- int num = this.n現在の最大の小節番号を返す();\r
- if( c小節.n小節番号0to3599 == num )\r
- {\r
- for( int i = num + 1; i <= ( num + 4 ); i++ )\r
- {\r
- this.dic小節.Add( i, new C小節( i ) );\r
- this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<int>( null, new DGUndoを実行する<int>( this.t小節挿入のUndo ), new DGRedoを実行する<int>( this.t小節挿入のRedo ), i, i ) );\r
- }\r
- }\r
- this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();\r
- this._Form.tUndoRedo用GUIの有効無効を設定する();\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void tチップ削除のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
- {\r
- C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
- if( c小節 != null )\r
- {\r
- for( int i = 0; i < c小節.listチップ.Count; i++ )\r
- {\r
- Cチップ cチップ = c小節.listチップ[ i ];\r
- if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )\r
- {\r
- c小節.listチップ.RemoveAt( i );\r
- this._Form.b未保存 = true;\r
- return;\r
- }\r
- }\r
- }\r
- }\r
- public void tチップ削除のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
- {\r
- C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
- if( c小節 != null )\r
- {\r
- Cチップ item = new Cチップ();\r
- item.tコピーfrom( ur変更前.cc );\r
- c小節.listチップ.Add( item );\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void tチップ選択のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
- if( cチップ != null )\r
- {\r
- cチップ.b確定選択中 = true;\r
- }\r
- }\r
- public void tチップ選択のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
- if( cチップ != null )\r
- {\r
- cチップ.b確定選択中 = false;\r
- }\r
- }\r
- public void tチップ選択解除のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
- if( cチップ != null )\r
- {\r
- cチップ.b確定選択中 = false;\r
- }\r
- }\r
- public void tチップ選択解除のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
- if( cチップ != null )\r
- {\r
- cチップ.b確定選択中 = true;\r
- }\r
- }\r
- public void tチップ配置のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
- {\r
- C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
- if( c小節 != null )\r
- {\r
- Cチップ item = new Cチップ();\r
- item.tコピーfrom( ur変更前.cc );\r
- c小節.listチップ.Add( item );\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void tチップ配置のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )\r
- {\r
- C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
- if( c小節 != null )\r
- {\r
- for( int i = 0; i < c小節.listチップ.Count; i++ )\r
- {\r
- Cチップ cチップ = c小節.listチップ[ i ];\r
- if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )\r
- {\r
- c小節.listチップ.RemoveAt( i );\r
- this._Form.b未保存 = true;\r
- return;\r
- }\r
- }\r
- }\r
- }\r
- public void tチップ番号置換のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
- if( cチップ != null )\r
- {\r
- cチップ.n値_整数1to1295 = ur変更後.n値_整数1to1295;\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void tチップ番号置換のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更後.n小節番号0to, ur変更後.nレーン番号0to, ur変更後.n位置grid );\r
- if( cチップ != null )\r
- {\r
- cチップ.n値_整数1to1295 = ur変更前.n値_整数1to1295;\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void tチップ表裏反転のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
- if( cチップ != null )\r
- {\r
- if( cチップ.b裏 )\r
- {\r
- cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号_表00toFF;\r
- cチップ.b裏 = false;\r
- }\r
- else\r
- {\r
- cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号_裏00toFF;\r
- cチップ.b裏 = true;\r
- }\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void tチップ表裏反転のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )\r
- {\r
- Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );\r
- if( cチップ != null )\r
- {\r
- if( cチップ.b裏 )\r
- {\r
- cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号_表00toFF;\r
- cチップ.b裏 = false;\r
- }\r
- else\r
- {\r
- cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号_裏00toFF;\r
- cチップ.b裏 = true;\r
- }\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void t初期化()\r
- {\r
- this.t初期化_listレーンの生成();\r
- this.t初期化_小節を10個まで作成する();\r
- this.t初期化_背景画像を生成する();\r
- this.t初期化_スクロールバーを初期設定する();\r
- }\r
- public void t小節削除のRedo( int nダミー, int n削除する小節番号0to )\r
- {\r
- this.dic小節.Remove( n削除する小節番号0to );\r
- int num = this.n現在の最大の小節番号を返す();\r
- for( int i = n削除する小節番号0to + 1; i <= num; i++ )\r
- {\r
- C小節 c小節 = this.p小節を返す( i );\r
- if( c小節 != null )\r
- {\r
- this.dic小節.Remove( i );\r
- c小節.n小節番号0to3599 = i - 1;\r
- this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
- }\r
- }\r
- this._Form.b未保存 = true;\r
- }\r
- public void t小節削除のUndo( int n削除された小節番号0to, int nダミー )\r
- {\r
- for( int i = this.n現在の最大の小節番号を返す(); i >= n削除された小節番号0to; i-- )\r
- {\r
- C小節 c小節 = this.p小節を返す( i );\r
- if( c小節 != null )\r
- {\r
- this.dic小節.Remove( i );\r
- c小節.n小節番号0to3599 = i + 1;\r
- this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
- }\r
- }\r
- this.dic小節.Add( n削除された小節番号0to, new C小節( n削除された小節番号0to ) );\r
- this._Form.b未保存 = true;\r
- }\r
- public void t小節挿入のRedo( int nダミー, int n挿入する小節番号0to )\r
- {\r
- for( int i = this.n現在の最大の小節番号を返す(); i >= n挿入する小節番号0to; i-- )\r
- {\r
- C小節 c小節 = this.p小節を返す( i );\r
- if( c小節 != null )\r
- {\r
- this.dic小節.Remove( i );\r
- c小節.n小節番号0to3599 = i + 1;\r
- this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
- }\r
- }\r
- this.dic小節.Add( n挿入する小節番号0to, new C小節( n挿入する小節番号0to ) );\r
- this._Form.b未保存 = true;\r
- }\r
- public void t小節挿入のUndo( int n挿入された小節番号0to, int nダミー )\r
- {\r
- this.dic小節.Remove( n挿入された小節番号0to );\r
- int num = this.n現在の最大の小節番号を返す();\r
- for( int i = n挿入された小節番号0to + 1; i <= num; i++ )\r
- {\r
- C小節 c小節 = this.p小節を返す( i );\r
- if( c小節 != null )\r
- {\r
- this.dic小節.Remove( i );\r
- c小節.n小節番号0to3599 = i - 1;\r
- this.dic小節.Add( c小節.n小節番号0to3599, c小節 );\r
- }\r
- }\r
- this._Form.b未保存 = true;\r
- }\r
- public void t小節長変更のRedo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )\r
- {\r
- C小節 c小節 = this.p小節を返す( ur変更後.n小節番号0to );\r
- if( c小節 != null )\r
- {\r
- c小節.f小節長倍率 = ur変更後.f倍率;\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void t小節長変更のUndo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )\r
- {\r
- C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );\r
- if( c小節 != null )\r
- {\r
- c小節.f小節長倍率 = ur変更前.f倍率;\r
- this._Form.b未保存 = true;\r
- }\r
- }\r
- public void t垂直スクロールバーと譜面可視領域の上下位置の調整()\r
- {\r
- VScrollBar bar = this._Form.vScrollBar譜面用垂直スクロールバー;\r
- PictureBox box = this._Form.pictureBox譜面パネル;\r
- bar.Minimum = 0;\r
- bar.Maximum = this.n全小節の高さgridの合計を返す() - 1;\r
- bar.SmallChange = C小節.n基準の高さgrid / 0x10;\r
- bar.LargeChange = C小節.n基準の高さgrid;\r
- bar.Enabled = bar.Maximum > bar.LargeChange;\r
- if( bar.Enabled )\r
- {\r
- this.n現在の譜面表示下辺の譜面先頭からの位置grid = ( ( bar.Maximum + 1 ) - bar.LargeChange ) - bar.Value;\r
- box.Refresh();\r
- }\r
- }\r
- public void t水平スクロールバーと譜面パネル左右位置の調整()\r
- {\r
- HScrollBar bar = this._Form.hScrollBar譜面用水平スクロールバー;\r
- SplitContainer container = this._Form.splitContainerタブと譜面を分割;\r
- PictureBox box = this._Form.pictureBox譜面パネル;\r
- bar.Minimum = 0;\r
- bar.Maximum = box.Width - 1;\r
- bar.SmallChange = 5;\r
- bar.LargeChange = container.Panel2.Width;\r
- bar.Enabled = bar.Maximum > bar.LargeChange;\r
- if( bar.Enabled )\r
- {\r
- int num = bar.Value;\r
- if( ( num + bar.LargeChange ) > bar.Maximum )\r
- {\r
- num = ( bar.Maximum - bar.LargeChange ) + 1;\r
- }\r
- bar.Value = num;\r
- box.Location = new Point( -num, 0 );\r
- box.Refresh();\r
- }\r
- }\r
- public void t譜面を描画する( Graphics g, Size sz描画対象サイズdot, Rectangle rc可視領域dot )\r
- {\r
- this.strfmt小節番号文字フォーマット.LineAlignment = StringAlignment.Center;\r
- this.strfmt小節番号文字フォーマット.Alignment = StringAlignment.Center;\r
- this.strfmtレーン名文字フォーマット.LineAlignment = StringAlignment.Near;\r
- this.strfmtレーン名文字フォーマット.Alignment = StringAlignment.Center;\r
- this.strfmtレーン割付チップ番号文字フォーマット.LineAlignment = StringAlignment.Near;\r
- this.strfmtレーン割付チップ番号文字フォーマット.Alignment = StringAlignment.Near;\r
- int h = 0;\r
- int num2 = 0;\r
- int num3 = this.n現在の譜面表示下辺の譜面先頭からの位置grid * C小節.n1グリッドの高さdot;\r
- int num4 = num3 + rc可視領域dot.Height;\r
- int maxBar = this.n現在の最大の小節番号を返す();\r
- int bar = 0;\r
- while( bar <= maxBar )\r
- {\r
- C小節 cs = this.p小節を返す( bar );\r
- if( cs != null )\r
- {\r
- num2 = h + cs.n小節長倍率を考慮した現在の小節の高さdot;\r
- if( h >= num4 )\r
- {\r
- break;\r
- }\r
- if( num2 > num3 )\r
- {\r
- Rectangle rectangle = new Rectangle( 0, sz描画対象サイズdot.Height - ( num2 - num3 ), sz描画対象サイズdot.Width, num2 - h );\r
- Rectangle rectangle2 = new Rectangle( rc可視領域dot.X, rectangle.Y, rc可視領域dot.Width, rectangle.Height );\r
- this.t譜面を描画する_1小節を描画する( g, cs, rectangle, rectangle2 );\r
- }\r
- }\r
- bar++;\r
- h = num2;\r
- }\r
- Rectangle rectangle3 = new Rectangle( 0, 0, sz描画対象サイズdot.Width, nレーン割付チップ番号表示高さdot );\r
- this.t譜面を描画する_レーン割付チップを描画する( g, rectangle3 );\r
- rectangle3 = new Rectangle( 0, 10, sz描画対象サイズdot.Width, nレーン番号表示高さdot );\r
- this.t譜面を描画する_レーン名を描画する( g, rectangle3 );\r
- }\r
-\r
- /// <summary>\r
- /// 指定した種類のレーンを非表示にする\r
- /// </summary>\r
- /// <param name="eLaneType">非表示にするレーンの種類</param>\r
- public void tCollapseLanes( Cレーン.ELaneType eLaneType )\r
- {\r
- // なお、格納/展開状態を、#DTXV_COLLAPSED_LANES とかでDTXファイルに残した方がいいかも。\r
- int count = this.listレーン.Count;\r
- for ( int i = 0; i < this.listレーン.Count; i++ )\r
- {\r
- Cレーン c = listレーン[ i ];\r
- if ( c.eLaneType == eLaneType && c.bIsVisible == true ) // 対象レーンが見つかったら\r
- {\r
- this.listレーン[ i ].bIsVisible = false;\r
- this.listレーン[ i ].n幅dot = 0;\r
- }\r
- }\r
- this.tRefreshDisplayLanes();\r
- }\r
- /// <summary>\r
- /// 指定した種類のレーンを表示する\r
- /// </summary>\r
- /// <param name="eLaneType">表示にするレーンの種類</param>\r
- public void tExpandLanes( Cレーン.ELaneType eLaneType )\r
- {\r
- // tCollapseLanes()の反対の処理をする。\r
-\r
- for ( int i = 0; i < this.listレーン.Count; i++ ) // 以下本番\r
- {\r
- Cレーン c = listレーン[ i ];\r
- if ( c.eLaneType == eLaneType && c.bIsVisible == false ) // 対象レーンが見つかったら\r
- {\r
- this.listレーン[ i ].bIsVisible = true;\r
- this.listレーン[ i ].n幅dot = Cレーン.LANEWIDTH;\r
- }\r
- }\r
- this.tRefreshDisplayLanes();\r
- }\r
-\r
- /// <summary>\r
- /// レーンの表示/非表示を反映する\r
- /// </summary>\r
- /// <param name="eLaneType">表示にするレーンの種類</param>\r
- public void tRefreshDisplayLanes()\r
- {\r
- this.tRecalc_n位置XdotX(); // レーン位置が変わったので、レーン毎のX座標を再計算\r
- this.t初期化_背景画像を生成する(); // レーン数が変わったので、レーン画像を納める背景も再生成\r
- this.t水平スクロールバーと譜面パネル左右位置の調整(); // レーン数が変わったので、スクロールバーの長さも再調整\r
- }\r
-\r
- private void tRecalc_n位置XdotX() // n位置Xdotの再計算\r
- {\r
- int x = 0;\r
- int count = this.listレーン.Count;\r
- for ( int i = 0; i < count; i++ )\r
- {\r
- this.listレーン[ i ].n位置Xdot = x;\r
- x += this.listレーン[ i ].n幅dot;\r
- }\r
- }\r
-\r
- // チップのプロパティにすべきだが譜面管理者必要なため\r
- public bool IsDrumsChip(Cチップ chip)\r
- {\r
- return chip.nレーン番号0to >= nレーン名に対応するレーン番号を返す("LC") && chip.nレーン番号0to <= nレーン名に対応するレーン番号を返す("CY");\r
- }\r
-\r
- public bool IsGuitarChip(Cチップ chip)\r
- {\r
- return chip.nレーン番号0to >= nレーン名に対応するレーン番号を返す("GtV") && chip.nレーン番号0to <= nレーン名に対応するレーン番号を返す("GtB");\r
- }\r
-\r
- public bool IsBassChip(Cチップ chip)\r
- {\r
- return chip.nレーン番号0to >= nレーン名に対応するレーン番号を返す("BsV") && chip.nレーン番号0to <= nレーン名に対応するレーン番号を返す("BsB");\r
- }\r
-\r
- public bool IsPlayableChip(Cチップ chip)\r
- {\r
- return IsDrumsChip(chip) || IsBassChip(chip) || IsGuitarChip(chip);\r
- }\r
-\r
- #region [ private ]\r
- //-----------------\r
- private Cメインフォーム _Form;\r
- private Brush brレーン割付番号文字ブラシ = new SolidBrush( Color.White );\r
- private Brush brレーン割付番号文字ブラシ影 = new SolidBrush( Color.Black );\r
- private Brush brレーン名文字ブラシ = new SolidBrush( Color.FromArgb( 0xff, 220, 220, 220 ) );\r
- private Brush brレーン名文字ブラシ影 = new SolidBrush( Color.Black );\r
- private Brush br小節番号文字ブラシ = new SolidBrush( Color.FromArgb( 80, 0xff, 0xff, 0xff ) );\r
- private Font ftレーン割付チップ番号文字フォント = new Font( "MS UI Gothic", 7f, FontStyle.Regular );\r
- private Font ftレーン番号文字フォント = new Font( "MS US Gothic", 8f, FontStyle.Regular );\r
- private Font ft小節番号文字フォント = new Font( "MS UI Gothic", 50f, FontStyle.Regular );\r
- private Pen penガイド線ペン = new Pen( Color.FromArgb( 50, 50, 50 ) );\r
- private Pen penレーン区分線ペン細 = new Pen( Color.Gray );\r
- private Pen penレーン区分線ペン太 = new Pen( Color.White, 2f );\r
- private Pen pen小節線ペン = new Pen( Color.White, 2f );\r
- private Pen pen拍線ペン = new Pen( Color.Gray );\r
- private StringFormat strfmtレーン割付チップ番号文字フォーマット = new StringFormat();\r
- private StringFormat strfmtレーン名文字フォーマット = new StringFormat();\r
- private StringFormat strfmt小節番号文字フォーマット = new StringFormat();\r
-\r
- private void t初期化_listレーンの生成()\r
- {\r
- this.listレーン.Clear();\r
- int width = Cレーン.LANEWIDTH;\r
- int alpha = 0x19;\r
-\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BPM, "BPM", 0x08, 0x03, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BPM, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BEAT, "BEAT", 0xF8, 0xF3, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.Beat, false ) );\r
-\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "LC", 0x1a, 0x1a, true, Color.FromArgb( alpha, 0, 0xaf, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "HH", 0x11, 0x18, false, Color.FromArgb( alpha, 0, 0xff, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "LP", 0x1B, 0x1C, false, Color.FromArgb( alpha, 0xff, 0x7f, 0xaf ), 0, width, Cレーン.ELaneType.LP, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SD", 0x12, 0x12, false, Color.FromArgb( alpha, 0xff, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "BD", 0x13, 0x13, false, Color.FromArgb( alpha, 0xff, 0x7f, 0x7f ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "HT", 0x14, 0x14, false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "LT", 0x15, 0x15, false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "FT", 0x17, 0x17, false, Color.FromArgb( alpha, 0xff, 0, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "CY", 0x16, 0x19, false, Color.FromArgb( alpha, 0, 0xaf, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.FI, "FI", 0x53, 0x53, true, Color.FromArgb( alpha, 0xff, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );\r
-\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "BGM", 0x01, 0x01, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGM, true ) );\r
-\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE1", 0x61, 0x61, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE2", 0x62, 0x62, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE3", 0x63, 0x63, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE4", 0x64, 0x64, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE5", 0x65, 0x65, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );\r
-\r
- // SE6~32は、初期状態では非表示とする。(n幅dotを0にし、bIsVisibleをfalseにする)\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE6", 0x66, 0x66, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE7", 0x67, 0x67, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE8", 0x68, 0x68, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE9", 0x69, 0x69, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S10", 0x70, 0x70, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S11", 0x71, 0x71, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S12", 0x72, 0x72, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S13", 0x73, 0x73, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S14", 0x74, 0x74, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S15", 0x75, 0x75, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S16", 0x76, 0x76, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S17", 0x77, 0x77, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S18", 0x78, 0x78, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S19", 0x79, 0x79, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S20", 0x80, 0x80, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S21", 0x81, 0x81, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S22", 0x82, 0x82, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S23", 0x83, 0x83, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S24", 0x84, 0x84, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S25", 0x85, 0x85, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S26", 0x86, 0x86, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S27", 0x87, 0x87, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S28", 0x88, 0x88, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S29", 0x89, 0x89, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S30", 0x90, 0x90, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S31", 0x91, 0x91, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S32", 0x92, 0x92, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );\r
-\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.GtV, "GtV", 0, 0, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.GtR, "GtR", 0, 0, false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.GtG, "GtG", 0, 0, false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.GtB, "GtB", 0, 0, false, Color.FromArgb( alpha, 0, 0x80, 0xff ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.GtW, "GtW", 0x28, 0x28, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Guitar, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BsV, "BsV", 0, 0, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BsR, "BsR", 0, 0, false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BsG, "BsG", 0, 0, false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BsB, "BsB", 0, 0, false, Color.FromArgb( alpha, 0, 0x80, 0xff ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BsW, "BsW", 0xa8, 0xa8, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Bass, true ) );\r
-\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.AVI, "AVI", 0x54, 0x5A, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.AVI, true ) );\r
-\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG1", 0x04, 0xc4, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG2", 0x07, 0xc7, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG3", 0x55, 0xd5, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG4", 0x56, 0xd6, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG5", 0x57, 0xd7, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );\r
-\r
- // BG6~8も、初期状態では非表示とする。(n幅dotを0にし、bIsVisibleをfalseにする)\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG6", 0x58, 0xd8, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG7", 0x59, 0xd9, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );\r
- this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG8", 0x60, 0xe0, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );\r
-\r
- this.tRecalc_n位置XdotX(); // 0で固定初期化していたn位置XdotXを、ここで計算する。\r
- // (初期化の際に1つ1つまじめに計算しても良いが、単純にコード記述量が減るのでここでまとめて計算している)\r
-\r
- }\r
- private void t初期化_スクロールバーを初期設定する()\r
- {\r
- this._Form.hScrollBar譜面用水平スクロールバー.Value = 0;\r
- this._Form.vScrollBar譜面用垂直スクロールバー.Value = 0;\r
- this.t水平スクロールバーと譜面パネル左右位置の調整();\r
- this.t垂直スクロールバーと譜面可視領域の上下位置の調整();\r
- this._Form.vScrollBar譜面用垂直スクロールバー.Value = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;\r
- }\r
- private void t初期化_小節を10個まで作成する()\r
- {\r
- for( int i = 0; i < 10; i++ )\r
- {\r
- this.dic小節.Add( i, new C小節( i ) );\r
- }\r
- }\r
- private void t初期化_背景画像を生成する()\r
- {\r
- int width = 0;\r
- foreach( Cレーン cレーン in this.listレーン )\r
- {\r
- width += cレーン.n幅dot;\r
- }\r
- this.bmp背景画像 = new Bitmap( width, 1 );\r
- Graphics graphics = Graphics.FromImage( this.bmp背景画像 );\r
- int x = 0;\r
- foreach( Cレーン cレーン in this.listレーン )\r
- {\r
- graphics.FillRectangle( new SolidBrush( cレーン.col背景色 ), x, 0, cレーン.n幅dot, this.bmp背景画像.Height );\r
- x += cレーン.n幅dot;\r
- }\r
- graphics.Dispose();\r
- this._Form.pictureBox譜面パネル.Width = this.bmp背景画像.Width;\r
- this._Form.pictureBox譜面パネル.BackgroundImage = this.bmp背景画像;\r
- this._Form.pictureBox譜面パネル.BackgroundImageLayout = ImageLayout.Tile;\r
- }\r
- private void t譜面を描画する_1小節を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域, Rectangle rc小節のPicBox内可視領域 )\r
- {\r
- this.t譜面を描画する_1小節を描画する_小節番号を描画する( g, cs, rc小節のPicBox内可視領域 );\r
- this.t譜面を描画する_1小節を描画する_ガイド線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
- this.t譜面を描画する_1小節を描画する_拍線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
- this.t譜面を描画する_1小節を描画する_レーン区分線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
- this.t譜面を描画する_1小節を描画する_小節線を描画する( g, cs, rc小節のPicBox内描画領域 );\r
- this.t譜面を描画する_1小節を描画する_チップを描画する( g, cs, rc小節のPicBox内描画領域 );\r
- }\r
- private void t譜面を描画する_1小節を描画する_ガイド線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
- {\r
- if( this.n現在のガイド幅grid > 1 )\r
- {\r
- int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;\r
- for( int i = 0; i < num; i += this.n現在のガイド幅grid )\r
- {\r
- int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );\r
- g.DrawLine( this.penガイド線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );\r
- }\r
- }\r
- }\r
- private void t譜面を描画する_1小節を描画する_チップを描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
- {\r
- cs.listチップ.Sort();\r
- Rectangle rectangle = new Rectangle( 0, 0, 0, 0 );\r
- foreach( Cチップ cチップ in cs.listチップ )\r
- {\r
- if( cチップ.n枠外レーン数 != 0 )\r
- {\r
- continue;\r
- }\r
- int num = cチップ.n位置grid;\r
- Cレーン cレーン = this.listレーン[ cチップ.nレーン番号0to ];\r
- if ( !cレーン.bIsVisible )\r
- {\r
- continue;\r
- }\r
- rectangle.X = cレーン.n位置Xdot;\r
- rectangle.Y = ( rc小節のPicBox内描画領域.Bottom - ( num * C小節.n1グリッドの高さdot ) ) - Cチップ.nチップの高さdot;\r
- rectangle.Width = cレーン.n幅dot;\r
- rectangle.Height = Cチップ.nチップの高さdot;\r
- if( !cチップ.b裏 )\r
- {\r
- switch( cレーン.eレーン種別 )\r
- {\r
- case Cレーン.E種別.GtR:\r
- case Cレーン.E種別.GtG:\r
- case Cレーン.E種別.GtB:\r
- case Cレーン.E種別.BsR:\r
- case Cレーン.E種別.BsG:\r
- case Cレーン.E種別.BsB:\r
- if( ( ( cレーン.eレーン種別 != Cレーン.E種別.GtR ) || ( cチップ.n値_整数1to1295 != 2 ) ) && ( ( cレーン.eレーン種別 != Cレーン.E種別.BsR ) || ( cチップ.n値_整数1to1295 != 2 ) ) )\r
- {\r
- Cチップ.t表チップを描画する( g, rectangle, -1, cレーン.col背景色 );\r
- break;\r
- }\r
- rectangle.Width = cレーン.n幅dot * 3;\r
- Cチップ.tOPENチップを描画する( g, rectangle );\r
- break;\r
-\r
- case Cレーン.E種別.BPM:\r
- Cチップ.t表チップを描画する( g, rectangle, cチップ.f値_浮動小数, cレーン.col背景色 );\r
- break;\r
-\r
- case Cレーン.E種別.BEAT:\r
- Cチップ.t表チップを描画する( g, rectangle, cチップ.n値_整数1to1295, cレーン.col背景色, Cレーン.E種別.BEAT );\r
- break;\r
-\r
- default:\r
- Cチップ.t表チップを描画する( g, rectangle, cチップ.n値_整数1to1295, cレーン.col背景色 );\r
- break;\r
- }\r
- }\r
- else if( cレーン.eレーン種別 == Cレーン.E種別.BPM )\r
- {\r
- Cチップ.t裏チップを描画する( g, rectangle, cチップ.f値_浮動小数, cレーン.col背景色 );\r
- }\r
- else if ( cレーン.eレーン種別 == Cレーン.E種別.BEAT )\r
- {\r
- Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値_整数1to1295, cレーン.col背景色, Cレーン.E種別.BEAT );\r
- }\r
- else\r
- {\r
- Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値_整数1to1295, cレーン.col背景色 );\r
- }\r
- if ( cチップ.bドラッグで選択中 || cチップ.b確定選択中 )\r
- {\r
- Cチップ.tチップの周囲の太枠を描画する( g, rectangle );\r
- }\r
- }\r
- }\r
- private void t譜面を描画する_1小節を描画する_レーン区分線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
- {\r
- int num = 0;\r
- foreach( Cレーン cレーン in this.listレーン )\r
- {\r
- Pen pen = cレーン.b左側の線が太線 ? this.penレーン区分線ペン太 : this.penレーン区分線ペン細;\r
- g.DrawLine( pen, num, rc小節のPicBox内描画領域.Top, num, rc小節のPicBox内描画領域.Bottom );\r
- num += cレーン.n幅dot;\r
- }\r
- }\r
- private void t譜面を描画する_1小節を描画する_小節線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
- {\r
- Rectangle rectangle = rc小節のPicBox内描画領域;\r
- g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Bottom, rectangle.Right, rectangle.Bottom );\r
- g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Top, rectangle.Right, rectangle.Top );\r
- }\r
- private void t譜面を描画する_1小節を描画する_小節番号を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内可視領域 )\r
- {\r
- g.DrawString( C変換.str小節番号を文字列3桁に変換して返す( cs.n小節番号0to3599 ), this.ft小節番号文字フォント, this.br小節番号文字ブラシ, rc小節のPicBox内可視領域, this.strfmt小節番号文字フォーマット );\r
- }\r
- private void t譜面を描画する_1小節を描画する_拍線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )\r
- {\r
- int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;\r
- for( int i = 0; i < num; i += C小節.n基準の高さgrid / 4 )\r
- {\r
- int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );\r
- g.DrawLine( this.pen拍線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );\r
- }\r
- }\r
- private void t譜面を描画する_レーン割付チップを描画する( Graphics g, Rectangle rc小節のPicBox内描画領域 )\r
- {\r
- LinearGradientBrush brush = new LinearGradientBrush( rc小節のPicBox内描画領域, Color.FromArgb( 0xff, 0, 0, 100 ), Color.FromArgb( 0xff, 100, 100, 0xff ), LinearGradientMode.Vertical );\r
- g.FillRectangle( brush, rc小節のPicBox内描画領域 );\r
- brush.Dispose();\r
- Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );\r
- foreach( Cレーン cレーン in this.listレーン )\r
- {\r
- if ( !cレーン.bIsVisible )\r
- {\r
- continue;\r
- }\r
- layoutRectangle.X = ( rc小節のPicBox内描画領域.X + cレーン.n位置Xdot ) + 1;\r
- layoutRectangle.Y = rc小節のPicBox内描画領域.Y + 1;\r
- layoutRectangle.Width = cレーン.n幅dot;\r
- layoutRectangle.Height = rc小節のPicBox内描画領域.Height;\r
- if ( cレーン.nレーン割付チップ_表0or1to1295 > 0 )\r
- {\r
- string s = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ_表0or1to1295);\r
- g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
- layoutRectangle.X--;\r
- layoutRectangle.Y--;\r
- g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
- layoutRectangle.X++;\r
- layoutRectangle.Y++;\r
- }\r
- layoutRectangle.X += cレーン.n幅dot / 2;\r
- if ( cレーン.nレーン割付チップ_裏0or1to1295 > 0 )\r
- {\r
- string str2 = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ_裏0or1to1295);\r
- g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
- layoutRectangle.X--;\r
- layoutRectangle.Y--;\r
- g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );\r
- }\r
- }\r
- }\r
- private void t譜面を描画する_レーン名を描画する( Graphics g, Rectangle rcレーン名のPicBox内描画領域 )\r
- {\r
- LinearGradientBrush brush = new LinearGradientBrush( rcレーン名のPicBox内描画領域, Color.FromArgb( 0xff, 100, 100, 0xff ), Color.FromArgb( 0, 0, 0, 0xff ), LinearGradientMode.Vertical );\r
- g.FillRectangle( brush, rcレーン名のPicBox内描画領域 );\r
- brush.Dispose();\r
- Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );\r
- foreach( Cレーン cレーン in this.listレーン )\r
- {\r
- if ( !cレーン.bIsVisible )\r
- {\r
- continue;\r
- }\r
- layoutRectangle.X = ( rcレーン名のPicBox内描画領域.X + cレーン.n位置Xdot ) + 2;\r
- layoutRectangle.Y = rcレーン名のPicBox内描画領域.Y + 2;\r
- layoutRectangle.Width = cレーン.n幅dot;\r
- layoutRectangle.Height = 0x18;\r
- g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ影, layoutRectangle, this.strfmtレーン名文字フォーマット );\r
- layoutRectangle.X -= 2;\r
- layoutRectangle.Y -= 2;\r
- g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ, layoutRectangle, this.strfmtレーン名文字フォーマット );\r
- }\r
- }\r
- //-----------------\r
- #endregion\r
-\r
- \r
- }\r
-}\r