1
0
mirror of synced 2024-11-24 15:40:22 +01:00

Feature request #48 (Random song select button) base implementation, currently set automatically difficulty to oni but will allow others later, + small bug fixes

This commit is contained in:
0aubsq 2021-11-18 23:36:55 +01:00
parent 094bcd5f0b
commit bbf108c1cf
9 changed files with 152 additions and 101 deletions

View File

@ -182,6 +182,7 @@
200 : Ensou Back box (Tojiru)
201 : Ensou recently played songs
202 : Ensou recently played songs description
203 : Ensou randomly select song
# Tower text (0100X)

View File

@ -272,6 +272,7 @@ namespace TJAPlayer3
[200] = "Return",
[201] = "Recently played songs",
[202] = "Play recently played songs !",
[203] = "Random song",
[1000] = "Reached floor",
[1001] = "F",

View File

@ -67,6 +67,7 @@ namespace TJAPlayer3
[200] = "Retour",
[201] = "Sons joués récemment",
[202] = "Rejouez les sons joués précedement !",
[203] = "Surprend moi !",
[1000] = "Étage atteint",
[1001] = "",

View File

@ -278,8 +278,9 @@ namespace TJAPlayer3
[200] = "とじる",
[201] = "最近あそんだ曲",
[202] = "最近あそんだ曲を集めたよ!",
[203] = "おまかせ",
[1000] = "到達階数",
[1000] = "到達階数",
[1001] = "階",
[1002] = "点",
[1003] = "スコア",

View File

