diff options
author | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-05 16:00:40 +0000 |
---|---|---|
committer | taw27 <taw27@84d2e878-0bd5-11dd-ad15-13eda11d74c5> | 2008-07-05 16:00:40 +0000 |
commit | ffa1f448097091bf185d66d18188fdc5e9923566 (patch) | |
tree | 18b83556c4668012af1cfa5f0a18375b779c42a3 /src | |
parent | 7e60489479958946be4f34c9fb8bb257dcc703b4 (diff) |
Option to disable music
Neater handling of game options
git-svn-id: svn://cook.msm.cam.ac.uk:745/thrust3d/thrust3d@130 84d2e878-0bd5-11dd-ad15-13eda11d74c5
Diffstat (limited to 'src')
-rw-r--r-- | src/audio.c | 9 | ||||
-rw-r--r-- | src/audio.h | 2 | ||||
-rw-r--r-- | src/game.c | 6 | ||||
-rw-r--r-- | src/game.h | 2 | ||||
-rw-r--r-- | src/main.c | 30 | ||||
-rw-r--r-- | src/types.h | 10 |
6 files changed, 42 insertions, 17 deletions
diff --git a/src/audio.c b/src/audio.c index 36c051a..f42a13a 100644 --- a/src/audio.c +++ b/src/audio.c @@ -349,7 +349,7 @@ done: /* Success */ } /* SDL audio initial setup */ -AudioContext *audio_setup(int debug) { +AudioContext *audio_setup(int debug, int no_music) { AudioContext *a; SDL_AudioSpec fmt; @@ -387,7 +387,12 @@ AudioContext *audio_setup(int debug) { return NULL; } - audio_play(a, "kraftwerk", 0.5, 1); + if ( !no_music ) { + audio_play(a, "kraftwerk", 0.5, 1); + } else { + if ( a->debug ) printf("AU: Music disabled.\n"); + } + audio_play(a, "moan", 0.2, 1); return a; diff --git a/src/audio.h b/src/audio.h index e7a5d73..0e159a5 100644 --- a/src/audio.h +++ b/src/audio.h @@ -18,7 +18,7 @@ #include "types.h" -extern AudioContext *audio_setup(int debug); +extern AudioContext *audio_setup(int debug, int no_music); extern void audio_shutdown(AudioContext *ctx); extern void audio_play(AudioContext *a, char *name, float volume, int repeat); @@ -224,7 +224,7 @@ static void game_load_all_connected(Game *game) { } /* Create a new "game" structure */ -Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int disable_shaders, int audio_debug) { +Game *game_new(int width, int height, GameOptions gameopts) { Game *g; @@ -252,7 +252,7 @@ Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int di g->radiation = 0.1; /* Renderer setup */ - g->render = render_setup(width, height, disable_vbos, disable_fbos, disable_shaders); + g->render = render_setup(width, height, gameopts.disable_vbos, gameopts.disable_fbos, gameopts.disable_shaders); if ( g->render == NULL ) { fprintf(stderr, "Couldn't initialise renderer\n"); free(g); @@ -261,7 +261,7 @@ Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int di /* Note: render_setup() initialises GLEW, which must be done before loading models. */ /* Audio setup */ - g->audio = audio_setup(audio_debug); + g->audio = audio_setup(gameopts.audio_debug, gameopts.no_music); if ( g->audio == NULL ) { fprintf(stderr, "Couldn't initialise audio\n"); free(g); @@ -21,7 +21,7 @@ #include "types.h" extern void game_check_handoff(Game *game); -extern Game *game_new(int width, int height, int disable_vbos, int disable_fbos, int disable_shaders, int audio_debug); +extern Game *game_new(int width, int height, GameOptions gameopts); extern void game_shutdown(Game *game); extern Room *game_find_room(Game *game, int rx, int ry, int rz); extern void game_pause(Game *game); @@ -51,19 +51,23 @@ int main(int argc, char *argv[]) { Uint32 video_flags; ScreenResolution res; Uint32 t = 0; + GameOptions gameopts; + + gameopts.disable_vbos = 0; + gameopts.disable_fbos = 0; + gameopts.disable_shaders = 0; + gameopts.audio_debug = 0; + gameopts.no_music = 0; - int disable_vbos = 0; - int disable_fbos = 0; - int disable_shaders = 0; - int audio_debug = 0; const struct option longopts[] = { {"fullscreen", 0, NULL, 'f'}, {"resolution", 1, NULL, 'r'}, {"help", 0, NULL, 'h'}, {"version", 0, NULL, 'v'}, - {"disable-vbos", 0, &disable_vbos, 1}, - {"disable-fbos", 0, &disable_fbos, 1}, - {"disable-shaders", 0, &disable_shaders, 1}, - {"audio-debug", 0, &audio_debug, 1}, + {"disable-vbos", 0, &gameopts.disable_vbos, 1}, + {"disable-fbos", 0, &gameopts.disable_fbos, 1}, + {"disable-shaders", 0, &gameopts.disable_shaders, 1}, + {"audio-debug", 0, &gameopts.audio_debug, 1}, + {"no-music", 0, NULL, 'n'}, {0, 0, NULL, 0} }; @@ -71,7 +75,7 @@ int main(int argc, char *argv[]) { width = 800; height = 600; video_flags = SDL_OPENGL; - while ((c = getopt_long(argc, argv, "hvr:f", longopts, NULL)) != -1) { + while ((c = getopt_long(argc, argv, "hvr:fn", longopts, NULL)) != -1) { switch ( c ) { @@ -99,6 +103,11 @@ int main(int argc, char *argv[]) { main_version(); return 0; } + + case 'n' : { + gameopts.no_music = 1; + break; + } case 'h' : { printf("Syntax: %s [options]\n\n", argv[0]); @@ -107,6 +116,7 @@ int main(int argc, char *argv[]) { printf(" -v, --version Display version number and exit.\n"); printf(" -r, --resolution <res> Set display resolution. See below for possible values for <res>.\n"); printf(" -f, --fullscreen Use the full screen.\n"); + printf(" -n, --no-music Don't play any background music.\n"); printf("\nAdvanced options:\n\n"); printf(" --disable-vbos Disable the use of vertex buffer objects.\n"); printf(" --disable-fbos Disable the use of framebuffer objects.\n"); @@ -168,7 +178,7 @@ int main(int argc, char *argv[]) { /* World setup */ Game *game; - game = game_new(width, height, disable_vbos, disable_fbos, disable_shaders, audio_debug); + game = game_new(width, height, gameopts); /* Main loop */ finished = 0; diff --git a/src/types.h b/src/types.h index 93fc623..d489be7 100644 --- a/src/types.h +++ b/src/types.h @@ -29,6 +29,16 @@ /* Maximum number of lights per room */ #define MAX_LIGHTS 4 +typedef struct { + + int disable_vbos; + int disable_fbos; + int disable_shaders; + int audio_debug; + int no_music; + +} GameOptions; + typedef enum { ATTRIB_NONE = 0, ATTRIB_COLOUR = 1<<0, /* Colour specified? */ |