mirror of
https://github.com/kichikuou/system3-sdl2.git
synced 2026-10-12 09:18:21 +03:00
Force FM/MIDI audio when CD audio is not available
If CD audio is not available (no playlist) but CD playback is specified, MAKO::play() falls back to FM/MIDI. Also, on Windows, gray out the "CD Audio" menu item if CD audio is not available.
This commit is contained in:
@@ -38,6 +38,7 @@ void sys_warning(const char* format, ...);
|
||||
extern uint32_t sdl_custom_event_type;
|
||||
enum CustomEvent {
|
||||
DEBUGGER_COMMAND,
|
||||
DISABLE_CD_MENU,
|
||||
};
|
||||
|
||||
// resource.cpp
|
||||
|
||||
@@ -50,7 +50,7 @@ void MAKO::play_music(int page)
|
||||
stop_music();
|
||||
|
||||
int track = page < 100 ? cd_track[page] : 0;
|
||||
if (track) {
|
||||
if (track && is_cd_available()) {
|
||||
EM_ASM_ARGS({ xsystem35.cdPlayer.play($0, $1); },
|
||||
cd_track[page] + 1, next_loop ? 0 : 1);
|
||||
} else {
|
||||
|
||||
@@ -98,7 +98,7 @@ void MAKO::play_music(int page)
|
||||
stop_music();
|
||||
|
||||
int track = page < 100 ? cd_track[page] : 0;
|
||||
if (track) {
|
||||
if (track && is_cd_available()) {
|
||||
if (track < playlist.size() && playlist[track]) {
|
||||
#ifdef __ANDROID__
|
||||
// Mix_LoadMUS uses SDL_RWFromFile which requires absolute path on Android
|
||||
|
||||
+7
-1
@@ -206,6 +206,12 @@ MAKO::MAKO(const Config& config, const GameId& game_id) :
|
||||
{
|
||||
if (!config.playlist.empty())
|
||||
load_playlist(config.playlist.c_str());
|
||||
if (!is_cd_available()) {
|
||||
SDL_Event event = {};
|
||||
event.user.type = sdl_custom_event_type;
|
||||
event.user.code = DISABLE_CD_MENU;
|
||||
SDL_PushEvent(&event);
|
||||
}
|
||||
|
||||
amus.open("AMUS.DAT");
|
||||
awav.open("AWAV.DAT");
|
||||
@@ -283,7 +289,7 @@ void MAKO::play_music(int page)
|
||||
stop_music();
|
||||
|
||||
size_t track = page < 100 ? cd_track[page] : 0;
|
||||
if (track) {
|
||||
if (track && is_cd_available()) {
|
||||
if (track >= playlist.size() || !playlist[track])
|
||||
return;
|
||||
music = new Music(playlist[track], next_loop);
|
||||
|
||||
@@ -173,6 +173,20 @@ void NACT::set_skip_menu_state(bool enabled, bool checked)
|
||||
|
||||
bool NACT::handle_platform_event(const SDL_Event& e)
|
||||
{
|
||||
if (e.type == sdl_custom_event_type) {
|
||||
switch (e.user.code) {
|
||||
case DISABLE_CD_MENU:
|
||||
{
|
||||
HWND hwnd = get_hwnd(g_window);
|
||||
HMENU hmenu = GetMenu(hwnd);
|
||||
EnableMenuItem(hmenu, ID_OPTION_CD, MF_GRAYED);
|
||||
DrawMenuBar(hwnd);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
if (e.type != SDL_SYSWMEVENT)
|
||||
return false;
|
||||
const SDL_SysWMmsg* msg = e.syswm.msg;
|
||||
|
||||
Reference in New Issue
Block a user