@ -1007,7 +1007,7 @@ namespace TJAPlayer3
{
if(c曲リストード.eード種別 == C曲リストード.Eード種別.BOX)
{
// Dojo node removed here
// Dojo node removed here, add an option soonish to put it off
if (c曲リストード.strタイトル == "段位道場")
{
@ -1063,8 +1063,58 @@ namespace TJAPlayer3
TJAPlayer3.Skin.strBoxDefSkinSubfolders = ba;
}
private void t曲リストへ後処理を適用する( List<C曲リストード> )
{
// すべてのノードについて…
{
#region [ RANDOM BOX ]
//-----------------------------
if (.Count > 0)
{
C曲リストード itemRandom = new C曲リストード();
itemRandom.eード種別 = C曲リストード.Eード種別.RANDOM;
itemRandom.strタイトル = CLangManager.LangInstance.GetString(203);
itemRandom.nスコア数 = (int)Difficulty.Total;
itemRandom.r親ード = [0].r親ード;
itemRandom.strBreadcrumbs = (itemRandom.r親ード == null) ?
itemRandom.strタイトル : itemRandom.r親ード.strBreadcrumbs + " > " + itemRandom.strタイトル;
itemRandom.arスコア[0] = new Cスコア();
/*
for (int i = 0; i < (int)Difficulty.Total; i++)
{
itemRandom.arスコア[0].. = string.Format("< RANDOM SELECT Lv.{0} >", i + 1);
}
*/
.Add(itemRandom);
#region [ ]
//-----------------------------
if (TJAPlayer3.ConfigIni.bLog曲検索ログ出力)
{
StringBuilder sb = new StringBuilder(0x100);
sb.Append(string.Format("nID#{0:D3}", itemRandom.nID));
if (itemRandom.r親ード != null)
{
sb.Append(string.Format("(in#{0:D3}):", itemRandom.r親ード.nID));
}
else
{
sb.Append("(onRoot):");
}
sb.Append(" RANDOM");
Trace.TraceInformation(sb.ToString());
}
//-----------------------------
#endregion
}
//-----------------------------
#endregion
// すべてのノードについて…
foreach ( C曲リストード c曲リストード in )
{
SlowOrSuspendSearchTask(); // #27060 中断要求があったら、解除要求が来るまで待機, #PREMOVIE再生中は検索負荷を落とす

View File

@ -191,6 +191,7 @@ namespace TJAPlayer3
SongSelect_Frame_BackBox = TxC(SONGSELECT + @"Frame_BackBox.png");
SongSelect_Frame_Random = TxC(SONGSELECT + @"Frame_Random.png");
SongSelect_Bar_Genre_Back = TxC(SONGSELECT + @"Bar_Genre_Back.png");
SongSelect_Bar_Genre_Random = TxC(SONGSELECT + @"Bar_Genre_Random.png");
SongSelect_Bar_Genre_RecentryPlaySong = TxC(SONGSELECT + @"Bar_Genre_RecentryPlaySong.png");
SongSelect_Bar_Select = TxC(SONGSELECT + @"Bar_Select.png");
SongSelect_Level_Number = TxC(SONGSELECT + @"Level_Number.png");
@ -1026,6 +1027,7 @@ namespace TJAPlayer3
SongSelect_Frame_Random,
SongSelect_Bar_Center,
SongSelect_Bar_Genre_Back,
SongSelect_Bar_Genre_Random,
SongSelect_Bar_Genre_RecentryPlaySong,
SongSelect_Level_Number,
SongSelect_Bar_Select,

View File

@ -614,58 +614,19 @@ namespace TJAPlayer3
#endregion
#region [UraOmote pad]
#region [UraOmote pad]
// UraOmote pad
for (int i = 0; i < ScorePads[(int)Difficulty.Edit + 1].ScoreRankCount.Length; i++)
{
ScorePads[(int)Difficulty.Edit + 1].ScoreRankCount[i] = ScorePads[(int)Difficulty.Edit].ScoreRankCount[i] + ScorePads[(int)Difficulty.Oni].ScoreRankCount[i];
}
for (int i = 0; i < ScorePads[(int)Difficulty.Edit + 1].CrownCount.Length; i++)
{
ScorePads[(int)Difficulty.Edit + 1].CrownCount[i] = ScorePads[(int)Difficulty.Edit].CrownCount[i] + ScorePads[(int)Difficulty.Oni].CrownCount[i];
}
#endregion
/*
#region [Legacy]
if (song.eード種別 == C曲リストード.Eード種別.BOX)
{
for (int i = 0; i < ScoreRankCount.Length; i++)
{
ScoreRankCount[i] += song.list子リスト.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nスコアランク[3] == (i + 1)).Count();
ScoreRankCount[i] += song.list子リスト.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nスコアランク[4] == (i + 1)).Count();
}
for (int i = 0; i < CrownCount.Length; i++)
{
CrownCount[i] += song.list子リスト.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nクリア[3] == (i + 1)).Count();
CrownCount[i] += song.list子リスト.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nクリア[4] == (i + 1)).Count();
}
}
else
{
if (song.eード種別 == C曲リストード.Eード種別.SCORE)
{
for (int i = 0; i < ScoreRankCount.Length; i++)
{
ScoreRankCount[i] += TJAPlayer3.Songs管理.list曲ルート.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nスコアランク[3] == (i + 1)).Count();
ScoreRankCount[i] += TJAPlayer3.Songs管理.list曲ルート.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nスコアランク[4] == (i + 1)).Count();
}
for (int i = 0; i < CrownCount.Length; i++)
{
CrownCount[i] += TJAPlayer3.Songs管理.list曲ルート.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nクリア[3] == (i + 1)).Count();
CrownCount[i] += TJAPlayer3.Songs管理.list曲ルート.Where(a => a.eード種別 == C曲リストード.Eード種別.SCORE && a.arスコア[3] != null && a.arスコア[3]..nクリア[4] == (i + 1)).Count();
}
}
}
// UraOmote pad
for (int i = 0; i < ScorePads[(int)Difficulty.Edit + 1].ScoreRankCount.Length; i++)
{
ScorePads[(int)Difficulty.Edit + 1].ScoreRankCount[i] = ScorePads[(int)Difficulty.Edit].ScoreRankCount[i] + ScorePads[(int)Difficulty.Oni].ScoreRankCount[i];
}
for (int i = 0; i < ScorePads[(int)Difficulty.Edit + 1].CrownCount.Length; i++)
{
ScorePads[(int)Difficulty.Edit + 1].CrownCount[i] = ScorePads[(int)Difficulty.Edit].CrownCount[i] + ScorePads[(int)Difficulty.Oni].CrownCount[i];
}
#endregion
*/
}
@ -1662,10 +1623,33 @@ namespace TJAPlayer3
#endregion
}
#endregion
switch (r現在選択中の曲.eード種別)
if (r現在選択中の曲.eード種別 == C曲リストード.Eード種別.RANDOM)
{
#region [Random box]
if (TJAPlayer3.Tx.SongSelect_Bar_Genre_Random != null)
{
if (ctBoxOpen.n現在の値 >= 1300 && ctBoxOpen.n現在の値 <= 1940)
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.vc拡大縮小倍率.X = 1.0f - (float)Math.Sin(((ctBoxOpen.n現在の値 - 1300) * 0.28125f) * (Math.PI / 180)) * 1.0f;
else
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.vc拡大縮小倍率.X = 1.0f;
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, 640, 326 - BarAnimeCount, new Rectangle(0, 0, 632, 21));
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.vc拡大縮小倍率.Y = BarAnimeCount == 0 ? 1.0f : 1.0f + (float)(BarAnimeCount) / 23.6f;
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, 640, 360, new Rectangle(0, 21, 632, 48));
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.vc拡大縮小倍率.Y = 1.0f;
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random.t2D拡大率考慮中央基準描画(TJAPlayer3.app.Device, 640, 394 + BarAnimeCount, new Rectangle(0, 69, 632, 23));
}
#endregion
}
#endregion
switch (r現在選択中の曲.eード種別)
{
case C曲リストード.Eード種別.SCORE:
{
@ -1977,10 +1961,7 @@ namespace TJAPlayer3
#region [ private ]
//-----------------
private enum Eバー種別 { Score, Box, Other, BackBox }
public int[] ScoreRankCount = new int[7];
public int[] CrownCount = new int[3];
private enum Eバー種別 { Score, Box, Other, BackBox, Random }
// Edit + 1 => UraOmote ScorePad, add 2P later
public CScorePad[] ScorePads = new CScorePad[(int)Difficulty.Edit + 2] { new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad(), new CScorePad() };
@ -2126,6 +2107,9 @@ namespace TJAPlayer3
case C曲リストード.Eード種別.BACKBOX:
return Eバー種別.BackBox;
case C曲リストード.Eード種別.RANDOM:
return Eバー種別.Random;
}
}
return Eバー種別.Other;
@ -2332,46 +2316,21 @@ namespace TJAPlayer3
TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlay.Opacity = (int)255.0f;
}
}
if (eバー種別 != Eバー種別.BackBox)
if (eバー種別 == Eバー種別.Random)
{
TJAPlayer3.Tx.SongSelect_Bar_Genre_Random?.t2D描画(TJAPlayer3.app.Device, x, y);
}
else if (eバー種別 != Eバー種別.BackBox)
{
TJAPlayer3.Tx.SongSelect_Bar_Genre[boxType]?.t2D描画(TJAPlayer3.app.Device, x, y);
/*
if (this.nStrジャンルtoNum(strジャンル) == 0)
{
if (TJAPlayer3.Tx.SongSelect_Bar_Genre[0] != null)
TJAPlayer3.Tx.SongSelect_Bar_Genre[0].t2D描画(TJAPlayer3.app.Device, x, y);
}
else
{
for (int i = 0; i < TJAPlayer3.Skin.SongSelect_GenreName.Length; i++)
{
if (TJAPlayer3.Skin.SongSelect_GenreName[i] == strジャンル)
{
if (i + 1 >= TJAPlayer3.Skin.SongSelect_Bar_Genre_Count)
{
if (TJAPlayer3.Tx.SongSelect_Bar_Genre[0] != null)
TJAPlayer3.Tx.SongSelect_Bar_Genre[0].t2D描画(TJAPlayer3.app.Device, x, y);
break;
}
else
{
if (TJAPlayer3.Tx.SongSelect_Bar_Genre[i + 1] != null)
TJAPlayer3.Tx.SongSelect_Bar_Genre[i + 1].t2D描画(TJAPlayer3.app.Device, x, y);
break;
}
}
}
}
*/
if (TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlay != null)
TJAPlayer3.Tx.SongSelect_Bar_Genre_Overlay.t2D描画(TJAPlayer3.app.Device, x, y);
}
else
{
TJAPlayer3.Tx.SongSelect_Bar_Genre_Back.t2D描画(TJAPlayer3.app.Device, x, y);
TJAPlayer3.Tx.SongSelect_Bar_Genre_Back?.t2D描画(TJAPlayer3.app.Device, x, y);
}
if (eバー種別 == Eバー種別.Score)

