X-Git-Url: http://git.zerfleddert.de/cgi-bin/gitweb.cgi/micropolis/blobdiff_plain/c926d3309ace0ecb51582617fb45c6297f22f886..6f214ac0ef5899987197c2e4c9baa0b51a04c197:/src/sim/w_sound.c diff --git a/src/sim/w_sound.c b/src/sim/w_sound.c index a7dae78..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,6 +240,7 @@ MakeSound(char *channel, char *id) fprintf(stderr, "Mix_PlayChannel: %s\n", Mix_GetError()); } +void StartBulldozer(void) { if (!UserSoundOn) return; @@ -249,6 +253,7 @@ StartBulldozer(void) } +void StopBulldozer(void) { if (!UserSoundOn) return; @@ -258,22 +263,38 @@ 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; + 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; @@ -292,6 +313,7 @@ MakeSound(char *channel, char *id) switch(pid) { case 0: execl(player, player, filename, NULL); + exit(1); break; case -1: perror("fork failed"); @@ -301,17 +323,20 @@ MakeSound(char *channel, char *id) } } +void StartBulldozer(void) { MakeSound(0, "Rumble"); } +void StopBulldozer(void) { } #endif +void MakeSoundOn(SimView *view, char *channel, char *id) { if (!UserSoundOn) return; @@ -322,22 +347,26 @@ MakeSoundOn(SimView *view, char *channel, char *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")) @@ -347,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);