/** * @brief Plays the sound in the first available channel. * * @param sound Sound to play. * @return Voice identifier on success. */ int sound_play( int sound ) { alVoice *v; alSound *s; if (sound_disabled) return 0; if ((sound < 0) || (sound >= sound_nlist)) return -1; /* Gets a new voice. */ v = voice_new(); /* Get the sound. */ s = &sound_list[sound]; /* Try to play the sound. */ if (sound_sys_play( v, s )) return -1; /* Set state and add to list. */ v->state = VOICE_PLAYING; v->id = ++voice_genid; voice_add(v); return v->id; }
/** * @brief Plays a sound based on position. * * @param sound Sound to play. * @param px X position of the sound. * @param py Y position of the sound. * @param vx X velocity of the sound. * @param vy Y velocity of the sound. * @return Voice identifier on success. */ int sound_playPos( int sound, double px, double py, double vx, double vy ) { alVoice *v; alSound *s; if (sound_disabled) return 0; if ((sound < 0) || (sound >= sound_nlist)) return -1; /* Gets a new voice. */ v = voice_new(); /* Get the sound. */ s = &sound_list[sound]; /* Try to play the sound. */ if (sound_sys_playPos( v, s, px, py, vx, vy )) return -1; /* Actually add the voice to the list. */ v->state = VOICE_PLAYING; v->id = ++voice_genid; voice_add(v); return v->id; }
/** * @brief Plays a sound based on position. * * @param sound Sound to play. * @param px X position of the sound. * @param py Y position of the sound. * @param vx X velocity of the sound. * @param vy Y velocity of the sound. * @return Voice identifier on success. */ int sound_playPos( int sound, double px, double py, double vx, double vy ) { alVoice *v; alSound *s; Pilot *p; double cx, cy, dist; int target; if (sound_disabled) return 0; if ((sound < 0) || (sound >= sound_nlist)) return -1; target = cam_getTarget(); /* Following a pilot. */ p = pilot_get(target); if (target && (p != NULL)) { if (!pilot_inRange( p, px, py )) return 0; } /* Set to a position. */ else { cam_getPos(&cx, &cy); dist = pow2(px - cx) + pow2(py - cy); if (dist > pilot_sensorRange()) return 0; } /* Gets a new voice. */ v = voice_new(); /* Get the sound. */ s = &sound_list[sound]; /* Try to play the sound. */ if (sound_sys_playPos( v, s, px, py, vx, vy )) return -1; /* Actually add the voice to the list. */ v->state = VOICE_PLAYING; v->id = ++voice_genid; voice_add(v); return v->id; }