diff options
author | Morxemplum <morxemplum+github@gmail.com> | 2021-06-01 23:20:24 -0700 |
---|---|---|
committer | Morxemplum <morxemplum+github@gmail.com> | 2021-06-01 23:20:24 -0700 |
commit | 6a30c61a21c3154259b3267ec7133a36fbddf373 (patch) | |
tree | a8c5d6e3bf82203aea26ac134f88fb618e252859 | |
parent | b37d7a824be573b1e0199d958c23196008ae7bf9 (diff) |
Replays save music starting informationmusic_timeline
-rw-r--r-- | include/SSVOpenHexagon/Core/HexagonGame.hpp | 1 | ||||
-rw-r--r-- | include/SSVOpenHexagon/Core/Replay.hpp | 1 | ||||
-rw-r--r-- | src/SSVOpenHexagon/Core/HexagonGame.cpp | 14 | ||||
-rw-r--r-- | src/SSVOpenHexagon/Core/Replay.cpp | 23 |
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( |