1
0
mirror of synced 2024-11-12 01:50:47 +01:00

Chore/601 Refactor random song selection (#645)

* Refactor random song selection

* Found remaining references, removed and refactored
This commit is contained in:
Ashiro12138 2024-07-12 01:18:05 +10:00 committed by GitHub
parent a87343ca46
commit 56e830ea32
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 45 additions and 172 deletions

View File

@ -64,7 +64,6 @@ namespace TJAPlayer3
public int Openindex; public int Openindex;
public bool bIsOpenFolder; public bool bIsOpenFolder;
public Stack<int> stackランダム演奏番号 = new Stack<int>();
public string strジャンル = ""; public string strジャンル = "";
public string str本当のジャンル = ""; public string str本当のジャンル = "";
public CLocalizationData ldTitle = new CLocalizationData(); public CLocalizationData ldTitle = new CLocalizationData();

View File

@ -354,54 +354,28 @@ namespace TJAPlayer3
var mandatoryDiffs = new List<int>(); var mandatoryDiffs = new List<int>();
CSongListNode song = .currentBar; CSongListNode song = .currentBar;
song.stackランダム演奏番号.Clear();
song.listランダム用ードリスト = null;
if ((song.stackランダム演奏番号.Count == 0) || (song.listランダム用ードリスト == null))
{
if (song.listランダム用ードリスト == null)
{
List<CSongListNode> songs = new List<CSongListNode>(); List<CSongListNode> songs = new List<CSongListNode>();
TJAPlayer3.stageSongSelect.t指定された曲の子リストの曲を列挙する_孫リスト含む(song.rParentNode, ref songs, ref mandatoryDiffs, true); TJAPlayer3.stageSongSelect.t指定された曲の子リストの曲を列挙する_孫リスト含む(song.rParentNode, ref songs, ref mandatoryDiffs, true);
song.listランダム用ードリスト = songs; song.listランダム用ードリスト = songs;
}
int count = song.listランダム用ードリスト.Count; int selectableSongCount = song.listランダム用ードリスト.Count;
if (count == 0)
if (selectableSongCount == 0)
{ {
return false; return false;
} }
int[] numArray = new int[count];
for (int i = 0; i < count; i++) int randomSongIndex = TJAPlayer3.Random.Next(selectableSongCount);
{
numArray[i] = i;
}
for (int j = 0; j < (count * 1.5); j++)
{
int index = TJAPlayer3.Random.Next(count);
int num5 = TJAPlayer3.Random.Next(count);
int num6 = numArray[num5];
numArray[num5] = numArray[index];
numArray[index] = num6;
}
for (int k = 0; k < count; k++)
{
song.stackランダム演奏番号.Push(numArray[k]);
}
if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力) if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力)
{ {
StringBuilder builder = new StringBuilder(0x400); StringBuilder builder = new StringBuilder(0x400);
builder.Append(string.Format("ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count)); builder.Append(string.Format("Total number of songs to randomly choose from {0}. Randomly selected index {0}.", selectableSongCount, randomSongIndex));
for (int m = 0; m < count; m++)
{
builder.Append(string.Format("{0} ", numArray[m]));
}
Trace.TraceInformation(builder.ToString()); Trace.TraceInformation(builder.ToString());
} }
}
// Third assignment // Third assignment
TJAPlayer3.stageSongSelect.rChoosenSong = song.listランダム用ードリスト[song.stackランダム演奏番号.Pop()]; TJAPlayer3.stageSongSelect.rChoosenSong = song.listランダム用ードリスト[randomSongIndex];
TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] = (int)Difficulty.Dan; TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] = (int)Difficulty.Dan;
TJAPlayer3.stageSongSelect.r確定されたスコア = TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[TJAPlayer3.stageSongSelect.actSongList.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(TJAPlayer3.stageSongSelect.rChoosenSong)]; TJAPlayer3.stageSongSelect.r確定されたスコア = TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[TJAPlayer3.stageSongSelect.actSongList.n現在のアンカ難易度レベルに最も近い難易度レベルを返す(TJAPlayer3.stageSongSelect.rChoosenSong)];
@ -413,29 +387,6 @@ namespace TJAPlayer3
this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略 this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略
base.ePhaseID = CStage.EPhase.SongSelect_FadeOutToNowLoading; base.ePhaseID = CStage.EPhase.SongSelect_FadeOutToNowLoading;
#region [Log]
if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力)
{
int[] numArray2 = song.stackランダム演奏番号.ToArray();
StringBuilder builder2 = new StringBuilder(0x400);
builder2.Append("ランダムインデックスリスト残り: ");
if (numArray2.Length > 0)
{
for (int n = 0; n < numArray2.Length; n++)
{
builder2.Append(string.Format("{0} ", numArray2[n]));
}
}
else
{
builder2.Append("(なし)");
}
Trace.TraceInformation(builder2.ToString());
}
#endregion
CSongSelectSongManager.stopSong(); CSongSelectSongManager.stopSong();
return true; return true;

