X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/6c2a32385728be100bce7c33aca3945ffc42ae4b..6f214ac0ef5899987197c2e4c9baa0b51a04c197:/src/sim/w_sound.c diff --git a/src/sim/w_sound.c b/src/sim/w_sound.c index 1c11202..a903ae7 100644 --- a/src/sim/w_sound.c +++ b/src/sim/w_sound.c @@ -145,7 +145,8 @@ static int SoundInitialized = 0; Mix_Chunk *rumble; -InitializeSound() +void +InitializeSound(void) { int reserved_chans; char buf[256]; @@ -184,6 +185,7 @@ InitializeSound() } +void ShutDownSound() { int i; @@ -204,6 +206,7 @@ ShutDownSound() } +void MakeSound(char *channel, char *id) { char buf[256]; @@ -237,15 +240,7 @@ MakeSound(char *channel, char *id) fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError()); } -MakeSoundOn(SimView *view, char *channel, char *id) -{ - if (!UserSoundOn) return; - if (!SoundInitialized) return; - - MakeSound(channel, id); -} - - +void StartBulldozer(void) { if (!UserSoundOn) return; @@ -258,6 +253,7 @@ StartBulldozer(void) } +void StopBulldozer(void) { if (!UserSoundOn) return; @@ -267,49 +263,110 @@ StopBulldozer(void) } #else /* WITH_SDL_MIXER */ +void InitializeSound() { + SoundInitialized = 1; } +void ShutDownSound() { + SoundInitialized = 0; } +void MakeSound(char *channel, char *id) { -} + char filename[256], player[256]; + static struct timeval last = {0, 0}; + struct timeval now; + unsigned int diff; + int i; + pid_t pid; -MakeSoundOn(SimView *view, char *channel, char *id) -{ + gettimeofday(&now, NULL); + + diff = ((now.tv_sec - last.tv_sec) * 1000000) + + (now.tv_usec - last.tv_usec); + + if (diff < 100000) + return; + + last = now; + + if (!UserSoundOn) return; + if (!SoundInitialized) return; + + for (i = 0; i < SIM_NSOUNDS; i++) { + if (!strcmp(sounds[i].id, id)) + break; + } + + snprintf(filename, sizeof(filename), "%s/sounds/%s", ResourceDir, + sounds[i].file); + + snprintf(player, sizeof(player), "%s/sounds/player", ResourceDir); + + pid = fork(); + + switch(pid) { + case 0: + execl(player, player, filename, NULL); + exit(1); + break; + case -1: + perror("fork failed"); + break; + default: + break; + } } +void StartBulldozer(void) { + MakeSound(0, "Rumble"); } +void StopBulldozer(void) { } #endif +void +MakeSoundOn(SimView *view, char *channel, char *id) +{ + if (!UserSoundOn) return; + if (!SoundInitialized) return; + + MakeSound(channel, id); +} + + /* XXX comefrom: doKeyEvent */ +void SoundOff(void) { ShutDownSound(); } +void DoStartSound(char *channel, char *id) { MakeSound(channel, id); } +void DoStopSound(char *id) { StopBulldozer(); } +int SoundCmd(CLIENT_ARGS) { if (!strcmp(argv[2], "Rumble")) @@ -319,13 +376,15 @@ SoundCmd(CLIENT_ARGS) return 0; } +int DozerCmd(CLIENT_ARGS) { StopBulldozer(); return 0; } -sound_command_init() +void +sound_command_init(void) { Tcl_CreateCommand(tk_mainInterp, "playsound", SoundCmd, (ClientData)NULL, (void (*)()) NULL);