diff --git a/src/openttd.cpp b/src/openttd.cpp --- a/src/openttd.cpp +++ b/src/openttd.cpp @@ -41,7 +41,6 @@ #include "sound.h" #include "economy.h" #include "fileio.h" -#include "hal.h" #include "airport.h" #include "aircraft.h" #include "console.h" @@ -65,6 +64,9 @@ #include "player_face.h" #include "group.h" #include "blitter/factory.hpp" +#include "sound/sound_driver.hpp" +#include "music/music_driver.hpp" +#include "video/video_driver.hpp" #include "bridge_map.h" #include "clear_map.h" @@ -103,7 +105,7 @@ void CDECL error(const char *s, ...) va_end(va); ShowOSErrorBox(buf); - if (_video_driver != NULL) _video_driver->stop(); + if (_video_driver != NULL) _video_driver->Stop(); assert(0); exit(1); @@ -186,7 +188,8 @@ static void showhelp() lastof(buf) ); - p = GetDriverList(p, lastof(buf)); + /* List the drivers */ + p = VideoDriverFactoryBase::GetDriversInfo(p, lastof(buf)); /* List the blitters */ p = BlitterFactoryBase::GetBlittersInfo(p, lastof(buf)); @@ -342,7 +345,7 @@ static void LoadIntroGame() MarkWholeScreenDirty(); /* Play main theme */ - if (_music_driver->is_song_playing()) ResetMusic(); + if (_music_driver->IsSongPlaying()) ResetMusic(); } #if defined(UNIX) && !defined(__MORPHOS__) @@ -514,16 +517,36 @@ int ttd_main(int argc, char *argv[]) DEBUG(misc, 1, "Loading blitter '%s'...", blitter); if (BlitterFactoryBase::SelectBlitter(blitter) == NULL) error("Failed to select requested blitter '%s'; does it exist?", blitter); + DEBUG(driver, 1, "Loading drivers..."); - LoadDriver(SOUND_DRIVER, _ini_sounddriver); - LoadDriver(MUSIC_DRIVER, _ini_musicdriver); - LoadDriver(VIDEO_DRIVER, _ini_videodriver); // load video last, to prevent an empty window while sound and music loads + + _sound_driver = (SoundDriver*)SoundDriverFactoryBase::SelectDriver(_ini_sounddriver, Driver::DT_SOUND); + if (_sound_driver == NULL) { + StrEmpty(_ini_sounddriver) ? + error("Failed to autoprobe sound driver") : + error("Failed to select requested sound driver '%s'", _ini_sounddriver); + } + + _music_driver = (MusicDriver*)MusicDriverFactoryBase::SelectDriver(_ini_musicdriver, Driver::DT_MUSIC); + if (_music_driver == NULL) { + StrEmpty(_ini_musicdriver) ? + error("Failed to autoprobe music driver") : + error("Failed to select requested music driver '%s'", _ini_musicdriver); + } + + _video_driver = (VideoDriver*)VideoDriverFactoryBase::SelectDriver(_ini_videodriver, Driver::DT_VIDEO); + if (_video_driver == NULL) { + StrEmpty(_ini_videodriver) ? + error("Failed to autoprobe video driver") : + error("Failed to select requested video driver '%s'", _ini_videodriver); + } + _savegame_sort_order = SORT_BY_DATE | SORT_DESCENDING; /* Initialize the zoom level of the screen to normal */ _screen.zoom = ZOOM_LVL_NORMAL; /* restore saved music volume */ - _music_driver->set_volume(msf.music_vol); + _music_driver->SetVolume(msf.music_vol); NetworkStartUp(); // initialize network-core @@ -594,16 +617,16 @@ int ttd_main(int argc, char *argv[]) } #endif /* ENABLE_NETWORK */ - _video_driver->main_loop(); + _video_driver->MainLoop(); WaitTillSaved(); IConsoleFree(); if (_network_available) NetworkShutDown(); // Shut down the network and close any open connections - _video_driver->stop(); - _music_driver->stop(); - _sound_driver->stop(); + _video_driver->Stop(); + _music_driver->Stop(); + _sound_driver->Stop(); /* only save config if we have to */ if (save_config) { @@ -2097,8 +2120,3 @@ void ReloadNewGRFData() /* redraw the whole screen */ MarkWholeScreenDirty(); } - -HalMusicDriver *_music_driver; -HalSoundDriver *_sound_driver; -HalVideoDriver *_video_driver; -