View File

@ -1797,53 +1797,25 @@ namespace TJAPlayer3
CSongListNode song = this.actSongList.rCurrentlySelectedSong; CSongListNode song = this.actSongList.rCurrentlySelectedSong;
song.stackランダム演奏番号.Clear();
song.listランダム用ードリスト = null;
if ((song.stackランダム演奏番号.Count == 0) || (song.listランダム用ードリスト == null))
{
if (song.listランダム用ードリスト == null)
{
song.listランダム用ードリスト = this.t指定された曲が存在する場所の曲を列挙する_子リスト含む(song, ref mandatoryDiffs); song.listランダム用ードリスト = this.t指定された曲が存在する場所の曲を列挙する_子リスト含む(song, ref mandatoryDiffs);
} int selectableSongCount = song.listランダム用ードリスト.Count;
int count = song.listランダム用ードリスト.Count;
if (count == 0) if (selectableSongCount == 0)
{ {
return; return;
} }
int[] numArray = new int[count];
for (int i = 0; i < count; i++) int randomSongIndex = TJAPlayer3.Random.Next(selectableSongCount);
{
numArray[i] = i;
}
for (int j = 0; j < (count * 1.5); j++)
{
int index = TJAPlayer3.Random.Next(count);
int num5 = TJAPlayer3.Random.Next(count);
int num6 = numArray[num5];
numArray[num5] = numArray[index];
numArray[index] = num6;
}
for (int k = 0; k < count; k++)
{
song.stackランダム演奏番号.Push(numArray[k]);
}
if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力) if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力)
{ {
StringBuilder builder = new StringBuilder(0x400); StringBuilder builder = new StringBuilder(0x400);
builder.Append(string.Format("ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count)); builder.Append(string.Format("Total number of songs to randomly choose from {0}. Randomly selected index {0}.", selectableSongCount, randomSongIndex));
for (int m = 0; m < count; m++)
{
builder.Append(string.Format("{0} ", numArray[m]));
}
Trace.TraceInformation(builder.ToString()); Trace.TraceInformation(builder.ToString());
} }
}
// Third assignment // Third assignment
this.rNowSelectedSong = song.listランダム用ードリスト[song.stackランダム演奏番号.Pop()]; this.rNowSelectedSong = song.listランダム用ードリスト[randomSongIndex];
actSongList.t現在選択中の曲を元に曲バーを再構成する(); actSongList.t現在選択中の曲を元に曲バーを再構成する();
actSongList.t選択曲が変更された(false); actSongList.t選択曲が変更された(false);

View File

@ -233,54 +233,28 @@ namespace TJAPlayer3
var mandatoryDiffs = new List<int>(); var mandatoryDiffs = new List<int>();
CSongListNode song = currentSong; CSongListNode song = currentSong;
song.stackランダム演奏番号.Clear();
song.listランダム用ードリスト = null;
if ((song.stackランダム演奏番号.Count == 0) || (song.listランダム用ードリスト == null))
{
if (song.listランダム用ードリスト == null)
{
List<CSongListNode> songs = new List<CSongListNode>(); List<CSongListNode> songs = new List<CSongListNode>();
TJAPlayer3.stageSongSelect.t指定された曲の子リストの曲を列挙する_孫リスト含む(song.rParentNode, ref songs, ref mandatoryDiffs, true, Difficulty.Tower); TJAPlayer3.stageSongSelect.t指定された曲の子リストの曲を列挙する_孫リスト含む(song.rParentNode, ref songs, ref mandatoryDiffs, true, Difficulty.Tower);
song.listランダム用ードリスト = songs; song.listランダム用ードリスト = songs;
}
int count = song.listランダム用ードリスト.Count; int selectableSongCount = song.listランダム用ードリスト.Count;
if (count == 0)
if (selectableSongCount == 0)
{ {
return false; return false;
} }
int[] numArray = new int[count];
for (int i = 0; i < count; i++) int randomSongIndex = TJAPlayer3.Random.Next(selectableSongCount);
{
numArray[i] = i;
}
for (int j = 0; j < (count * 1.5); j++)
{
int index = TJAPlayer3.Random.Next(count);
int num5 = TJAPlayer3.Random.Next(count);
int num6 = numArray[num5];
numArray[num5] = numArray[index];
numArray[index] = num6;
}
for (int k = 0; k < count; k++)
{
song.stackランダム演奏番号.Push(numArray[k]);
}
if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力) if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力)
{ {
StringBuilder builder = new StringBuilder(0x400); StringBuilder builder = new StringBuilder(0x400);
builder.Append(string.Format("ランダムインデックスリストを作成しました: {0}曲: ", song.stackランダム演奏番号.Count)); builder.Append(string.Format("Total number of songs to randomly choose from {0}. Randomly selected index {0}.", selectableSongCount, randomSongIndex));
for (int m = 0; m < count; m++)
{
builder.Append(string.Format("{0} ", numArray[m]));
}
Trace.TraceInformation(builder.ToString()); Trace.TraceInformation(builder.ToString());
} }
}
// Third assignment // Third assignment
TJAPlayer3.stageSongSelect.rChoosenSong = song.listランダム用ードリスト[song.stackランダム演奏番号.Pop()]; TJAPlayer3.stageSongSelect.rChoosenSong = song.listランダム用ードリスト[randomSongIndex];
TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] = (int)Difficulty.Tower; TJAPlayer3.stageSongSelect.nChoosenSongDifficulty[0] = (int)Difficulty.Tower;
CFloorManagement.reinitialize(TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[(int)Difficulty.Tower]..nLife); CFloorManagement.reinitialize(TJAPlayer3.stageSongSelect.rChoosenSong.arスコア[(int)Difficulty.Tower]..nLife);
@ -293,29 +267,6 @@ namespace TJAPlayer3
this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略 this.actFOtoNowLoading.tフェードアウト開始(); // #27787 2012.3.10 yyagi 曲決定時の画面フェードアウトの省略
base.ePhaseID = CStage.EPhase.SongSelect_FadeOutToNowLoading; base.ePhaseID = CStage.EPhase.SongSelect_FadeOutToNowLoading;
#region [Log]
if (TJAPlayer3.ConfigIni.bLogDTX詳細ログ出力)
{
int[] numArray2 = song.stackランダム演奏番号.ToArray();
StringBuilder builder2 = new StringBuilder(0x400);
builder2.Append("ランダムインデックスリスト残り: ");
if (numArray2.Length > 0)
{
for (int n = 0; n < numArray2.Length; n++)
{
builder2.Append(string.Format("{0} ", numArray2[n]));
}
}
else
{
builder2.Append("(なし)");
}
Trace.TraceInformation(builder2.ToString());
}
#endregion
CSongSelectSongManager.stopSong(); CSongSelectSongManager.stopSong();
return true; return true;