View File

@ -678,14 +678,16 @@ namespace TJAPlayer3
{
// Maybe auxilliary don select here too ?
if (this.n現在選択中の曲の難易度 == (int)Difficulty.Tower)
if (this.n現在選択中の曲の難易度 >= (int)Difficulty.Tower)
{
if (TJAPlayer3.ConfigIni.nPlayerCount == 1)
{
// Init tower variables
CFloorManagement.reinitialize(this.r現在選択中の曲.arスコア[(int)Difficulty.Tower]..nLife);
if (this.n現在選択中の曲の難易度 == (int)Difficulty.Tower)
CFloorManagement.reinitialize(this.r現在選択中の曲.arスコア[(int)Difficulty.Tower]..nLife);
TJAPlayer3.Skin.sound曲決定音.t再生する();
TJAPlayer3.Skin.sound決定音.t再生する();
this.t曲を選択する();
}
else
@ -728,6 +730,13 @@ namespace TJAPlayer3
this.ctDonchan_Select.t開始(0, TJAPlayer3.Tx.SongSelect_Donchan_Select.Length - 1, 1000 / 45, TJAPlayer3.Timer);
}
break;
case C曲リストード.Eード種別.RANDOM:
{
this.t曲をランダム選択する();
this.ctDonchan_Select.t開始(0, TJAPlayer3.Tx.SongSelect_Donchan_Select.Length - 1, 1000 / 45, TJAPlayer3.Timer);
}
break;
}
goto Decided;
@ -1366,6 +1375,7 @@ namespace TJAPlayer3
{
song.stackランダム演奏番号.Push(numArray[k]);
}
if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力)
{
StringBuilder builder = new StringBuilder(0x400);
@ -1377,14 +1387,28 @@ namespace TJAPlayer3
Trace.TraceInformation(builder.ToString());
}
}
// Third assignment
this.r確定された曲 = song.listランダム用ードリスト[song.stackランダム演奏番号.Pop()];
this.n確定された曲の難易度[0] = this.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(this.r確定された曲);
if (TJAPlayer3.ConfigIni.nPlayerCount > 1)
{
this.n確定された曲の難易度[1] = this.act曲リスト.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(this.r確定された曲);
}
this.r確定されたスコア = this.r確定された曲.arスコア[this.n確定された曲の難易度[0]];
this.str確定された曲のジャンル = this.r確定された曲.strジャンル;
TJAPlayer3.Skin.sound曲決定音.t再生する();
this.eフェードアウト完了時の戻り値 = E戻り値.;
this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略
base.eフェーズID = CStage.Eフェーズ._NowLoading画面へのフェードアウト;
base.eフェーズID = CStage.Eフェーズ._NowLoading画面へのフェードアウト;
#region [Log]
if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力)
{
int[] numArray2 = song.stackランダム演奏番号.ToArray();
@ -1402,17 +1426,22 @@ namespace TJAPlayer3
builder2.Append("(なし)");
}
Trace.TraceInformation(builder2.ToString());
}
// TJAPlayer3.Skin.bgm選曲画面.t停止する();
}
#endregion
CSongSelectSongManager.stopSong();
}
private void t曲を選択する()
{
// First assignation
this.r確定された曲 = this.act曲リスト.r現在選択中の曲;
this.r確定されたスコア = this.act曲リスト.r現在選択中のスコア;
this.n確定された曲の難易度[0] = this.act曲リスト.n現在選択中の曲の現在の難易度レベル;
this.str確定された曲のジャンル = this.r確定された曲.strジャンル;
if ((this.r確定された曲 != null) && (this.r確定されたスコア != null))
{
this.eフェードアウト完了時の戻り値 = E戻り値.;
@ -1427,8 +1456,10 @@ namespace TJAPlayer3
// Second assignation
this.r確定された曲 = this.act曲リスト.r現在選択中の曲;
this.r確定されたスコア = this.act曲リスト.r現在選択中のスコア;
this.n確定された曲の難易度[player] = nCurrentLevel;
this.str確定された曲のジャンル = this.r確定された曲.strジャンル;
if ((this.r確定された曲 != null) && (this.r確定されたスコア != null))
{
this.eフェードアウト完了時の戻り値 = E戻り値.;
@ -1439,6 +1470,8 @@ namespace TJAPlayer3
// TJAPlayer3.Skin.bgm選曲画面.t停止する();
CSongSelectSongManager.stopSong();
}
// Foreach randomly selectable songs
private List<C曲リストード> t指定された曲が存在する場所の曲を列挙する_子リスト含む(C曲リストード song)
{
List<C曲リストード> list = new List<C曲リストード>();
@ -1449,7 +1482,9 @@ namespace TJAPlayer3
{
if ((c曲リストード.eード種別 == C曲リストード.Eード種別.SCORE) || (c曲リストード.eード種別 == C曲リストード.Eード種別.SCORE_MIDI))
{
list.Add(c曲リストード);
// Don't add Dan/Tower charts for Random
if (c曲リストード.arスコア[(int)Difficulty.Tower] == null && c曲リストード.arスコア[(int)Difficulty.Dan] == null)
list.Add(c曲リストード);
}
if ((c曲リストード.list子リスト != null) && TJAPlayer3.ConfigIni.bランダムセレクトで子BOXを検索対象とする)
{
@ -1461,6 +1496,7 @@ namespace TJAPlayer3
this.t指定された曲の子リストの曲を列挙する_孫リスト含む(song, ref list);
return list;
}
private void t指定された曲の子リストの曲を列挙する_孫リスト含む(C曲リストード r親, ref List<C曲リストード> list)
{
if ((r親 != null) && (r親.list子リスト != null))

View File

@ -1035,7 +1035,7 @@ namespace TJAPlayer3
{
TJAPlayer3.Skin.sound決定音.t再生する();
if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] != (int)Difficulty.Dan
if (TJAPlayer3.stage選曲.n確定された曲の難易度[0] < (int)Difficulty.Tower
&& this.actParameterPanel.ct全体進行.n現在の値 < this.actParameterPanel.MountainAppearValue)
{
this.actParameterPanel.tSkipResultAnimations();