X-Git-Url: https://git.jsancho.org/?a=blobdiff_plain;f=Source%2FSounds.cpp;h=6e1a75faab99912d8aad9c094b9ccfe641c7a2eb;hb=cd043e3f9e26c2b3406b40a354c2840941e9db7f;hp=c82f42ed3a4a58a5ccb10b5fcd3dfe29eba50cde;hpb=f4685cb5e78e8e8056448d1de1bb75edb9a4fb1b;p=lugaru.git diff --git a/Source/Sounds.cpp b/Source/Sounds.cpp index c82f42e..6e1a75f 100644 --- a/Source/Sounds.cpp +++ b/Source/Sounds.cpp @@ -3,22 +3,21 @@ Copyright (C) 2010 - Lugaru authors This file is part of Lugaru. -Lugaru is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. +Lugaru is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. -This program is distributed in the hope that it will be useful, +Lugaru is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +along with Lugaru. If not, see . */ +#include "Quaternions.h" #include "Sounds.h" #include "openal_wrapper.h" @@ -26,6 +25,8 @@ struct OPENAL_SAMPLE *samp[sounds_count]; int footstepsound, footstepsound2, footstepsound3, footstepsound4; +int channels[100]; + static const char *sound_data[sounds_count] = { #define DECLARE_SOUND(id, filename) filename, #include "Sounds.def" @@ -36,37 +37,81 @@ static const char *sound_data[sounds_count] = { // This should be decided at the time of playback static int snd_mode(int snd) { - switch (snd) - { + switch (snd) { case alarmsound: case consolefailsound: case consolesuccesssound: case firestartsound: case fireendsound: - return OPENAL_2D; + return OPENAL_2D; default: - return OPENAL_HW3D; + return OPENAL_HW3D; } } void loadAllSounds() { - for (int i = 0; i < sounds_count; i++) - { - char buf[64]; - snprintf(buf, 64, ":Data:Sounds:%s", sound_data[i]); - samp[i] = OPENAL_Sample_Load(OPENAL_FREE, - ConvertFileName(buf), - snd_mode(i), - 0, 0); + for (int i = 0; i < sounds_count; i++) { + char buf[64]; + snprintf(buf, 64, ":Data:Sounds:%s", sound_data[i]); + samp[i] = OPENAL_Sample_Load(OPENAL_FREE, + ConvertFileName(buf), + snd_mode(i), + 0, 0); } - footstepsound = footstepsn1; - footstepsound2 = footstepsn2; - footstepsound3 = footstepst1; - footstepsound4 = footstepst2; - // Huh? - // OPENAL_Sample_SetMode(samp[whooshsound], OPENAL_LOOP_NORMAL); - for (int i = stream_firesound; i <= stream_music3; i++) - OPENAL_Stream_SetMode(samp[i], OPENAL_LOOP_NORMAL); + footstepsound = footstepsn1; + footstepsound2 = footstepsn2; + footstepsound3 = footstepst1; + footstepsound4 = footstepst2; + // Huh? + // OPENAL_Sample_SetMode(samp[whooshsound], OPENAL_LOOP_NORMAL); + for (int i = stream_firesound; i <= stream_menutheme; i++) + OPENAL_Stream_SetMode(samp[i], OPENAL_LOOP_NORMAL); +} + +void +emit_sound_at(int soundid, const XYZ &pos, float vol) +{ + PlaySoundEx (soundid, samp[soundid], NULL, true); + OPENAL_3D_SetAttributes_ (channels[soundid], pos, NULL); + OPENAL_SetVolume (channels[soundid], vol); + OPENAL_SetPaused (channels[soundid], false); +} + +void +emit_sound_np(int soundid, float vol) +{ + PlaySoundEx (soundid, samp[soundid], NULL, true); + OPENAL_SetVolume (channels[soundid], vol); + OPENAL_SetPaused (channels[soundid], false); +} + +void +emit_stream_at(int soundid, const XYZ &pos, float vol) +{ + PlayStreamEx (soundid, samp[soundid], NULL, true); + OPENAL_3D_SetAttributes_ (channels[soundid], pos, NULL); + OPENAL_SetVolume (channels[soundid], vol); + OPENAL_SetPaused (channels[soundid], false); +} + +void +emit_stream_np(int soundid, float vol) +{ + PlayStreamEx (soundid, samp[soundid], NULL, true); + OPENAL_SetVolume (channels[soundid], vol); + OPENAL_SetPaused (channels[soundid], false); +} + +void +resume_stream(int soundid) +{ + OPENAL_SetPaused (channels[soundid], false); +} + +void +pause_sound(int soundid) +{ + OPENAL_SetPaused (channels[soundid], true); }