summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMorxemplum <morxemplum+github@gmail.com>2021-06-01 23:20:24 -0700
committerMorxemplum <morxemplum+github@gmail.com>2021-06-01 23:20:24 -0700
commit6a30c61a21c3154259b3267ec7133a36fbddf373 (patch)
treea8c5d6e3bf82203aea26ac134f88fb618e252859
parentb37d7a824be573b1e0199d958c23196008ae7bf9 (diff)
Replays save music starting informationmusic_timeline
-rw-r--r--include/SSVOpenHexagon/Core/HexagonGame.hpp1
-rw-r--r--include/SSVOpenHexagon/Core/Replay.hpp1
-rw-r--r--src/SSVOpenHexagon/Core/HexagonGame.cpp14
-rw-r--r--src/SSVOpenHexagon/Core/Replay.cpp23
4 files changed, 26 insertions, 13 deletions
diff --git a/include/SSVOpenHexagon/Core/HexagonGame.hpp b/include/SSVOpenHexagon/Core/HexagonGame.hpp
index 3e8910c1..e527a5d4 100644
--- a/include/SSVOpenHexagon/Core/HexagonGame.hpp
+++ b/include/SSVOpenHexagon/Core/HexagonGame.hpp
@@ -89,6 +89,7 @@ private:
sf::Font& font;
Audio* audio;
+ MusicData::Segment segment;
const LevelData* levelData;
diff --git a/include/SSVOpenHexagon/Core/Replay.hpp b/include/SSVOpenHexagon/Core/Replay.hpp
index 5198ee1d..dc584cc4 100644
--- a/include/SSVOpenHexagon/Core/Replay.hpp
+++ b/include/SSVOpenHexagon/Core/Replay.hpp
@@ -120,6 +120,7 @@ struct replay_file
replay_data _data; // Input data.
std::string _pack_id; // Id of the selected pack.
std::string _level_id; // Id of the played level.
+ float _music_start_time; // The music time the player was on.
bool _first_play; // If this was achieved on first level play.
float _difficulty_mult; // Played difficulty multiplier.
double _played_score; // Played score (This can be an overridden score or
diff --git a/src/SSVOpenHexagon/Core/HexagonGame.cpp b/src/SSVOpenHexagon/Core/HexagonGame.cpp
index 9539f174..be59a59f 100644
--- a/src/SSVOpenHexagon/Core/HexagonGame.cpp
+++ b/src/SSVOpenHexagon/Core/HexagonGame.cpp
@@ -583,6 +583,7 @@ void HexagonGame::newGame(const std::string& mPackId, const std::string& mId,
._data{lastReplayData},
._pack_id{mPackId},
._level_id{mId},
+ ._music_start_time{segment.time},
._first_play{lastFirstPlay},
._difficulty_mult{mDifficultyMult},
._played_score{lastPlayedScore},
@@ -603,6 +604,7 @@ void HexagonGame::newGame(const std::string& mPackId, const std::string& mId,
rng = random_number_generator{activeReplay->replayFile._seed};
firstPlay = activeReplay->replayFile._first_play;
+
}
// Audio cleanup
@@ -613,7 +615,14 @@ void HexagonGame::newGame(const std::string& mPackId, const std::string& mId,
if(!Config::getNoMusic())
{
- playLevelMusic();
+ if(!executeLastReplay)
+ {
+ playLevelMusic();
+ }
+ else
+ {
+ playLevelMusicAtTime(activeReplay->replayFile._music_start_time);
+ }
audio->pauseMusic();
refreshMusicPitch();
}
@@ -1324,8 +1333,7 @@ void HexagonGame::playLevelMusic()
{
if(shouldPlayMusic())
{
- const MusicData::Segment segment =
- musicData.playRandomSegment(getPackId(), *audio);
+ segment = musicData.playRandomSegment(getPackId(), *audio);
musicTimelineRunner.clearLastTp();
// TODO (P1): problems with addHash in headless mode:
status.beatPulseDelay += segment.beatPulseDelayOffset;
diff --git a/src/SSVOpenHexagon/Core/Replay.cpp b/src/SSVOpenHexagon/Core/Replay.cpp
index b8f2b6cd..67e9070b 100644
--- a/src/SSVOpenHexagon/Core/Replay.cpp
+++ b/src/SSVOpenHexagon/Core/Replay.cpp
@@ -195,14 +195,15 @@ void replay_player::reset() noexcept
[[nodiscard]] bool replay_file::operator==(
const replay_file& rhs) const noexcept
{
- return _version == rhs._version && //
- _player_name == rhs._player_name && //
- _seed == rhs._seed && //
- _data == rhs._data && //
- _pack_id == rhs._pack_id && //
- _level_id == rhs._level_id && //
- _first_play == rhs._first_play && //
- _difficulty_mult == rhs._difficulty_mult && //
+ return _version == rhs._version && //
+ _player_name == rhs._player_name && //
+ _seed == rhs._seed && //
+ _data == rhs._data && //
+ _pack_id == rhs._pack_id && //
+ _level_id == rhs._level_id && //
+ _music_start_time == rhs._music_start_time && //
+ _first_play == rhs._first_play && //
+ _difficulty_mult == rhs._difficulty_mult && //
_played_score == rhs._played_score;
}
@@ -260,6 +261,7 @@ void replay_player::reset() noexcept
SSVOH_TRY(write_str(_pack_id));
SSVOH_TRY(write_str(_level_id));
+ SSVOH_TRY(write(_music_start_time));
SSVOH_TRY(write(_first_play));
SSVOH_TRY(write(_difficulty_mult));
SSVOH_TRY(write(_played_score));
@@ -316,6 +318,7 @@ void replay_player::reset() noexcept
SSVOH_TRY(read_str(_pack_id));
SSVOH_TRY(read_str(_level_id));
+ SSVOH_TRY(read(_music_start_time));
SSVOH_TRY(read(_first_play));
SSVOH_TRY(read(_difficulty_mult));
SSVOH_TRY(read(_played_score));
@@ -416,8 +419,8 @@ static constexpr std::size_t buf_size{2097152}; // 2MB
[[nodiscard]] std::string replay_file::create_filename() const
{
- return Utils::concat(_version, '_', _player_name, '_', _pack_id, '_',
- _level_id, '_', _difficulty_mult, '_', _played_score, ".ohreplay");
+ return Utils::concat(_version, '_', _player_name, '_', _level_id, '_',
+ _difficulty_mult, '_', _played_score, ".ohreplay");
}
[[nodiscard]] bool compressed_replay_file::serialize_to_file(