Only store NotesPerMeasure and NpsPerMeasure values per-player if the steps type has different steps per player.

This commit is contained in:
Michael Votaw
2025-02-16 13:05:45 -06:00
committed by teejusb
parent fd790eb83e
commit 2625394ac0
6 changed files with 168 additions and 87 deletions
+38 -26
View File
@@ -412,21 +412,27 @@ void SetNpsPerMeasure(StepsTagInfo& info)
{
if (info.from_cache || info.for_load_edit)
{
std::vector<RString> values;
split((*info.params)[1], ",", values, true);
std::size_t measures_per_player = values.size() / NUM_PlayerNumber;
std::vector<std::vector<float>> npsPerMeasure;
npsPerMeasure.resize(NUM_PLAYERS);
FOREACH_PlayerNumber(pn)
std::vector<RString> valuesPerPlayer;
split((*info.params)[1], "|", valuesPerPlayer, true);
if(valuesPerPlayer.size() > NUM_PlayerNumber)
{
npsPerMeasure[pn].resize(measures_per_player, 0);
for(std::size_t i= 0; i < measures_per_player; ++i)
{
npsPerMeasure[pn][i]= StringToFloat(values[pn * measures_per_player + i]);
}
LOG->Warn("#NPSPERMEASURE has more sections (%zu) than possible number of players (%d)!", valuesPerPlayer.size(), NUM_PlayerNumber);
}
for(std::size_t pn = 0; pn < valuesPerPlayer.size() && pn < NUM_PlayerNumber; pn++)
{
std::vector<RString> values;
split(valuesPerPlayer[pn], ",", values, true);
std::vector<int> npsPerMeasure;
npsPerMeasure.resize(values.size());
for(std::size_t i = 0; i < values.size(); i++)
{
npsPerMeasure[i] = StringToFloat(values[i]);
}
info.steps->SetCachedNotesPerMeasure(npsPerMeasure, static_cast<PlayerNumber>(pn));
}
info.steps->SetCachedNpsPerMeasure(npsPerMeasure);
}
else
{
@@ -439,21 +445,27 @@ void SetNotesPerMeasure(StepsTagInfo& info)
{
if (info.from_cache || info.for_load_edit)
{
std::vector<RString> values;
split((*info.params)[1], ",", values, true);
std::size_t measures_per_player = values.size() / NUM_PlayerNumber;
std::vector<std::vector<int>> notesPerMeasure;
notesPerMeasure.resize(NUM_PLAYERS);
FOREACH_PlayerNumber(pn)
std::vector<RString> valuesPerPlayer;
split((*info.params)[1], "|", valuesPerPlayer, true);
if(valuesPerPlayer.size() > NUM_PlayerNumber)
{
notesPerMeasure[pn].resize(measures_per_player, 0);
for(std::size_t i= 0; i < measures_per_player; ++i)
{
notesPerMeasure[pn][i]= StringToInt(values[pn * measures_per_player + i]);
}
LOG->Warn("#NOTESPERMEASURE has more sections (%zu) than possible number of players (%d)!", valuesPerPlayer.size(), NUM_PlayerNumber);
}
for(std::size_t pn = 0; pn < valuesPerPlayer.size() && pn < NUM_PlayerNumber; pn++)
{
std::vector<RString> values;
split(valuesPerPlayer[pn], ",", values, true);
std::vector<int> notesPerMeasure;
notesPerMeasure.resize(values.size());
for(std::size_t i = 0; i < values.size(); i++)
{
notesPerMeasure[i] = StringToInt(values[i]);
}
info.steps->SetCachedNotesPerMeasure(notesPerMeasure, static_cast<PlayerNumber>(pn));
}
info.steps->SetCachedNotesPerMeasure(notesPerMeasure);
}
else
{