Skip to content

Commit af2c1f3

Browse files
committed
?
1 parent 915c486 commit af2c1f3

File tree

5 files changed

+50
-14
lines changed

5 files changed

+50
-14
lines changed

src/FMODAudioEngine.cpp

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,26 @@ float stupidAccmulatorTooLazyToPutElsewhere = 0;
1010

1111
class $modify(MenuLoopFMODHook, FMODAudioEngine) {
1212
void update(float dt) {
13-
FMODAudioEngine::update(dt);
13+
constexpr int channelNumber = 0;
14+
15+
FMOD::Channel* menuLoopChannelProbably = FMODAudioEngine::get()->getActiveMusicChannel(channelNumber);
1416
SongManager& songManager = SongManager::get();
15-
if (songManager.getPauseSongPositionTracking() || GJBaseGameLayer::get() || VANILLA_GD_MENU_LOOP_DISABLED) {
17+
18+
bool isPlaying = false;
19+
menuLoopChannelProbably->isPlaying(&isPlaying);
20+
songManager.setWasPlaying(isPlaying);
21+
22+
FMODAudioEngine::update(dt);
23+
24+
menuLoopChannelProbably->isPlaying(&isPlaying);
25+
if ((!isPlaying && isPlaying != songManager.getWasPlaying()) || GJBaseGameLayer::get() || VANILLA_GD_MENU_LOOP_DISABLED) {
1626
if (stupidAccmulatorTooLazyToPutElsewhere != 0) stupidAccmulatorTooLazyToPutElsewhere = 0;
1727
return;
1828
}
1929

2030
if (SongManager::get().getAdvancedLogs()) stupidAccmulatorTooLazyToPutElsewhere += dt;
2131
else if (stupidAccmulatorTooLazyToPutElsewhere != 0) stupidAccmulatorTooLazyToPutElsewhere = 0;
2232

23-
constexpr int channelNumber = 0;
24-
25-
FMOD::Channel* menuLoopChannelProbably = FMODAudioEngine::get()->getActiveMusicChannel(channelNumber);
2633
const auto activeSong = FMODAudioEngine::get()->getActiveMusic(channelNumber);
2734
const auto songManagerSong = songManager.getCurrentSong();
2835
const bool isSongManagerSong = activeSong == songManagerSong;
@@ -37,16 +44,31 @@ class $modify(MenuLoopFMODHook, FMODAudioEngine) {
3744

3845
unsigned int position = 0;
3946
menuLoopChannelProbably->getPosition(&position, FMOD_TIMEUNIT_MS);
40-
if (position > songManager.getLastMenuLoopPosition()) songManager.setLastMenuLoopPosition(position); // so the problem with trying to move this logic to GJBGL::init() is that by the time GJBGL::init() is called, FMOD's menu loop track has already been stopped and its position resets to 0. hence why we are here instead.
47+
log::info("FMOD UPDATE songManager.getPauseSongPositionTracking(): {}", songManager.getPauseSongPositionTracking());
48+
log::info("FMOD UPDATE songManager.getPauseSongPositionTracking(): {}", songManager.getPauseSongPositionTracking());
49+
log::info("FMOD UPDATE songManager.getPauseSongPositionTracking(): {}", songManager.getPauseSongPositionTracking());
50+
log::info("FMOD UPDATE songManager.getPauseSongPositionTracking(): {}", songManager.getPauseSongPositionTracking());
51+
log::info("FMOD UPDATE songManager.getPauseSongPositionTracking(): {}", songManager.getPauseSongPositionTracking());
52+
log::info("FMOD UPDATE songManager.getPauseSongPositionTracking(): {}", songManager.getPauseSongPositionTracking());
53+
log::info("FMOD UPDATE songManager.getPauseSongPositionTracking(): {}", songManager.getPauseSongPositionTracking());
54+
55+
log::info("FMOD UPDATE songManager.getLastMenuLoopPosition(): {}", songManager.getLastMenuLoopPosition());
56+
log::info("FMOD UPDATE songManager.getLastMenuLoopPosition(): {}", songManager.getLastMenuLoopPosition());
57+
log::info("FMOD UPDATE songManager.getLastMenuLoopPosition(): {}", songManager.getLastMenuLoopPosition());
58+
log::info("FMOD UPDATE songManager.getLastMenuLoopPosition(): {}", songManager.getLastMenuLoopPosition());
59+
log::info("FMOD UPDATE songManager.getLastMenuLoopPosition(): {}", songManager.getLastMenuLoopPosition());
60+
log::info("FMOD UPDATE songManager.getLastMenuLoopPosition(): {}", songManager.getLastMenuLoopPosition());
61+
log::info("FMOD UPDATE songManager.getLastMenuLoopPosition(): {}", songManager.getLastMenuLoopPosition());
62+
if (!songManager.getPauseSongPositionTracking()) {
63+
songManager.setLastMenuLoopPosition(position); // so the problem with trying to move this logic to GJBGL::init() is that by the time GJBGL::init() is called, FMOD's menu loop track has already been stopped and its position resets to 0. hence why we are here instead.
64+
}
4165

4266
if (!songManager.getConstantShuffleMode() || songManager.isOverride()) return;
4367
if (GJBaseGameLayer::get() || songManager.isOriginalMenuLoop() || songManager.getSongsSize() < 2) return;
4468

45-
bool isPlaying = true;
4669
FMOD::Sound* sound;
4770
unsigned int length = 0;
4871
menuLoopChannelProbably->getCurrentSound(&sound);
49-
menuLoopChannelProbably->isPlaying(&isPlaying);
5072
sound->getLength(&length, 1);
5173

5274
if (SongManager::get().getAdvancedLogs() && stupidAccmulatorTooLazyToPutElsewhere > SECS_BETWEEN_LOGS) {

src/GJBaseGameLayer.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ class $modify(MenuLoopGJBGLHook, GJBaseGameLayer) {
99
}
1010
};
1111
bool init() {
12-
if (!GJBaseGameLayer::init()) return false;
13-
SongManager::get().setShouldRestoreMenuLoopPoint(false);
1412
SongManager::get().setPauseSongPositionTracking(true);
13+
if (!GJBaseGameLayer::init()) {
14+
SongManager::get().setPauseSongPositionTracking(false);
15+
return false;
16+
}
17+
SongManager::get().setShouldRestoreMenuLoopPoint(false);
1518
if (!Utils::getBool("playlistMode")) return true;
1619
const auto fmod = FMODAudioEngine::get();
1720
if (!fmod) return true;

src/SongManager.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,14 @@ bool SongManager::getPauseSongPositionTracking() const {
309309
return m_comingFromGJBGL;
310310
}
311311

312+
void SongManager::setWasPlaying(const bool value) {
313+
m_wasPlaying = value;
314+
}
315+
316+
bool SongManager::getWasPlaying() const {
317+
return m_wasPlaying;
318+
}
319+
312320
void SongManager::setFinishedCalculatingSongLengths(const bool value) {
313321
m_finishedCalculatingSongLengths = value;
314322
}

src/SongManager.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,8 @@ class SongManager {
9494
bool getVibecodedVentilla() const;
9595
void setPauseSongPositionTracking(const bool);
9696
bool getPauseSongPositionTracking() const;
97+
void setWasPlaying(const bool);
98+
bool getWasPlaying() const;
9799
void setFinishedCalculatingSongLengths(const bool);
98100
bool getFinishedCalculatingSongLengths() const;
99101

@@ -120,6 +122,7 @@ class SongManager {
120122
bool m_shouldRestoreMenuLoopPoint = false;
121123
bool m_vibecodedVentilla = false;
122124
bool m_comingFromGJBGL = false;
125+
bool m_wasPlaying = false;
123126
int m_lastPosition = 0;
124127
std::vector<std::string> m_blacklist {};
125128
std::vector<std::string> m_favorites {};

src/ui/SongControlMenu.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,6 @@ void SongControlMenu::onSkipBkwdButton(CCObject*) {
353353
const std::string& currSong = songManager.getCurrentSong();
354354
if (fmod->getActiveMusic(0) != currSong || !songManager.getSongToSongDataEntries().contains(currSong)) return;
355355

356-
songManager.setPauseSongPositionTracking(true);
357356
const int fullLength = songManager.getSongToSongDataEntries().find(songManager.getCurrentSong())->second.songLength;
358357
const int lastPosition = songManager.getLastMenuLoopPosition();
359358

@@ -363,12 +362,13 @@ void SongControlMenu::onSkipBkwdButton(CCObject*) {
363362
} else if (fullLength > 0 && fullLength < std::numeric_limits<unsigned int>::max()) {
364363
const int newPosition = ((((lastPosition % fullLength) + fullLength) % fullLength) - (5000 % fullLength) + fullLength) % fullLength;
365364
fmod->getActiveMusicChannel(0)->setPosition(newPosition, FMOD_TIMEUNIT_MS);
365+
songManager.setPauseSongPositionTracking(true);
366366
songManager.setLastMenuLoopPosition(newPosition);
367+
songManager.setPauseSongPositionTracking(false);
367368
}
368369
} else {
369370
fmod->getActiveMusicChannel(0)->setPosition(lastPosition - 5000, FMOD_TIMEUNIT_MS);
370371
}
371-
songManager.setPauseSongPositionTracking(false);
372372
}
373373

374374
void SongControlMenu::onSkipFwrdButton(CCObject*) {
@@ -382,20 +382,20 @@ void SongControlMenu::onSkipFwrdButton(CCObject*) {
382382
const int fullLength = songManager.getSongToSongDataEntries().find(songManager.getCurrentSong())->second.songLength;
383383
const int lastPosition = songManager.getLastMenuLoopPosition();
384384

385-
songManager.setPauseSongPositionTracking(true);
386385
if ((lastPosition + 5000) > fullLength) {
387386
if (songManager.getConstantShuffleMode()) {
388387
SongControl::shuffleSong();
389388
SongControlMenu::updateCurrentLabel();
390389
} else if (fullLength > 0 && fullLength < std::numeric_limits<unsigned int>::max()) {
391390
const int newPosition = ((((lastPosition % fullLength) + fullLength) % fullLength) + (5000 % fullLength)) % fullLength;
392391
fmod->getActiveMusicChannel(0)->setPosition(newPosition, FMOD_TIMEUNIT_MS);
392+
songManager.setPauseSongPositionTracking(true);
393393
songManager.setLastMenuLoopPosition(newPosition);
394+
songManager.setPauseSongPositionTracking(false);
394395
}
395396
} else {
396397
fmod->getActiveMusicChannel(0)->setPosition(lastPosition + 5000, FMOD_TIMEUNIT_MS);
397398
}
398-
songManager.setPauseSongPositionTracking(false);
399399
}
400400

401401
void SongControlMenu::updateCurrentLabel() {

0 commit comments

Comments
 (0)