summaryrefslogtreecommitdiff
path: root/src/openttd.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/openttd.cpp')
-rw-r--r--src/openttd.cpp52
1 files changed, 35 insertions, 17 deletions
diff --git a/src/openttd.cpp b/src/openttd.cpp
index c27fc578f..7f88684e4 100644
--- 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;
-