diff --git a/TJAPlayer3/Common/CSkin.cs b/TJAPlayer3/Common/CSkin.cs index d2b4219e..d02f7733 100644 --- a/TJAPlayer3/Common/CSkin.cs +++ b/TJAPlayer3/Common/CSkin.cs @@ -1786,6 +1786,10 @@ namespace TJAPlayer3 SongSelect_Bar_Anim_Y[i] = int.Parse(strSplit[i]); } } + else if (strCommand == "SongSelect_Scroll_Interval") + { + SongSelect_Scroll_Interval = float.Parse(strParam); + } else if (strCommand == "SongSelect_DanStatus_Offset_X") { string[] strSplit = strParam.Split(','); @@ -1882,6 +1886,30 @@ namespace TJAPlayer3 SongSelect_Bar_Title_Offset[i] = int.Parse(strSplit[i]); } } + else if (strCommand == "SongSelect_Bar_Box_Offset") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + SongSelect_Bar_Box_Offset[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_Bar_BackBox_Offset") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + SongSelect_Bar_BackBox_Offset[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "SongSelect_Bar_Random_Offset") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + SongSelect_Bar_Random_Offset[i] = int.Parse(strSplit[i]); + } + } else if (strCommand == "SongSelect_Bar_SubTitle_Offset") { string[] strSplit = strParam.Split(','); @@ -3220,6 +3248,46 @@ namespace TJAPlayer3 { Game_Notes_Interval = int.Parse(strParam); } + else if (strCommand == "Game_Notes_Arm_Offset_Left_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + Game_Notes_Arm_Offset_Left_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Notes_Arm_Offset_Right_X") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + Game_Notes_Arm_Offset_Right_X[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Notes_Arm_Offset_Left_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + Game_Notes_Arm_Offset_Left_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Notes_Arm_Offset_Right_Y") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + Game_Notes_Arm_Offset_Right_Y[i] = int.Parse(strSplit[i]); + } + } + else if (strCommand == "Game_Notes_Arm_Move") + { + string[] strSplit = strParam.Split(','); + for (int i = 0; i < 2; i++) + { + Game_Notes_Arm_Move[i] = int.Parse(strSplit[i]); + } + } else if (strCommand == "Game_Judge_X") { string[] strSplit = strParam.Split(','); @@ -7597,7 +7665,12 @@ namespace TJAPlayer3 public int[] SongSelect_Bar_Anim_X = new int[] { 0, 600, 500, 400, 0, -400, -500, -600, 0 }; public int[] SongSelect_Bar_Anim_Y = new int[] { 0, 1800, 1500, 1200, 0, -1200, -1500, -1800, 0 }; - public int[] SongSelect_Bar_Title_Offset = new int[] { 316, 62 }; + public float SongSelect_Scroll_Interval = 0.12f; + + public int[] SongSelect_Bar_Title_Offset = new int[] { 316, 62 }; + public int[] SongSelect_Bar_Box_Offset = new int[] { 316, 62 }; + public int[] SongSelect_Bar_BackBox_Offset = new int[] { 316, 62 }; + public int[] SongSelect_Bar_Random_Offset = new int[] { 316, 62 }; public int[] SongSelect_Bar_SubTitle_Offset = new int[] { 316, 90 }; public int[] SongSelect_DanStatus_Offset_X = new int[] { 30, 602 }; @@ -7897,7 +7970,15 @@ namespace TJAPlayer3 public bool Game_Notes_Anime = false; public int[] Game_Notes_Size = new int[] { 130, 130 }; public int[] Game_SENote_Size = new int[] { 136, 30 }; - public int Game_Notes_Interval = 960; + public int Game_Notes_Interval = 960; + + public int[] Game_Notes_Arm_Offset_Left_X = new int[] { 25, 25 }; + public int[] Game_Notes_Arm_Offset_Right_X = new int[] { 60, 60 }; + + public int[] Game_Notes_Arm_Offset_Left_Y = new int[] { 74, -44 }; + public int[] Game_Notes_Arm_Offset_Right_Y = new int[] { 104, -14 }; + public int[] Game_Notes_Arm_Move = new int[] { 0, 30 }; + public int[] Game_Judge_X = new int[] { 364, 364 }; public int[] Game_Judge_Y = new int[] { 152, 328 }; public int[] Game_Judge_Move = new int[] { 0, 20 }; diff --git a/TJAPlayer3/Songs/CDTX.cs b/TJAPlayer3/Songs/CDTX.cs index 241840d4..1d702a40 100644 --- a/TJAPlayer3/Songs/CDTX.cs +++ b/TJAPlayer3/Songs/CDTX.cs @@ -6427,13 +6427,24 @@ namespace TJAPlayer3 private CPrivateFastFont pf歌詞フォント; public override void On活性化() { - if (!string.IsNullOrEmpty(TJAPlayer3.Skin.Game_Lyric_FontName)) - { - this.pf歌詞フォント = new CPrivateFastFont(new FontFamily(TJAPlayer3.Skin.Game_Lyric_FontName), TJAPlayer3.Skin.Game_Lyric_FontSize); - } - else - { - this.pf歌詞フォント = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.Game_Lyric_FontSize); + if (TJAPlayer3.r現在のステージ.eステージID == CStage.Eステージ.曲読み込み) + { + //まさかこれが原因で曲の読み込みが停止するとは思わなかった... + //どういうことかというとスキンを読み込むときに...いや厳密には + //RefleshSkinを呼び出した後一回Disposeしてnullにして解放(その後にまたインスタンスを作成する)するんだけど + //その時にここでTJAPlayer3.Skinを参照して例外が出ていたんだ.... + //いやいや! なんでTJAPlayer3.Skinをnullにした瞬間に参照されるんだ!と思った方もいるかもしれないですが + //実は曲の読み込みはマルチスレッドで実行されているのでnullにした瞬間に参照される可能性も十分にある + //それならアプリが終了するんじゃないかと思ったのだけどtryを使ってい曲の読み込みを続行していた... + //いやーマルチスレッドって難しいね! + if (!string.IsNullOrEmpty(TJAPlayer3.Skin.Game_Lyric_FontName)) + { + this.pf歌詞フォント = new CPrivateFastFont(new FontFamily(TJAPlayer3.Skin.Game_Lyric_FontName), TJAPlayer3.Skin.Game_Lyric_FontSize); + } + else + { + this.pf歌詞フォント = new CPrivateFastFont(new FontFamily("MS UI Gothic"), TJAPlayer3.Skin.Game_Lyric_FontSize); + } } this.listWAV = new Dictionary(); this.listBPM = new Dictionary(); diff --git a/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs b/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs index b51613ee..d6c3b9a1 100644 --- a/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs +++ b/TJAPlayer3/Stages/05.SongSelect/CActSelect曲リスト.cs @@ -31,13 +31,17 @@ namespace TJAPlayer3 { get { - if( this.n目標のスクロールカウンタ == 0 ) - { - return ( this.n現在のスクロールカウンタ != 0 ); - } - return true; + return ctScrollCounter.n現在の値 != ctScrollCounter.n終了値; } } + public double fNowScrollAnime + { + get + { + double value = ctScrollCounter.n現在の値 / 1000.0; + return Math.Sin(value * Math.PI / 2.0); + } + } public int n現在のアンカ難易度レベル { get; @@ -400,11 +404,131 @@ namespace TJAPlayer3 { if( this.r現在選択中の曲 != null ) { + nNowChange = 1; ctScoreFrameAnime.t停止(); ctScoreFrameAnime.n現在の値 = 0; ctBarOpen.t停止(); - ctBarOpen.n現在の値 = 0; - this.n目標のスクロールカウンタ += 100; + ctBarOpen.n現在の値 = 0; + this.ctScrollCounter = new CCounter(0, 1000, TJAPlayer3.Skin.SongSelect_Scroll_Interval, TJAPlayer3.Timer); + + + #region [ パネルを1行上にシフトする。] + //----------------- + + int barCenterNum = (TJAPlayer3.Skin.SongSelect_Bar_Count - 1) / 2; + + // 選択曲と選択行を1つ下の行に移動。 + + tChangeSong(1); + this.n現在の選択行 = (this.n現在の選択行 + 1) % TJAPlayer3.Skin.SongSelect_Bar_Count; + + // 選択曲から7つ下のパネル(=新しく最下部に表示されるパネル。消えてしまう一番上のパネルを再利用する)に、新しい曲の情報を記載する。 + + var song = this.rGetSideSong(barCenterNum); + + int index = (this.n現在の選択行 + barCenterNum) % TJAPlayer3.Skin.SongSelect_Bar_Count; // 新しく最下部に表示されるパネルのインデックス(0~12)。 + this.stバー情報[index].strタイトル文字列 = song.strタイトル; + this.stバー情報[index].ForeColor = song.ForeColor; + this.stバー情報[index].BackColor = song.BackColor; + this.stバー情報[index].BoxColor = song.BoxColor; + this.stバー情報[index].BgColor = song.BgColor; + + // Set default if unchanged here + this.stバー情報[index].BoxType = song.BoxType; + this.stバー情報[index].BgType = song.BgType; + + this.stバー情報[index].BgTypeChanged = song.isChangedBgType; + this.stバー情報[index].BoxTypeChanged = song.isChangedBoxType; + + this.stバー情報[index].BoxChara = song.BoxChara; + this.stバー情報[index].BoxCharaChanged = song.isChangedBoxChara; + + this.stバー情報[index].strジャンル = song.strジャンル; + this.stバー情報[index].strサブタイトル = song.strサブタイトル; + this.stバー情報[index].ar難易度 = song.nLevel; + for (int f = 0; f < (int)Difficulty.Total; f++) + { + if (song.arスコア[f] != null) + this.stバー情報[index].b分岐 = song.arスコア[f].譜面情報.b譜面分岐; + } + + #region [Reroll cases] + + if (stバー情報[index].nクリア == null) + this.stバー情報[index].nクリア = new int[2][]; + if (stバー情報[index].nスコアランク == null) + this.stバー情報[index].nスコアランク = new int[2][]; + + for (int i = 0; i < 2; i++) + { + this.stバー情報[index].nクリア[i] = new int[5]; + this.stバー情報[index].nスコアランク[i] = new int[5]; + + int ap = TJAPlayer3.GetActualPlayer(i); + var sr = song.arスコア[n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)]; + + this.stバー情報[index].nクリア[i] = sr.GPInfo[ap].nClear; + this.stバー情報[index].nスコアランク[i] = sr.GPInfo[ap].nScoreRank; + } + + this.stバー情報[index].csu = song.uniqueId; + this.stバー情報[index].reference = song; + + #endregion + + // stバー情報[] の内容を1行ずつずらす。 + + + for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) + { + C曲リストノード song2 = this.rGetSideSong(i - barCenterNum); + int n = (((this.n現在の選択行 - barCenterNum) + i) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; + this.stバー情報[n].eバー種別 = this.e曲のバー種別を返す(song2); + this.stバー情報[n].ttkタイトル = this.ttk曲名テクスチャを生成する(this.stバー情報[n].strタイトル文字列, this.stバー情報[n].ForeColor, this.stバー情報[n].BackColor, stバー情報[n].eバー種別 == Eバー種別.Box ? this.pfBoxName : this.pfMusicName); + } + + + // 新しく最下部に表示されるパネル用のスキル値を取得。 + + for (int i = 0; i < 3; i++) + this.stバー情報[index].nスキル値[i] = (int)song.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)].譜面情報.最大スキル[i]; + + + // 1行(100カウント)移動完了。 + + this.t選択曲が変更された(false); // スクロールバー用に今何番目を選択しているかを更新 + + + + { + TJAPlayer3.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更! + ctBarOpen.t開始(0, 260, 2, TJAPlayer3.Timer); + + TJAPlayer3.stage選曲.NowGenre = this.r現在選択中の曲.strジャンル; + + TJAPlayer3.stage選曲.NowBg = this.r現在選択中の曲.BgType; + + TJAPlayer3.stage選曲.NowBgColor = this.r現在選択中の曲.BgColor; + + TJAPlayer3.stage選曲.NowUseGenre = !this.r現在選択中の曲.isChangedBgType; + + ctScoreFrameAnime.t開始(0, 6000, 1, TJAPlayer3.Timer); + } + + //----------------- + #endregion + + + if (this.ttk選択している曲の曲名 != null) + { + this.ttk選択している曲の曲名 = null; + this.b選択曲が変更された = false; + } + if (this.ttk選択している曲のサブタイトル != null) + { + this.ttk選択している曲のサブタイトル = null; + this.b選択曲が変更された = false; + } } this.b選択曲が変更された = true; } @@ -412,11 +536,138 @@ namespace TJAPlayer3 { if( this.r現在選択中の曲 != null ) { + nNowChange = -1; ctScoreFrameAnime.t停止(); ctScoreFrameAnime.n現在の値 = 0; ctBarOpen.t停止(); - ctBarOpen.n現在の値 = 0; - this.n目標のスクロールカウンタ -= 100; + ctBarOpen.n現在の値 = 0; + this.ctScrollCounter = new CCounter(0, 1000, TJAPlayer3.Skin.SongSelect_Scroll_Interval, TJAPlayer3.Timer); + + + #region [ パネルを1行下にシフトする。] + //----------------- + + int barCenterNum = (TJAPlayer3.Skin.SongSelect_Bar_Count - 1) / 2; + + // 選択曲と選択行を1つ上の行に移動。 + + tChangeSong(-1); + this.n現在の選択行 = ((this.n現在の選択行 - 1) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; + + + // 選択曲から5つ上のパネル(=新しく最上部に表示されるパネル。消えてしまう一番下のパネルを再利用する)に、新しい曲の情報を記載する。 + + var song = this.rGetSideSong(-barCenterNum); + + int index = ((this.n現在の選択行 - barCenterNum) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; // 新しく最上部に表示されるパネルのインデックス(0~12)。 + this.stバー情報[index].strタイトル文字列 = song.strタイトル; + this.stバー情報[index].ForeColor = song.ForeColor; + this.stバー情報[index].BackColor = song.BackColor; + this.stバー情報[index].BoxColor = song.BoxColor; + this.stバー情報[index].BgColor = song.BgColor; + + // Set default if unchanged here + this.stバー情報[index].BoxType = song.BoxType; + this.stバー情報[index].BgType = song.BgType; + + this.stバー情報[index].BgTypeChanged = song.isChangedBgType; + this.stバー情報[index].BoxTypeChanged = song.isChangedBoxType; + + this.stバー情報[index].BoxChara = song.BoxChara; + this.stバー情報[index].BoxCharaChanged = song.isChangedBoxChara; + + this.stバー情報[index].strサブタイトル = song.strサブタイトル; + this.stバー情報[index].strジャンル = song.strジャンル; + this.stバー情報[index].ar難易度 = song.nLevel; + for (int f = 0; f < (int)Difficulty.Total; f++) + { + if (song.arスコア[f] != null) + this.stバー情報[index].b分岐 = song.arスコア[f].譜面情報.b譜面分岐; + } + + /* + if (stバー情報[index].nクリア == null) + this.stバー情報[index].nクリア = new int[5]; + if (stバー情報[index].nスコアランク == null) + this.stバー情報[index].nスコアランク = new int[5]; + + for (int i = 0; i <= (int)Difficulty.Edit; i++) + { + if (song.arスコア[i] != null) + { + this.stバー情報[index].nクリア = song.arスコア[i].譜面情報.nクリア; + this.stバー情報[index].nスコアランク = song.arスコア[i].譜面情報.nスコアランク; + } + } + */ + + #region [Reroll cases] + + if (stバー情報[index].nクリア == null) + this.stバー情報[index].nクリア = new int[2][]; + if (stバー情報[index].nスコアランク == null) + this.stバー情報[index].nスコアランク = new int[2][]; + + for (int i = 0; i < 2; i++) + { + this.stバー情報[index].nクリア[i] = new int[5]; + this.stバー情報[index].nスコアランク[i] = new int[5]; + + int ap = TJAPlayer3.GetActualPlayer(i); + var sr = song.arスコア[n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)]; + + this.stバー情報[index].nクリア[i] = sr.GPInfo[ap].nClear; + this.stバー情報[index].nスコアランク[i] = sr.GPInfo[ap].nScoreRank; + } + + this.stバー情報[index].csu = song.uniqueId; + this.stバー情報[index].reference = song; + + #endregion + + // stバー情報[] の内容を1行ずつずらす。 + + for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) + { + int n = (((this.n現在の選択行 - barCenterNum) + i) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; + var song2 = this.rGetSideSong(i - barCenterNum); + this.stバー情報[n].eバー種別 = this.e曲のバー種別を返す(song2); + this.stバー情報[n].ttkタイトル = this.ttk曲名テクスチャを生成する(this.stバー情報[n].strタイトル文字列, this.stバー情報[n].ForeColor, this.stバー情報[n].BackColor, stバー情報[n].eバー種別 == Eバー種別.Box ? this.pfBoxName : this.pfMusicName); + } + + + // 新しく最上部に表示されるパネル用のスキル値を取得。 + + for (int i = 0; i < 3; i++) + this.stバー情報[index].nスキル値[i] = (int)song.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)].譜面情報.最大スキル[i]; + + + this.t選択曲が変更された(false); // スクロールバー用に今何番目を選択しているかを更新 + + this.ttk選択している曲の曲名 = null; + this.ttk選択している曲のサブタイトル = null; + + TJAPlayer3.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更! + ctBarOpen.t開始(0, 260, 2, TJAPlayer3.Timer); + TJAPlayer3.stage選曲.NowGenre = this.r現在選択中の曲.strジャンル; + TJAPlayer3.stage選曲.NowBg = this.r現在選択中の曲.BgType; + TJAPlayer3.stage選曲.NowBgColor = this.r現在選択中の曲.BgColor; + TJAPlayer3.stage選曲.NowUseGenre = !this.r現在選択中の曲.isChangedBgType; + ctScoreFrameAnime.t開始(0, 6000, 1, TJAPlayer3.Timer); + //----------------- + #endregion + + + if (this.ttk選択している曲の曲名 != null) + { + this.ttk選択している曲の曲名 = null; + this.b選択曲が変更された = false; + } + if (this.ttk選択している曲のサブタイトル != null) + { + this.ttk選択している曲のサブタイトル = null; + this.b選択曲が変更された = false; + } } this.b選択曲が変更された = true; } @@ -686,9 +937,7 @@ namespace TJAPlayer3 this.b登場アニメ全部完了 = false; - this.n目標のスクロールカウンタ = 0; - this.n現在のスクロールカウンタ = 0; - this.nスクロールタイマ = -1; + this.ctScrollCounter = new CCounter(0, 1000, TJAPlayer3.Skin.SongSelect_Scroll_Interval, TJAPlayer3.Timer); // フォント作成。 // 曲リスト文字は2倍(面積4倍)でテクスチャに描画してから縮小表示するので、フォントサイズは2倍とする。 @@ -850,7 +1099,6 @@ namespace TJAPlayer3 //----------------- if (this.b初めての進行描画) { - this.nスクロールタイマ = (long)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)); TJAPlayer3.stage選曲.t選択曲変更通知(); ctBarOpen.t開始(0, 260, 2, TJAPlayer3.Timer); @@ -917,341 +1165,39 @@ namespace TJAPlayer3 } } - int barCenterNum = (TJAPlayer3.Skin.SongSelect_Bar_Count - 1) / 2; + this.ctScrollCounter.t進行(); // 進行。 - if (n現在のスクロールカウンタ == 0) ct三角矢印アニメ.t進行Loop(); + if (this.ctScrollCounter.n現在の値 == this.ctScrollCounter.n終了値) ct三角矢印アニメ.t進行Loop(); else ct三角矢印アニメ.n現在の値 = 0; - { - #region [ (2) 通常フェーズの進行。] - //----------------- - long n現在時刻 = CSound管理.rc演奏用タイマ.n現在時刻; - - if (n現在時刻 < this.nスクロールタイマ) // 念のため - this.nスクロールタイマ = n現在時刻; - - const int nアニメ間隔 = 2; - while ((n現在時刻 - this.nスクロールタイマ) >= nアニメ間隔) - { - int n加速度 = 1; - int n残距離 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ)); - - #region [ 残距離が遠いほどスクロールを速くする(=n加速度を多くする)。] - //----------------- - if (n残距離 <= 10) - { - n加速度 = 1; - } - else if (n残距離 <= 100) - { - n加速度 = 2; - } - else if (n残距離 <= 300) - { - n加速度 = 3; - } - else if (n残距離 <= 500) - { - n加速度 = 4; - } - else - { - n加速度 = 650; - } - //----------------- - #endregion - - #region [ 加速度を加算し、現在のスクロールカウンタを目標のスクロールカウンタまで近づける。 ] - //----------------- - if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ) // (A) 正の方向に未達の場合: - { - this.n現在のスクロールカウンタ += n加速度; // カウンタを正方向に移動する。 - - if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ) - this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ; // 到着!スクロール停止! - } - - else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ) // (B) 負の方向に未達の場合: - { - this.n現在のスクロールカウンタ -= n加速度; // カウンタを負方向に移動する。 - - if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ) // 到着!スクロール停止! - this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ; - } - //----------------- - #endregion - - if (this.n現在のスクロールカウンタ >= 100) // 1行=100カウント。 - { - #region [ パネルを1行上にシフトする。] - //----------------- - - // 選択曲と選択行を1つ下の行に移動。 - - tChangeSong(1); - this.n現在の選択行 = (this.n現在の選択行 + 1) % TJAPlayer3.Skin.SongSelect_Bar_Count; - - // 選択曲から7つ下のパネル(=新しく最下部に表示されるパネル。消えてしまう一番上のパネルを再利用する)に、新しい曲の情報を記載する。 - - var song = this.rGetSideSong(barCenterNum); - - int index = (this.n現在の選択行 + barCenterNum) % TJAPlayer3.Skin.SongSelect_Bar_Count; // 新しく最下部に表示されるパネルのインデックス(0~12)。 - this.stバー情報[index].strタイトル文字列 = song.strタイトル; - this.stバー情報[index].ForeColor = song.ForeColor; - this.stバー情報[index].BackColor = song.BackColor; - this.stバー情報[index].BoxColor = song.BoxColor; - this.stバー情報[index].BgColor = song.BgColor; - - // Set default if unchanged here - this.stバー情報[index].BoxType = song.BoxType; - this.stバー情報[index].BgType = song.BgType; - - this.stバー情報[index].BgTypeChanged = song.isChangedBgType; - this.stバー情報[index].BoxTypeChanged = song.isChangedBoxType; - - this.stバー情報[index].BoxChara = song.BoxChara; - this.stバー情報[index].BoxCharaChanged = song.isChangedBoxChara; - - this.stバー情報[index].strジャンル = song.strジャンル; - this.stバー情報[index].strサブタイトル = song.strサブタイトル; - this.stバー情報[index].ar難易度 = song.nLevel; - for (int f = 0; f < (int)Difficulty.Total; f++) - { - if (song.arスコア[f] != null) - this.stバー情報[index].b分岐 = song.arスコア[f].譜面情報.b譜面分岐; - } - - #region [Reroll cases] - - if (stバー情報[index].nクリア == null) - this.stバー情報[index].nクリア = new int[2][]; - if (stバー情報[index].nスコアランク == null) - this.stバー情報[index].nスコアランク = new int[2][]; - - for (int i = 0; i < 2; i++) - { - this.stバー情報[index].nクリア[i] = new int[5]; - this.stバー情報[index].nスコアランク[i] = new int[5]; - - int ap = TJAPlayer3.GetActualPlayer(i); - var sr = song.arスコア[n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)]; - - this.stバー情報[index].nクリア[i] = sr.GPInfo[ap].nClear; - this.stバー情報[index].nスコアランク[i] = sr.GPInfo[ap].nScoreRank; - } - - this.stバー情報[index].csu = song.uniqueId; - this.stバー情報[index].reference = song; - - #endregion - - // stバー情報[] の内容を1行ずつずらす。 - - - for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) - { - C曲リストノード song2 = this.rGetSideSong(i - barCenterNum); - int n = (((this.n現在の選択行 - barCenterNum) + i) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; - this.stバー情報[n].eバー種別 = this.e曲のバー種別を返す(song2); - this.stバー情報[n].ttkタイトル = this.ttk曲名テクスチャを生成する(this.stバー情報[n].strタイトル文字列, this.stバー情報[n].ForeColor, this.stバー情報[n].BackColor, stバー情報[n].eバー種別 == Eバー種別.Box ? this.pfBoxName : this.pfMusicName); - } - - - // 新しく最下部に表示されるパネル用のスキル値を取得。 - - for (int i = 0; i < 3; i++) - this.stバー情報[index].nスキル値[i] = (int)song.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)].譜面情報.最大スキル[i]; - - - // 1行(100カウント)移動完了。 - - this.n現在のスクロールカウンタ -= 100; - this.n目標のスクロールカウンタ -= 100; - - this.t選択曲が変更された(false); // スクロールバー用に今何番目を選択しているかを更新 - - - - if (this.n目標のスクロールカウンタ == 0) - { - TJAPlayer3.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更! - ctBarOpen.t開始(0, 260, 2, TJAPlayer3.Timer); - - TJAPlayer3.stage選曲.NowGenre = this.r現在選択中の曲.strジャンル; - - TJAPlayer3.stage選曲.NowBg = this.r現在選択中の曲.BgType; - - TJAPlayer3.stage選曲.NowBgColor = this.r現在選択中の曲.BgColor; - - TJAPlayer3.stage選曲.NowUseGenre = !this.r現在選択中の曲.isChangedBgType; - - ctScoreFrameAnime.t開始(0, 6000, 1, TJAPlayer3.Timer); - } - - //----------------- - #endregion - } - else if (this.n現在のスクロールカウンタ <= -100) - { - #region [ パネルを1行下にシフトする。] - //----------------- - - // 選択曲と選択行を1つ上の行に移動。 - - tChangeSong(-1); - this.n現在の選択行 = ((this.n現在の選択行 - 1) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; - - - // 選択曲から5つ上のパネル(=新しく最上部に表示されるパネル。消えてしまう一番下のパネルを再利用する)に、新しい曲の情報を記載する。 - - var song = this.rGetSideSong(-barCenterNum); - - int index = ((this.n現在の選択行 - barCenterNum) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; // 新しく最上部に表示されるパネルのインデックス(0~12)。 - this.stバー情報[index].strタイトル文字列 = song.strタイトル; - this.stバー情報[index].ForeColor = song.ForeColor; - this.stバー情報[index].BackColor = song.BackColor; - this.stバー情報[index].BoxColor = song.BoxColor; - this.stバー情報[index].BgColor = song.BgColor; - - // Set default if unchanged here - this.stバー情報[index].BoxType = song.BoxType; - this.stバー情報[index].BgType = song.BgType; - - this.stバー情報[index].BgTypeChanged = song.isChangedBgType; - this.stバー情報[index].BoxTypeChanged = song.isChangedBoxType; - - this.stバー情報[index].BoxChara = song.BoxChara; - this.stバー情報[index].BoxCharaChanged = song.isChangedBoxChara; - - this.stバー情報[index].strサブタイトル = song.strサブタイトル; - this.stバー情報[index].strジャンル = song.strジャンル; - this.stバー情報[index].ar難易度 = song.nLevel; - for (int f = 0; f < (int)Difficulty.Total; f++) - { - if (song.arスコア[f] != null) - this.stバー情報[index].b分岐 = song.arスコア[f].譜面情報.b譜面分岐; - } - - /* - if (stバー情報[index].nクリア == null) - this.stバー情報[index].nクリア = new int[5]; - if (stバー情報[index].nスコアランク == null) - this.stバー情報[index].nスコアランク = new int[5]; - - for (int i = 0; i <= (int)Difficulty.Edit; i++) - { - if (song.arスコア[i] != null) - { - this.stバー情報[index].nクリア = song.arスコア[i].譜面情報.nクリア; - this.stバー情報[index].nスコアランク = song.arスコア[i].譜面情報.nスコアランク; - } - } - */ - - #region [Reroll cases] - - if (stバー情報[index].nクリア == null) - this.stバー情報[index].nクリア = new int[2][]; - if (stバー情報[index].nスコアランク == null) - this.stバー情報[index].nスコアランク = new int[2][]; - - for (int i = 0; i < 2; i++) - { - this.stバー情報[index].nクリア[i] = new int[5]; - this.stバー情報[index].nスコアランク[i] = new int[5]; - - int ap = TJAPlayer3.GetActualPlayer(i); - var sr = song.arスコア[n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)]; - - this.stバー情報[index].nクリア[i] = sr.GPInfo[ap].nClear; - this.stバー情報[index].nスコアランク[i] = sr.GPInfo[ap].nScoreRank; - } - - this.stバー情報[index].csu = song.uniqueId; - this.stバー情報[index].reference = song; - - #endregion - - // stバー情報[] の内容を1行ずつずらす。 - - for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) - { - int n = (((this.n現在の選択行 - barCenterNum) + i) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; - var song2 = this.rGetSideSong(i - barCenterNum); - this.stバー情報[n].eバー種別 = this.e曲のバー種別を返す(song2); - this.stバー情報[n].ttkタイトル = this.ttk曲名テクスチャを生成する(this.stバー情報[n].strタイトル文字列, this.stバー情報[n].ForeColor, this.stバー情報[n].BackColor, stバー情報[n].eバー種別 == Eバー種別.Box ? this.pfBoxName : this.pfMusicName); - } - - - // 新しく最上部に表示されるパネル用のスキル値を取得。 - - for (int i = 0; i < 3; i++) - this.stバー情報[index].nスキル値[i] = (int)song.arスコア[this.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(song)].譜面情報.最大スキル[i]; - - - // 1行(100カウント)移動完了。 - - this.n現在のスクロールカウンタ += 100; - this.n目標のスクロールカウンタ += 100; - - this.t選択曲が変更された(false); // スクロールバー用に今何番目を選択しているかを更新 - - this.ttk選択している曲の曲名 = null; - this.ttk選択している曲のサブタイトル = null; - - if (this.n目標のスクロールカウンタ == 0) - { - TJAPlayer3.stage選曲.t選択曲変更通知(); // スクロール完了=選択曲変更! - ctBarOpen.t開始(0, 260, 2, TJAPlayer3.Timer); - TJAPlayer3.stage選曲.NowGenre = this.r現在選択中の曲.strジャンル; - TJAPlayer3.stage選曲.NowBg = this.r現在選択中の曲.BgType; - TJAPlayer3.stage選曲.NowBgColor = this.r現在選択中の曲.BgColor; - TJAPlayer3.stage選曲.NowUseGenre = !this.r現在選択中の曲.isChangedBgType; - ctScoreFrameAnime.t開始(0, 6000, 1, TJAPlayer3.Timer); - } - //----------------- - #endregion - } - - if (this.b選択曲が変更された && n現在のスクロールカウンタ == 0) - { - if (this.ttk選択している曲の曲名 != null) - { - this.ttk選択している曲の曲名 = null; - this.b選択曲が変更された = false; - } - if (this.ttk選択している曲のサブタイトル != null) - { - this.ttk選択している曲のサブタイトル = null; - this.b選択曲が変更された = false; - } - } - this.nスクロールタイマ += nアニメ間隔; - } - //----------------- - #endregion - } int i選曲バーX座標 = 673; //選曲バーの座標用 int i選択曲バーX座標 = 665; //選択曲バーの座標用 - #region [ (2) 通常フェーズの描画。] - //----------------- - for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) // パネルは全13枚。 + int barCenterNum = (TJAPlayer3.Skin.SongSelect_Bar_Count - 1) / 2; + + if (this.ctScrollCounter.n現在の値 == this.ctScrollCounter.n終了値) + { + nNowChange = 0; + } + + #region [ (2) 通常フェーズの描画。] + //----------------- + for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) // パネルは全13枚。 { - if ((i == 0 && this.n現在のスクロールカウンタ > 0) || // 最上行は、上に移動中なら表示しない。 - (i == TJAPlayer3.Skin.SongSelect_Bar_Count - 1 && this.n現在のスクロールカウンタ < 0)) // 最下行は、下に移動中なら表示しない。 - continue; + int index = i + nNowChange; + if (((index < 0 || index >= TJAPlayer3.Skin.SongSelect_Bar_Count) && this.ctScrollCounter.n現在の値 != this.ctScrollCounter.n終了値)) + continue; int nパネル番号 = (((this.n現在の選択行 - barCenterNum) + i) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; int n見た目の行番号 = i; - int n次のパネル番号 = (this.n現在のスクロールカウンタ <= 0) ? ((i + 1) % TJAPlayer3.Skin.SongSelect_Bar_Count) : (((i - 1) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count); + int n次のパネル番号 = (index % TJAPlayer3.Skin.SongSelect_Bar_Count); int x = i選曲バーX座標; - #region [Positions and layouts] + #region [Positions and layouts] - int xZahyou = TJAPlayer3.Skin.SongSelect_Bar_X[n見た目の行番号]; + int xZahyou = TJAPlayer3.Skin.SongSelect_Bar_X[n見た目の行番号]; int xNextZahyou = TJAPlayer3.Skin.SongSelect_Bar_X[n次のパネル番号]; int xCentralZahyou = TJAPlayer3.Skin.SongSelect_Bar_X[barCenterNum]; @@ -1291,14 +1237,14 @@ namespace TJAPlayer3 #endregion // x set here - int xAnime = xZahyou + ((int)((xNextZahyou - xZahyou) - * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0))); + int xAnime = xZahyou + (int)((xNextZahyou - xZahyou) + * (1.0 - fNowScrollAnime)); - int y = yZahyou + ((int)((yNextZahyou - yZahyou) - * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0))); - - // (B) スクロール中の選択曲バー、またはその他のバーの描画。 - + int y = yZahyou + (int)((yNextZahyou - yZahyou) + * (1.0 - fNowScrollAnime)); + + // (B) スクロール中の選択曲バー、またはその他のバーの描画。 + float Box = 0; float Box_X = 0; float Box_Y = 0; @@ -1477,7 +1423,7 @@ namespace TJAPlayer3 - if (n現在のスクロールカウンタ != 0 || n見た目の行番号 != barCenterNum) + if (ctScrollCounter.n現在の値 != ctScrollCounter.n終了値 || n見た目の行番号 != barCenterNum) { int songType = 0; if (this.stバー情報[nパネル番号].ar難易度[(int)Difficulty.Dan] >= 0) @@ -1518,17 +1464,19 @@ namespace TJAPlayer3 else ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, TJAPlayer3.Skin.SongSelect_VerticalText).Opacity = 255; - if (n現在のスクロールカウンタ != 0) - ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, TJAPlayer3.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, xAnime - Box_X + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[0], y - Box_Y + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[1]); + if (ctScrollCounter.n現在の値 != ctScrollCounter.n終了値) + ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, TJAPlayer3.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, + xAnime - Box_X + GetTitleOffsetX(this.stバー情報[nパネル番号].eバー種別), y - Box_Y + GetTitleOffsetY(this.stバー情報[nパネル番号].eバー種別)); else if (n見た目の行番号 != barCenterNum) - ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, TJAPlayer3.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, xAnime - Box_X + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[0], y - Box_Y + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[1]); + ResolveTitleTexture(this.stバー情報[nパネル番号].ttkタイトル, TJAPlayer3.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, + xAnime - Box_X + GetTitleOffsetX(this.stバー情報[nパネル番号].eバー種別), y - Box_Y + GetTitleOffsetY(this.stバー情報[nパネル番号].eバー種別)); #endregion //----------------- } #endregion - if (this.n現在のスクロールカウンタ == 0) + if (this.ctScrollCounter.n現在の値 == this.ctScrollCounter.n終了値) { #region [ Draw BarCenter ] @@ -2037,22 +1985,24 @@ namespace TJAPlayer3 ctDifficultyIn.t停止(); } - for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) // パネルは全13枚。 + for (int i = 0; i < TJAPlayer3.Skin.SongSelect_Bar_Count; i++) // パネルは全13枚。 { - if ((i == 0 && this.n現在のスクロールカウンタ > 0) || // 最上行は、上に移動中なら表示しない。 - (i == TJAPlayer3.Skin.SongSelect_Bar_Count - 1 && this.n現在のスクロールカウンタ < 0)) // 最下行は、下に移動中なら表示しない。 + int index = i + nNowChange; + if (((index < 0 || index >= TJAPlayer3.Skin.SongSelect_Bar_Count) && this.ctScrollCounter.n現在の値 != this.ctScrollCounter.n終了値)) continue; int nパネル番号 = (((this.n現在の選択行 - barCenterNum) + i) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count; int n見た目の行番号 = i; - int n次のパネル番号 = (this.n現在のスクロールカウンタ <= 0) ? ((i + 1) % TJAPlayer3.Skin.SongSelect_Bar_Count) : (((i - 1) + TJAPlayer3.Skin.SongSelect_Bar_Count) % TJAPlayer3.Skin.SongSelect_Bar_Count); + int n次のパネル番号 = ((i + nNowChange) % TJAPlayer3.Skin.SongSelect_Bar_Count); //int x = this.ptバーの基本座標[ n見た目の行番号 ].X + ( (int) ( ( this.ptバーの基本座標[ n次のパネル番号 ].X - this.ptバーの基本座標[ n見た目の行番号 ].X ) * ( ( (double) Math.Abs( this.n現在のスクロールカウンタ ) ) / 100.0 ) ) ); int x = i選曲バーX座標; - int xAnime = TJAPlayer3.Skin.SongSelect_Bar_X[n見た目の行番号] + ((int)((TJAPlayer3.Skin.SongSelect_Bar_X[n次のパネル番号] - TJAPlayer3.Skin.SongSelect_Bar_X[n見た目の行番号]) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0))); + int xAnime = TJAPlayer3.Skin.SongSelect_Bar_X[n見た目の行番号] + ((int)((TJAPlayer3.Skin.SongSelect_Bar_X[n次のパネル番号] - TJAPlayer3.Skin.SongSelect_Bar_X[n見た目の行番号]) * + fNowScrollAnime)); - int y = TJAPlayer3.Skin.SongSelect_Bar_Y[n見た目の行番号] + ((int)((TJAPlayer3.Skin.SongSelect_Bar_Y[n次のパネル番号] - TJAPlayer3.Skin.SongSelect_Bar_Y[n見た目の行番号]) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0))); + int y = TJAPlayer3.Skin.SongSelect_Bar_Y[n見た目の行番号] + ((int)((TJAPlayer3.Skin.SongSelect_Bar_Y[n次のパネル番号] - TJAPlayer3.Skin.SongSelect_Bar_Y[n見た目の行番号]) * + fNowScrollAnime)); - if ((i == barCenterNum) && (this.n現在のスクロールカウンタ == 0)) + if ((i == barCenterNum) && ctScrollCounter.n現在の値 == ctScrollCounter.n終了値) { CTexture tx選択している曲のサブタイトル = null; @@ -2107,10 +2057,10 @@ namespace TJAPlayer3 if (this.ttk選択している曲の曲名 != null) { ResolveTitleTexture(this.ttk選択している曲の曲名, TJAPlayer3.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, - xAnime + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[0] + + xAnime + GetTitleOffsetX(this.stバー情報[nパネル番号].eバー種別) + (r現在選択中の曲.eノード種別 != C曲リストノード.Eノード種別.BACKBOX ? (this.stバー情報[nパネル番号].eバー種別 == Eバー種別.Box ? centerMoveX : centerMoveX / 1.1f) : 0), - y + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[1] - + y + GetTitleOffsetY(this.stバー情報[nパネル番号].eバー種別) - (r現在選択中の曲.eノード種別 != C曲リストノード.Eノード種別.BACKBOX ? (this.stバー情報[nパネル番号].eバー種別 == Eバー種別.Box ? centerMove : centerMove / 1.1f) : 0)); } } @@ -2119,10 +2069,10 @@ namespace TJAPlayer3 if (this.ttk選択している曲の曲名 != null) { ResolveTitleTexture(this.ttk選択している曲の曲名, TJAPlayer3.Skin.SongSelect_VerticalText).t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, - xAnime + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[0] + + xAnime + GetTitleOffsetX(this.stバー情報[nパネル番号].eバー種別) + (r現在選択中の曲.eノード種別 != C曲リストノード.Eノード種別.BACKBOX ? (this.stバー情報[nパネル番号].eバー種別 == Eバー種別.Box ? centerMoveX : centerMoveX / 1.1f) : 0), - y + TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[1] - + y + GetTitleOffsetY(this.stバー情報[nパネル番号].eバー種別) - (r現在選択中の曲.eノード種別 != C曲リストノード.Eノード種別.BACKBOX ? (this.stバー情報[nパネル番号].eバー種別 == Eバー種別.Box ? centerMove : centerMove / 1.1f) : 0)); } } @@ -2472,10 +2422,10 @@ namespace TJAPlayer3 = new Dictionary(); private Font ft曲リスト用フォント; - private long nスクロールタイマ; - public int n現在のスクロールカウンタ; + //public int n現在のスクロールカウンタ; private int n現在の選択行; - private int n目標のスクロールカウンタ; + //private int n目標のスクロールカウンタ; + private CCounter ctScrollCounter; /* private readonly Point[] ptバーの座標 = new Point[] { @@ -2495,6 +2445,42 @@ namespace TJAPlayer3 private int nCurrentPosition = 0; private int nNumOfItems = 0; + private int nNowChange; + + private int GetTitleOffsetX(Eバー種別 bar) + { + switch (bar) + { + case Eバー種別.Score: + return TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[0]; + case Eバー種別.Box: + return TJAPlayer3.Skin.SongSelect_Bar_Box_Offset[0]; + case Eバー種別.BackBox: + return TJAPlayer3.Skin.SongSelect_Bar_BackBox_Offset[0]; + case Eバー種別.Random: + return TJAPlayer3.Skin.SongSelect_Bar_Random_Offset[0]; + default: + return TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[0]; + } + } + + private int GetTitleOffsetY(Eバー種別 bar) + { + switch (bar) + { + case Eバー種別.Score: + return TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[1]; + case Eバー種別.Box: + return TJAPlayer3.Skin.SongSelect_Bar_Box_Offset[1]; + case Eバー種別.BackBox: + return TJAPlayer3.Skin.SongSelect_Bar_BackBox_Offset[1]; + case Eバー種別.Random: + return TJAPlayer3.Skin.SongSelect_Bar_Random_Offset[1]; + default: + return TJAPlayer3.Skin.SongSelect_Bar_Title_Offset[1]; + } + } + private void DrawBarCenter(CTexture texture, int x, int y, int moveX, int move, bool changeColor, bool drawOverlay, bool fullScaleOverlay) { if (changeColor) diff --git a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs index 94f8dc27..85b08f78 100644 --- a/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs +++ b/TJAPlayer3/Stages/07.Game/CStage演奏画面共通.cs @@ -396,6 +396,7 @@ namespace TJAPlayer3 } this.nJPOSSCROLL = new int[ 5 ]; this.bLEVELHOLD = new bool[]{ false, false, false, false, false }; + this.JPOSCROLLX = new int[5]; // Double play set here @@ -661,6 +662,12 @@ namespace TJAPlayer3 public int nMine; } + public int[] JPOSCROLLX = new int[5]; + public int GetJPOSCROLLX(int player) + { + double screen_ratio = TJAPlayer3.Skin.Resolution[0] / 1280.0; + return (int)(JPOSCROLLX[player] * screen_ratio); + } public int[] NoteOriginX { get @@ -668,29 +675,38 @@ namespace TJAPlayer3 if (TJAPlayer3.ConfigIni.nPlayerCount == 5) { return new int[] { - TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 0), - TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 1), - TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 2), - TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 3), - TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 4) + TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 0) + GetJPOSCROLLX(0), + TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 1) + GetJPOSCROLLX(1), + TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 2) + GetJPOSCROLLX(2), + TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 3) + GetJPOSCROLLX(3), + TJAPlayer3.Skin.nScrollField_5P[0] + (TJAPlayer3.Skin.Game_UIMove_5P[0] * 4) + GetJPOSCROLLX(4) }; } else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) { return new int[] { - TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 0), - TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 1), - TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 2), - TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 3) + TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 0) + GetJPOSCROLLX(0), + TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 1) + GetJPOSCROLLX(1), + TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 2) + GetJPOSCROLLX(2), + TJAPlayer3.Skin.nScrollField_4P[0] + (TJAPlayer3.Skin.Game_UIMove_4P[0] * 3) + GetJPOSCROLLX(3) }; } else { - return TJAPlayer3.Skin.nScrollFieldX; + return new int[] { + TJAPlayer3.Skin.nScrollFieldX[0] + GetJPOSCROLLX(0), + TJAPlayer3.Skin.nScrollFieldX[1] + GetJPOSCROLLX(1) + }; } } } + //Unused + public int[] JPOSCROLLY = new int[5]; + public int GetJPOSCROLLY(int player) + { + return JPOSCROLLY[player]; + } public int[] NoteOriginY { get @@ -698,25 +714,28 @@ namespace TJAPlayer3 if (TJAPlayer3.ConfigIni.nPlayerCount == 5) { return new int[] { - TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 0), - TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 1), - TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 2), - TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 3), - TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 4) + TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 0) + GetJPOSCROLLY(0), + TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 1) + GetJPOSCROLLY(1), + TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 2) + GetJPOSCROLLY(2), + TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 3) + GetJPOSCROLLY(3), + TJAPlayer3.Skin.nScrollField_5P[1] + (TJAPlayer3.Skin.Game_UIMove_5P[1] * 4) + GetJPOSCROLLY(4) }; } else if (TJAPlayer3.ConfigIni.nPlayerCount == 4 || TJAPlayer3.ConfigIni.nPlayerCount == 3) { return new int[] { - TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 0), - TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 1), - TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 2), - TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 3) + TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 0) + GetJPOSCROLLY(0), + TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 1) + GetJPOSCROLLY(1), + TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 2) + GetJPOSCROLLY(2), + TJAPlayer3.Skin.nScrollField_4P[1] + (TJAPlayer3.Skin.Game_UIMove_4P[1] * 3) + GetJPOSCROLLY(3) }; } else { - return TJAPlayer3.Skin.nScrollFieldY; + return new int[] { + TJAPlayer3.Skin.nScrollFieldY[0] + GetJPOSCROLLY(0), + TJAPlayer3.Skin.nScrollFieldY[1] + GetJPOSCROLLY(1) + }; } } } @@ -3881,14 +3900,7 @@ namespace TJAPlayer3 case 0xE2: if( !pChip.bHit && ( pChip.nバーからの距離dot.Drums < 0 ) ) { - if (nPlayer == 0) - { - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.t判定枠移動(dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].db移動時間, dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].n移動距離px, dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].n移動方向); - } - else - { - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.t判定枠移動2(dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].db移動時間, dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].n移動距離px, dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].n移動方向); - } + TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.t判定枠移動(dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].db移動時間, dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].n移動距離px, dTX.listJPOSSCROLL[nJPOSSCROLL[nPlayer]].n移動方向, nPlayer); this.nJPOSSCROLL[ nPlayer ]++; pChip.bHit = true; } @@ -4342,13 +4354,15 @@ namespace TJAPlayer3 { this.t演奏位置の変更(0, i); this.actPlayInfo.NowMeasure[i] = 0; + JPOSCROLLX[i] = 0; + JPOSCROLLY[i] = 0; } TJAPlayer3.stage演奏ドラム画面.On活性化(); for( int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++ ) { this.chip現在処理中の連打チップ[ i ] = null; this.actChara.b風船連打中[i] = false; - this.actChara.ChangeAnime(i, CAct演奏Drumsキャラクター.Anime.Normal, true); + this.actChara.ReturnDefaultAnime(i, true); } this.bPAUSE = false; } diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs index c16d57ac..9b5856c8 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsキャラクター.cs @@ -489,14 +489,15 @@ namespace TJAPlayer3 TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vc拡大縮小倍率.X = charaScale; TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vc拡大縮小倍率.Y = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(TJAPlayer3.app.Device, - (TJAPlayer3.Skin.nScrollFieldX[0] - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.nDefaultJudgePos[0, 0]) - + chara_x, - chara_y); + TJAPlayer3.Tx.Characters_Balloon_Broke[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(TJAPlayer3.app.Device, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); } if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画((TJAPlayer3.Skin.nScrollFieldX[0] - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.nDefaultJudgePos[0, 0]) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[0], TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[0], + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); if (endAnime) { @@ -515,14 +516,15 @@ namespace TJAPlayer3 TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].Opacity = nowOpacity; TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vc拡大縮小倍率.X = charaScale; TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vc拡大縮小倍率.Y = charaScale; - TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(TJAPlayer3.app.Device, - (TJAPlayer3.Skin.nScrollFieldX[0] - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.nDefaultJudgePos[0, 0]) - + chara_x, - chara_y); + TJAPlayer3.Tx.Characters_Balloon_Miss[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(TJAPlayer3.app.Device, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); } if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画((TJAPlayer3.Skin.nScrollFieldX[0] - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.nDefaultJudgePos[0, 0]) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[0], TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[0], + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, nowOpacity, true, player : i); if (endAnime) { @@ -536,20 +538,21 @@ namespace TJAPlayer3 TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vc拡大縮小倍率.X = charaScale; TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].vc拡大縮小倍率.Y = charaScale; TJAPlayer3.Tx.Characters_Balloon_Breaking[this.iCurrentCharacter[i]][nNowCharaFrame[i]].t2D描画(TJAPlayer3.app.Device, - (TJAPlayer3.Skin.nScrollFieldX[0] - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.nDefaultJudgePos[0, 0]) + - chara_x, - chara_y); + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + chara_x, + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + chara_y); } if (TJAPlayer3.ConfigIni.nPlayerCount <= 2) - TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画((TJAPlayer3.Skin.nScrollFieldX[0] - TJAPlayer3.stage演奏ドラム画面.actLaneTaiko.nDefaultJudgePos[0, 0]) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[0], TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, 255, true, player : i); + TJAPlayer3.stage演奏ドラム画面.PuchiChara.On進行描画( + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonX[0], + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i) + TJAPlayer3.Skin.Game_PuchiChara_BalloonY[i], false, 255, true, player : i); } } } } - private void ReturnDefaultAnime(int player, bool resetCounter) + public void ReturnDefaultAnime(int player, bool resetCounter) { if (TJAPlayer3.stage演奏ドラム画面.bIsGOGOTIME[player] && TJAPlayer3.Skin.Characters_GoGoTime_Ptn[this.iCurrentCharacter[player]] != 0) { diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏DrumsチップファイアD.cs b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏DrumsチップファイアD.cs index af85041c..4b63ffb3 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏DrumsチップファイアD.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏DrumsチップファイアD.cs @@ -286,8 +286,10 @@ namespace TJAPlayer3 nX = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[this.st状態[i].nPlayer]; nY = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[this.st状態[i].nPlayer]; } + nX += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(this.st状態[i].nPlayer); + nY += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(this.st状態[i].nPlayer); - switch( st状態[ i ].judge ) + switch ( st状態[ i ].judge ) { case E判定.Perfect: case E判定.Great: @@ -375,6 +377,8 @@ namespace TJAPlayer3 x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[this.st状態[i].nPlayer]; y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[this.st状態[i].nPlayer]; } + x += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(this.st状態[i].nPlayer); + y += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(this.st状態[i].nPlayer); x -= (TJAPlayer3.Tx.Effects_Hit_Explosion_Big.szテクスチャサイズ.Width * (f倍率 - 1.0f) / 2.0f); y -= (TJAPlayer3.Tx.Effects_Hit_Explosion_Big.szテクスチャサイズ.Height * (f倍率 - 1.0f) / 2.0f); diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsレーン太鼓.cs b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsレーン太鼓.cs index 39a2c4bc..45e5304b 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsレーン太鼓.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drumsレーン太鼓.cs @@ -35,16 +35,12 @@ namespace TJAPlayer3 this.stBranch[i].nBranchレイヤー透明度 = 0; this.stBranch[i].nBranch文字透明度 = 0; this.stBranch[i].nY座標 = 0; + + this.n総移動時間[i] = -1; } this.ctゴーゴー = new CCounter(); - this.n総移動時間 = -1; - this.n総移動時間2 = -1; - this.nDefaultJudgePos[0, 0] = TJAPlayer3.Skin.nScrollFieldX[0]; - this.nDefaultJudgePos[0, 1] = TJAPlayer3.Skin.nScrollFieldY[0]; - this.nDefaultJudgePos[1, 0] = TJAPlayer3.Skin.nScrollFieldX[1]; - this.nDefaultJudgePos[1, 1] = TJAPlayer3.Skin.nScrollFieldY[1]; this.ctゴーゴー炎 = new CCounter(0, 6, 50, TJAPlayer3.Timer); base.On活性化(); } @@ -56,10 +52,6 @@ namespace TJAPlayer3 this.st状態[i].ct進行 = null; this.stBranch[i].ct分岐アニメ進行 = null; } - TJAPlayer3.Skin.nScrollFieldX[0] = this.nDefaultJudgePos[0, 0]; - TJAPlayer3.Skin.nScrollFieldY[0] = this.nDefaultJudgePos[0, 1]; - TJAPlayer3.Skin.nScrollFieldX[1] = this.nDefaultJudgePos[1, 0]; - TJAPlayer3.Skin.nScrollFieldY[1] = this.nDefaultJudgePos[1, 1]; this.ctゴーゴー = null; base.On非活性化(); @@ -723,45 +715,27 @@ namespace TJAPlayer3 } var nTime = (long)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)); - if (this.n総移動時間 != -1) + for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) { - if (n移動方向 == 1) + if (this.n総移動時間[i] != -1) { - TJAPlayer3.Skin.nScrollFieldX[0] = this.n移動開始X + (int)((((int)nTime - this.n移動開始時刻) / (double)(this.n総移動時間)) * this.n移動距離px); - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[0] = this.n移動開始X + (int)((((int)nTime - this.n移動開始時刻) / (double)(this.n総移動時間)) * this.n移動距離px); - } - else - { - TJAPlayer3.Skin.nScrollFieldX[0] = this.n移動開始X - (int)((((int)nTime - this.n移動開始時刻) / (double)(this.n総移動時間)) * this.n移動距離px); - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[0] = this.n移動開始X - (int)((((int)nTime - this.n移動開始時刻) / (double)(this.n総移動時間)) * this.n移動距離px); - } + if (n移動方向[i] == 1) + { + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動開始X[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動開始X[i] + (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + } + else + { + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動開始X[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動開始X[i] - (int)((((int)nTime - this.n移動開始時刻[i]) / (double)(this.n総移動時間[i])) * this.n移動距離px[i]); + } - if (((int)nTime) > this.n移動開始時刻 + this.n総移動時間) - { - this.n総移動時間 = -1; - TJAPlayer3.Skin.nScrollFieldX[0] = this.n移動目的場所X; - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[0] = this.n移動目的場所X; - } - } - if (this.n総移動時間2 != -1) - { - if (n移動方向2 == 1) - { - TJAPlayer3.Skin.nScrollFieldX[1] = this.n移動開始X2 + (int)((((int)nTime - this.n移動開始時刻2) / (double)(this.n総移動時間2)) * this.n移動距離px2); - TJAPlayer3.Skin.Game_Effect_FlyingNotes_StartPoint_X[1] = this.n移動開始X2 + (int)((((int)nTime - this.n移動開始時刻2) / (double)(this.n総移動時間2)) * this.n移動距離px2); - } - else - { - TJAPlayer3.Skin.nScrollFieldX[1] = this.n移動開始X2 - (int)((((int)nTime - this.n移動開始時刻2) / (double)(this.n総移動時間2)) * this.n移動距離px2); - TJAPlayer3.Skin.Game_Effect_FlyingNotes_StartPoint_X[1] = this.n移動開始X2 - (int)((((int)nTime - this.n移動開始時刻2) / (double)(this.n総移動時間2)) * this.n移動距離px2); - } - - - if (((int)nTime) > this.n移動開始時刻2 + this.n総移動時間2) - { - this.n総移動時間2 = -1; - TJAPlayer3.Skin.nScrollFieldX[1] = this.n移動目的場所X2; - TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[1] = this.n移動目的場所X2; + if (((int)nTime) > this.n移動開始時刻[i] + this.n総移動時間[i]) + { + this.n総移動時間[i] = -1; + TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[i] = this.n移動目的場所X[i]; + //TJAPlayer3.stage演奏ドラム画面.FlyingNotes.StartPointX[i] = this.n移動目的場所X[i]; + } } } @@ -794,7 +768,9 @@ namespace TJAPlayer3 TJAPlayer3.Tx.Judge_Frame.b加算合成 = TJAPlayer3.Skin.Game_JudgeFrame_AddBlend; for (int i = 0; i < TJAPlayer3.ConfigIni.nPlayerCount; i++) { - TJAPlayer3.Tx.Judge_Frame.t2D描画(TJAPlayer3.app.Device, TJAPlayer3.stage演奏ドラム画面.NoteOriginX[i], TJAPlayer3.stage演奏ドラム画面.NoteOriginY[i], new Rectangle(0, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); + TJAPlayer3.Tx.Judge_Frame.t2D描画(TJAPlayer3.app.Device, + TJAPlayer3.stage演奏ドラム画面.NoteOriginX[i], + TJAPlayer3.stage演奏ドラム画面.NoteOriginY[i], new Rectangle(0, 0, TJAPlayer3.Skin.Game_Notes_Size[0], TJAPlayer3.Skin.Game_Notes_Size[1])); } } @@ -886,6 +862,8 @@ namespace TJAPlayer3 x = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_X[i]; y = TJAPlayer3.Skin.Game_Effects_Hit_Explosion_Y[i]; } + x += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(i); + y += TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(i); switch (st状態[i].judge) { @@ -974,31 +952,19 @@ namespace TJAPlayer3 TJAPlayer3.stage演奏ドラム画面.actLane.t分岐レイヤー_コース変化(n現在, n次回, nPlayer); } - public void t判定枠移動(double db移動時間, int n移動px, int n移動方向) + public void t判定枠移動(double db移動時間, int n移動px, int n移動方向, int nPlayer) { - this.n移動開始時刻 = (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)); - this.n移動開始X = TJAPlayer3.Skin.nScrollFieldX[0]; - this.n総移動時間 = (int)(db移動時間 * 1000); - this.n移動方向 = n移動方向; - this.n移動距離px = n移動px; + this.n移動開始時刻[nPlayer] = (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)); + this.n移動開始X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer]; + this.n総移動時間[nPlayer] = (int)(db移動時間 * 1000); + this.n移動方向[nPlayer] = n移動方向; + this.n移動距離px[nPlayer] = n移動px; if (n移動方向 == 0) - this.n移動目的場所X = TJAPlayer3.Skin.nScrollFieldX[0] - n移動px; + this.n移動目的場所X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer] - n移動px; else - this.n移動目的場所X = TJAPlayer3.Skin.nScrollFieldX[0] + n移動px; + this.n移動目的場所X[nPlayer] = TJAPlayer3.stage演奏ドラム画面.JPOSCROLLX[nPlayer] + n移動px; } - public void t判定枠移動2(double db移動時間, int n移動px, int n移動方向) - { - this.n移動開始時刻2 = (int)(CSound管理.rc演奏用タイマ.n現在時刻 * (((double)TJAPlayer3.ConfigIni.n演奏速度) / 20.0)); - this.n移動開始X2 = TJAPlayer3.Skin.nScrollFieldX[1]; - this.n総移動時間2 = (int)(db移動時間 * 1000); - this.n移動方向2 = n移動方向; - this.n移動距離px2 = n移動px; - if (n移動方向 == 0) - this.n移動目的場所X2 = TJAPlayer3.Skin.nScrollFieldX[1] - n移動px; - else - this.n移動目的場所X2 = TJAPlayer3.Skin.nScrollFieldX[1] + n移動px; - } #region[ private ] //----------------- //private CTexture txLane; @@ -1056,21 +1022,12 @@ namespace TJAPlayer3 } - private int n総移動時間; - private int n移動開始X; - private int n移動開始時刻; - private int n移動距離px; - private int n移動目的場所X; - private int n移動方向; - private int n総移動時間2; - private int n移動開始X2; - private int n移動開始時刻2; - private int n移動距離px2; - private int n移動目的場所X2; - private int n移動方向2; - - internal int[,] nDefaultJudgePos = new int[5, 2]; - + private int[] n総移動時間 = new int[5]; + private int[] n移動開始X = new int[5]; + private int[] n移動開始時刻 = new int[5]; + private int[] n移動距離px = new int[5]; + private int[] n移動目的場所X = new int[5]; + private int[] n移動方向 = new int[5]; //----------------- #endregion diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums判定文字列.cs b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums判定文字列.cs index 1f397816..3bc87368 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums判定文字列.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CAct演奏Drums判定文字列.cs @@ -78,8 +78,8 @@ namespace TJAPlayer3 x = TJAPlayer3.Skin.Game_Judge_X[j]; y = TJAPlayer3.Skin.Game_Judge_Y[j]; } - x += (moveValue * TJAPlayer3.Skin.Game_Judge_Move[0]); - y += (moveValue * TJAPlayer3.Skin.Game_Judge_Move[1]); + x += (moveValue * TJAPlayer3.Skin.Game_Judge_Move[0]) + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(j); + y += (moveValue * TJAPlayer3.Skin.Game_Judge_Move[1]) + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLY(j); TJAPlayer3.Tx.Judge.Opacity = (int)(255f - (JudgeAnimes[j, i].counter.n現在の値 >= 360 ? ((JudgeAnimes[j, i].counter.n現在の値 - 360) / 50.0f) * 255f : 0f)); TJAPlayer3.Tx.Judge.t2D描画(TJAPlayer3.app.Device, x, y, JudgeAnimes[j, i].rc); diff --git a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs index c01df3a9..a2d8ab59 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/CStage演奏ドラム画面.cs @@ -2034,12 +2034,11 @@ namespace TJAPlayer3 switch (TJAPlayer3.ConfigIni.nPlayerCount) { - case 0: case 1: + case 2: nSenotesX = TJAPlayer3.Skin.nSENotesX[nPlayer]; nSenotesY = TJAPlayer3.Skin.nSENotesY[nPlayer]; break; - case 2: case 3: case 4: nSenotesX = TJAPlayer3.Skin.nSENotes_4P[0]; @@ -2052,7 +2051,7 @@ namespace TJAPlayer3 } this.ct手つなぎ.t進行Loop(); - int nHand = this.ct手つなぎ.n現在の値 < 30 ? this.ct手つなぎ.n現在の値 : 60 - this.ct手つなぎ.n現在の値; + float fHand = (this.ct手つなぎ.n現在の値 < 30 ? this.ct手つなぎ.n現在の値 : 60 - this.ct手つなぎ.n現在の値) / 30.0f; //x = ( x ) - ( ( int ) ( (TJAPlayer3.Skin.Game_Note_Size[0] * pChip.dbチップサイズ倍率 ) / 2.0 ) ); @@ -2080,17 +2079,29 @@ namespace TJAPlayer3 case 0x1A: case 0x1B: { + int moveX = (int)(fHand * TJAPlayer3.Skin.Game_Notes_Arm_Move[0]); + int moveY = (int)(fHand * TJAPlayer3.Skin.Game_Notes_Arm_Move[1]); if (TJAPlayer3.ConfigIni.eSTEALTH[TJAPlayer3.GetActualPlayer(nPlayer)] == Eステルスモード.OFF && pChip.bShow) { - if (nPlayer == 0) + if (nPlayer != TJAPlayer3.ConfigIni.nPlayerCount - 1) { - TJAPlayer3.Tx.Notes_Arm?.t2D上下反転描画(device, x + 25, (y + 74) + nHand); - TJAPlayer3.Tx.Notes_Arm?.t2D上下反転描画(device, x + 60, (y + 104) - nHand); + //上から下 + TJAPlayer3.Tx.Notes_Arm?.t2D上下反転描画(device, + x + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Left_X[0] + moveX, + y + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Left_Y[0] + moveY); + TJAPlayer3.Tx.Notes_Arm?.t2D上下反転描画(device, + x + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Right_X[0] - moveX, + y + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Right_Y[0] - moveY); } - else if (nPlayer == 1) + if (nPlayer != 0) { - TJAPlayer3.Tx.Notes_Arm?.t2D描画(device, x + 25, (y - 44) + nHand); - TJAPlayer3.Tx.Notes_Arm?.t2D描画(device, x + 60, (y - 14) - nHand); + //下から上 + TJAPlayer3.Tx.Notes_Arm?.t2D描画(device, + x + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Left_X[1] + moveX, + y + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Left_Y[1] + moveY); + TJAPlayer3.Tx.Notes_Arm?.t2D描画(device, + x + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Right_X[1] - moveX, + y + TJAPlayer3.Skin.Game_Notes_Arm_Offset_Right_Y[1] - moveY); } NotesManager.DisplayNote(nPlayer, x, y, pChip, num9); NotesManager.DisplaySENotes(nPlayer, x + nSenotesX, y + nSenotesY, pChip); @@ -2125,12 +2136,11 @@ namespace TJAPlayer3 switch (TJAPlayer3.ConfigIni.nPlayerCount) { - case 0: case 1: + case 2: nSenotesX = TJAPlayer3.Skin.nSENotesX[nPlayer]; nSenotesY = TJAPlayer3.Skin.nSENotesY[nPlayer]; break; - case 2: case 3: case 4: nSenotesX = TJAPlayer3.Skin.nSENotes_4P[0]; diff --git a/TJAPlayer3/Stages/07.Game/Taiko/FlyingNotes.cs b/TJAPlayer3/Stages/07.Game/Taiko/FlyingNotes.cs index 99ebf507..baf3597d 100644 --- a/TJAPlayer3/Stages/07.Game/Taiko/FlyingNotes.cs +++ b/TJAPlayer3/Stages/07.Game/Taiko/FlyingNotes.cs @@ -129,8 +129,8 @@ namespace TJAPlayer3 double value = (Flying[i].Counter.n現在の値 / 140.0); - Flying[i].X = StartPointX[Flying[i].Player] + (movingDistanceX * value); - Flying[i].Y = TJAPlayer3.Skin.Game_Effect_FlyingNotes_StartPoint_Y[Flying[i].Player] + (int)(movingDistanceY * value); + Flying[i].X = StartPointX[Flying[i].Player] + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(Flying[i].Player) + (movingDistanceX * value); + Flying[i].Y = TJAPlayer3.Skin.Game_Effect_FlyingNotes_StartPoint_Y[Flying[i].Player] + TJAPlayer3.stage演奏ドラム画面.GetJPOSCROLLX(Flying[i].Player) + (int)(movingDistanceY * value); Flying[i].Y += Math.Sin(value * Math.PI) * (Flying[i].Player == 0 ? -TJAPlayer3.Skin.Game_Effect_FlyingNotes_Sine : TJAPlayer3.Skin.Game_Effect_FlyingNotes_Sine); if (TJAPlayer3.Skin.Game_Effect_FlyingNotes_IsUsingEasing) diff --git a/Test/System/SimpleStyle/GameConfig.ini b/Test/System/SimpleStyle/GameConfig.ini index 656aeb7c..f070b235 100644 --- a/Test/System/SimpleStyle/GameConfig.ini +++ b/Test/System/SimpleStyle/GameConfig.ini @@ -23,6 +23,19 @@ Game_SENote_Size=136,30 Game_Notes_Interval=960 +Game_Notes_Arm_Offset_Left_X=25,25 + +Game_Notes_Arm_Offset_Right_X=60,60 + + +Game_Notes_Arm_Offset_Left_Y=74,-44 + +Game_Notes_Arm_Offset_Right_Y=104,-14 + + +Game_Notes_Arm_Move=0,30 + + Game_Judge_Meter=0,360 Game_Judge_Meter_Perfect=102,494 diff --git a/Test/System/SimpleStyle/SongSelectConfig.ini b/Test/System/SimpleStyle/SongSelectConfig.ini index 77d13704..da8700e7 100644 --- a/Test/System/SimpleStyle/SongSelectConfig.ini +++ b/Test/System/SimpleStyle/SongSelectConfig.ini @@ -14,6 +14,9 @@ SongSelect_Bar_Anim_X=0,600,500,400,0,-400,-500,-600,0 SongSelect_Bar_Anim_Y=0,1800,1500,1200,0,-1200,-1500,-1800,0 +SongSelect_Scroll_Interval=0.12 + + SongSelect_Bar_Title_Offset=316,62 SongSelect_Bar_SubTitle_Offset=316,90 @@ -48,6 +51,9 @@ SongSelect_FavoriteStatus_Offset=90,30 SongSelect_Bar_Title_Offset=316,62 +SongSelect_Bar_Box_Offset=316,62 +SongSelect_Bar_BackBox_Offset=316,62 +SongSelect_Bar_Random_Offset=316,62 SongSelect_Bar_SubTitle_Offset=316,90