src/openttd.cpp
changeset 7666 a5fccd76176a
parent 7648 dde14ba48325
child 7682 263dbeceba12
--- a/src/openttd.cpp	Thu Jul 05 06:35:09 2007 +0000
+++ b/src/openttd.cpp	Thu Jul 05 12:23:54 2007 +0000
@@ -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 @@
 	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 @@
 		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 @@
 	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 @@
 	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 @@
 	}
 #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 @@
 	/* redraw the whole screen */
 	MarkWholeScreenDirty();
 }
-
-HalMusicDriver *_music_driver;
-HalSoundDriver *_sound_driver;
-HalVideoDriver *_video_driver;
-