]> git.jsancho.org Git - lugaru.git/blobdiff - Source/openal_wrapper.cpp
Remove some extra declarations of "channels"
[lugaru.git] / Source / openal_wrapper.cpp
index 82ba31f568696baa95b565da476ae56fa10d9b05..5e832fb5bc6959099b292cc2eea29e4aeb22184b 100644 (file)
@@ -25,7 +25,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include <stdlib.h>
 #include <string.h>
 
+#include "Quaternions.h"
 #include "openal_wrapper.h"
+#include "Sounds.h"
 
 // NOTE:
 // FMOD uses a Left Handed Coordinate system, OpenAL uses a Right Handed
@@ -185,6 +187,16 @@ AL_API signed char OPENAL_3D_SetAttributes(int channel, const float *pos, const
     return true;
 }
 
+AL_API signed char OPENAL_3D_SetAttributes_(int channel, const XYZ &pos, const float *vel)
+{
+    if (!initialized) return false;
+    if ((channel < 0) || (channel >= num_channels)) return false;
+
+    set_channel_position(channel, pos.x, pos.y, -pos.z);
+
+    return true;
+}
+
 AL_API signed char OPENAL_Init(int mixrate, int maxsoftwarechannels, unsigned int flags)
 {
     if (initialized) return false;
@@ -264,14 +276,14 @@ AL_API void OPENAL_Close()
     initialized = false;
 }
 
-AL_API OPENAL_SAMPLE *OPENAL_GetCurrentSample(int channel)
+static OPENAL_SAMPLE *OPENAL_GetCurrentSample(int channel)
 {
     if (!initialized) return NULL;
     if ((channel < 0) || (channel >= num_channels)) return NULL;
     return impl_channels[channel].sample;
 }
 
-AL_API signed char OPENAL_GetPaused(int channel)
+static signed char OPENAL_GetPaused(int channel)
 {
     if (!initialized) return false;
     if ((channel < 0) || (channel >= num_channels)) return false;
@@ -283,7 +295,7 @@ AL_API signed char OPENAL_GetPaused(int channel)
     return((state == AL_PAUSED) ? true : false);
 }
 
-AL_API unsigned int OPENAL_GetLoopMode(int channel)
+static unsigned int OPENAL_GetLoopMode(int channel)
 {
     if (!initialized) return 0;
     if ((channel < 0) || (channel >= num_channels)) return 0;
@@ -294,7 +306,7 @@ AL_API unsigned int OPENAL_GetLoopMode(int channel)
     return OPENAL_LOOP_OFF;
 }
 
-AL_API signed char OPENAL_IsPlaying(int channel)
+static signed char OPENAL_IsPlaying(int channel)
 {
     if (!initialized) return false;
     if ((channel < 0) || (channel >= num_channels)) return false;
@@ -303,7 +315,7 @@ AL_API signed char OPENAL_IsPlaying(int channel)
     return((state == AL_PLAYING) ? true : false);
 }
 
-AL_API int OPENAL_PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused)
+static int OPENAL_PlaySoundEx(int channel, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused)
 {
     if (!initialized) return -1;
     if (sptr == NULL) return -1;
@@ -486,7 +498,7 @@ AL_API void OPENAL_Sample_Free(OPENAL_SAMPLE *sptr)
     }
 }
 
-AL_API signed char OPENAL_Sample_SetMode(OPENAL_SAMPLE *sptr, unsigned int mode)
+static signed char OPENAL_Sample_SetMode(OPENAL_SAMPLE *sptr, unsigned int mode)
 {
     if (!initialized) return false;
     if ((mode != OPENAL_LOOP_NORMAL) && (mode != OPENAL_LOOP_OFF)) return false;
@@ -591,18 +603,18 @@ AL_API void OPENAL_Stream_Close(OPENAL_STREAM *stream)
     OPENAL_Sample_Free((OPENAL_SAMPLE *) stream);
 }
 
-AL_API OPENAL_SAMPLE *OPENAL_Stream_GetSample(OPENAL_STREAM *stream)
+static OPENAL_SAMPLE *OPENAL_Stream_GetSample(OPENAL_STREAM *stream)
 {
     if (!initialized) return NULL;
     return (OPENAL_SAMPLE *) stream;
 }
 
-AL_API int OPENAL_Stream_PlayEx(int channel, OPENAL_STREAM *stream, OPENAL_DSPUNIT *dsp, signed char startpaused)
+static int OPENAL_Stream_PlayEx(int channel, OPENAL_STREAM *stream, OPENAL_DSPUNIT *dsp, signed char startpaused)
 {
     return OPENAL_PlaySoundEx(channel, (OPENAL_SAMPLE *) stream, dsp, startpaused);
 }
 
-AL_API signed char OPENAL_Stream_Stop(OPENAL_STREAM *stream)
+static signed char OPENAL_Stream_Stop(OPENAL_STREAM *stream)
 {
     if (!initialized) return false;
     for (int i = 0; i < num_channels; i++)
@@ -632,5 +644,59 @@ AL_API signed char OPENAL_SetOutput(int outputtype)
     return true;
 }
 
+extern int channels[];
+
+extern "C" void PlaySoundEx(int chan, OPENAL_SAMPLE *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused)
+{
+       const OPENAL_SAMPLE * currSample = OPENAL_GetCurrentSample(channels[chan]);
+       if (currSample && currSample == samp[chan])
+       {
+               if (OPENAL_GetPaused(channels[chan]))
+               {
+                       OPENAL_StopSound(channels[chan]);
+                       channels[chan] = OPENAL_FREE;
+               }
+               else if (OPENAL_IsPlaying(channels[chan]))
+               {
+                       int loop_mode = OPENAL_GetLoopMode(channels[chan]);
+                       if (loop_mode & OPENAL_LOOP_OFF)
+                       {
+                               channels[chan] = OPENAL_FREE;
+                       }
+               }
+       }
+       else
+       {
+               channels[chan] = OPENAL_FREE;
+       }
+
+       channels[chan] = OPENAL_PlaySoundEx(channels[chan], sptr, dsp, startpaused);
+       if (channels[chan] < 0)
+       {
+               channels[chan] = OPENAL_PlaySoundEx(OPENAL_FREE, sptr, dsp, startpaused);
+       }
+}
+
+extern "C" void PlayStreamEx(int chan, OPENAL_STREAM *sptr, OPENAL_DSPUNIT *dsp, signed char startpaused)
+{
+       const OPENAL_SAMPLE * currSample = OPENAL_GetCurrentSample(channels[chan]);
+       if (currSample && currSample == OPENAL_Stream_GetSample(sptr))
+       {
+                       OPENAL_StopSound(channels[chan]);
+                       OPENAL_Stream_Stop(sptr);
+       }
+       else
+       {
+               OPENAL_Stream_Stop(sptr);
+               channels[chan] = OPENAL_FREE;
+       }
+
+       channels[chan] = OPENAL_Stream_PlayEx(channels[chan], sptr, dsp, startpaused);
+       if (channels[chan] < 0)
+       {
+               channels[chan] = OPENAL_Stream_PlayEx(OPENAL_FREE, sptr, dsp, startpaused);
+       }
+}
+
 #endif