Browse Source

Rewrote OpenAL, SoundManager, added system folder

Thomas Buck 10 years ago
parent
commit
ad4fa38113

+ 5
- 0
ChangeLog.md View File

2
 
2
 
3
 ## OpenRaider (0.1.3) xythobuz <xythobuz@xythobuz.de>
3
 ## OpenRaider (0.1.3) xythobuz <xythobuz@xythobuz.de>
4
 
4
 
5
+    [ 20141201 ]
6
+    * Moved Font, Sound, Window modules into system subfolder
7
+    * Rewrote OpenAL sound implementation, separated sourcing and buffering
8
+    * LoaderTR2 loads all sound-related data into SoundManager
9
+
5
     [ 20141129 ]
10
     [ 20141129 ]
6
     * LoaderTR2 now supports loading animated textiles
11
     * LoaderTR2 now supports loading animated textiles
7
     * Clearing textures and textiles before loading a new level
12
     * Clearing textures and textiles before loading a new level

+ 0
- 107
include/Sound.h View File

1
-/*!
2
- * \file include/Sound.h
3
- * \brief This is the audio manager Header
4
- *
5
- * \author Mongoose
6
- * \author xythobuz
7
- */
8
-
9
-#ifndef _SOUND_H_
10
-#define _SOUND_H_
11
-
12
-/*!
13
- * \brief This is the audio manager for OpenRaider
14
- */
15
-class Sound {
16
-  public:
17
-
18
-    typedef enum {
19
-        SoundFlagsNone = 0,       //!< No effect
20
-        SoundFlagsLoop = (1 << 0) //!< Enable looping during playback
21
-    } SoundFlags;
22
-
23
-    /*!
24
-     * \brief Deconstructs an object of Sound
25
-     */
26
-    virtual ~Sound();
27
-
28
-    /*!
29
-     * \brief Initialize sound system
30
-     * \returns 0 on success or < 0 error flags
31
-     */
32
-    virtual int initialize() = 0;
33
-
34
-    virtual void setEnabled(bool on) = 0;
35
-
36
-    virtual bool getEnabled() = 0;
37
-
38
-    /*!
39
-     * \brief Set the volume
40
-     * \param vol new source gain
41
-     */
42
-    virtual void setVolume(float vol) = 0;
43
-
44
-    virtual float getVolume() = 0;
45
-
46
-    /*!
47
-     * \brief Get number of registered sources
48
-     * \returns number of registered sources
49
-     */
50
-    virtual unsigned long registeredSources() = 0;
51
-
52
-    /*!
53
-     * \brief Remove all loaded sounds
54
-     */
55
-    virtual void clear() = 0;
56
-
57
-    /*!
58
-     * \brief Move listener and repositions them
59
-     * \param pos New position for listener
60
-     * \param angle New orientation for listener
61
-     */
62
-    virtual void listenAt(float pos[3], float angle[3]) = 0;
63
-
64
-    /*!
65
-     * \brief Move sound source to position
66
-     * \param source valid source id
67
-     * \param pos new position for source
68
-     */
69
-    virtual void sourceAt(unsigned long source, float pos[3]) = 0;
70
-
71
-    /*!
72
-     * \brief Load wav file from disk
73
-     * \param filename not NULL!
74
-     * \param source not NULL! Returns new source ID or -1 on error.
75
-     * \param flags set options. Use SoundFlags enum bitwise OR-ed
76
-     * \returns 0 for no error or < 0 error flag
77
-     */
78
-    virtual int addFile(const char* filename, unsigned long* source, unsigned int flags) = 0;
79
-
80
-    /*!
81
-     * \brief Load wav file from buffer
82
-     * \param wav not NULL! Is a valid waveform buffer!
83
-     * \param length length of wav buffer
84
-     * \param source not NULL! Returns new source ID or -1 on error.
85
-     * \param flags set options. Use SoundFlags enum bitwise OR-ed
86
-     * \returns 0 for no error or < 0 error flag
87
-     */
88
-    virtual int addWave(unsigned char* wav, unsigned int length, unsigned long* source,
89
-                        unsigned int flags) = 0;
90
-
91
-    /*!
92
-     * \brief Play sound source
93
-     * \param source sound source to play
94
-     */
95
-    virtual void play(unsigned long source) = 0;
96
-
97
-    /*!
98
-     * \brief Stop playing sound source
99
-     * \param source sound source to stop
100
-     */
101
-    virtual void stop(unsigned long source) = 0;
102
-};
103
-
104
-Sound& getSound();
105
-
106
-#endif
107
-

+ 0
- 117
include/SoundAL.h View File

1
-/*!
2
- * \file include/SoundAL.h
3
- * \brief This is the OpenAL audio manager Header
4
- *
5
- * \author Mongoose
6
- * \author xythobuz
7
- */
8
-
9
-#ifndef _SOUND_AL_H_
10
-#define _SOUND_AL_H_
11
-
12
-#include <vector>
13
-
14
-#include "Sound.h"
15
-
16
-/*!
17
- * \brief This is the OpenAL audio manager
18
- */
19
-class SoundAL : public Sound {
20
-  public:
21
-
22
-    /*!
23
-     * \brief Constructs an object of SoundAL
24
-     */
25
-    SoundAL();
26
-
27
-    /*!
28
-     * \brief Deconstructs an object of SoundAL
29
-     */
30
-    virtual ~SoundAL();
31
-
32
-    /*!
33
-     * \brief Initialize sound system
34
-     * \returns 0 on success or < 0 error flags
35
-     */
36
-    virtual int initialize();
37
-
38
-    virtual void setEnabled(bool on);
39
-
40
-    virtual bool getEnabled() { return mEnabled; }
41
-
42
-    /*!
43
-     * \brief Set the volume
44
-     * \param vol new source gain
45
-     */
46
-    virtual void setVolume(float vol);
47
-
48
-    virtual float getVolume() { return mVolume; }
49
-
50
-    /*!
51
-     * \brief Get number of registered sources
52
-     * \returns number of registered sources
53
-     */
54
-    virtual unsigned long registeredSources();
55
-
56
-    /*!
57
-     * \brief Remove all loaded sounds
58
-     */
59
-    virtual void clear();
60
-
61
-    /*!
62
-     * \brief Move listener and repositions them
63
-     * \param pos New position for listener
64
-     * \param angle New orientation for listener
65
-     */
66
-    virtual void listenAt(float pos[3], float angle[3]);
67
-
68
-    /*!
69
-     * \brief Move sound source to position
70
-     * \param source valid source id
71
-     * \param pos new position for source
72
-     */
73
-    virtual void sourceAt(unsigned long source, float pos[3]);
74
-
75
-    /*!
76
-     * \brief Load wav file from disk
77
-     * \param filename not NULL!
78
-     * \param source not NULL! Returns new source ID or -1 on error.
79
-     * \param flags set options. Use SoundFlags enum bitwise OR-ed
80
-     * \returns 0 for no error or < 0 error flag
81
-     */
82
-    virtual int addFile(const char* filename, unsigned long* source, unsigned int flags);
83
-
84
-    /*!
85
-     * \brief Load wav file from buffer
86
-     * \param wav not NULL! Is a valid waveform buffer!
87
-     * \param length length of wav buffer
88
-     * \param source not NULL! Returns new source ID or -1 on error.
89
-     * \param flags set options. Use SoundFlags enum bitwise OR-ed
90
-     * \returns 0 for no error or < 0 error flag
91
-     */
92
-    virtual int addWave(unsigned char* wav, unsigned int length, unsigned long* source,
93
-                        unsigned int flags);
94
-
95
-    /*!
96
-     * \brief Play sound source
97
-     * \param source sound source to play
98
-     */
99
-    virtual void play(unsigned long source);
100
-
101
-    /*!
102
-     * \brief Stop playing sound source
103
-     * \param source sound source to stop
104
-     */
105
-    virtual void stop(unsigned long source);
106
-
107
-  private:
108
-
109
-    bool mEnabled;
110
-    bool mInit;                         //!< Guard to ensure ausio system is active
111
-    float mVolume;                      //!< Listener gain
112
-    std::vector<unsigned int> mBuffer; //!< Audio buffer id list
113
-    std::vector<unsigned int> mSource; //!< Audio source id list
114
-};
115
-
116
-#endif
117
-

+ 17
- 12
include/SoundManager.h View File

27
 
27
 
28
 class SoundManager {
28
 class SoundManager {
29
   public:
29
   public:
30
-    void clear();
31
-    void addSoundSource(float x, float y, float z, int id, int flags);
32
-    void addSoundMapEntry(int id);
33
-    void addSoundDetail(int sample, float volume);
34
-    void addSampleIndex(int index);
30
+    static void clear();
31
+    static int prepareSources();
35
 
32
 
36
-    int playSound(int index);
33
+    static void addSoundSource(float x, float y, float z, int id, int flags);
34
+    static void addSoundMapEntry(int id);
35
+    static void addSoundDetail(int sample, float volume);
36
+    static void addSampleIndex(int index);
37
+
38
+    static int sizeSoundMap();
39
+
40
+    static int getIndex(int index, float* volume = nullptr);
41
+
42
+    // index --> SoundMap --> SoundDetails --> SampleIndices --> play
43
+    static int playSound(int index);
37
 
44
 
38
   private:
45
   private:
39
-    std::vector<SoundSource> soundSources;
40
-    std::vector<int> soundMap;
41
-    std::vector<SoundDetail> soundDetails;
42
-    std::vector<int> sampleIndices;
46
+    static std::vector<SoundSource> soundSources;
47
+    static std::vector<int> soundMap;
48
+    static std::vector<SoundDetail> soundDetails;
49
+    static std::vector<int> sampleIndices;
43
 };
50
 };
44
 
51
 
45
-SoundManager& getSoundManager();
46
-
47
 #endif
52
 #endif
48
 
53
 

+ 0
- 109
include/SoundNull.h View File

1
-/*!
2
- * \file include/SoundNull.h
3
- * \brief This is the null audio manager Header
4
- *
5
- * \author xythobuz
6
- */
7
-
8
-#ifndef _SOUND_NULL_H_
9
-#define _SOUND_NULL_H_
10
-
11
-#include "Sound.h"
12
-
13
-/*!
14
- * \brief This is the null audio manager
15
- */
16
-class SoundNull : public Sound {
17
-  public:
18
-
19
-    /*!
20
-     * \brief Constructs an object of SoundNull
21
-     */
22
-    SoundNull();
23
-
24
-    /*!
25
-     * \brief Deconstructs an object of SoundNull
26
-     */
27
-    virtual ~SoundNull();
28
-
29
-    /*!
30
-     * \brief Initialize sound system
31
-     * \returns 0 on success or < 0 error flags
32
-     */
33
-    virtual int initialize();
34
-
35
-    virtual void setEnabled(bool on);
36
-
37
-    virtual bool getEnabled() { return false; }
38
-
39
-    /*!
40
-     * \brief Set the volume
41
-     * \param vol new source gain
42
-     */
43
-    virtual void setVolume(float vol);
44
-
45
-    virtual float getVolume() { return 0.0f; }
46
-
47
-    /*!
48
-     * \brief Get number of registered sources
49
-     * \returns number of registered sources
50
-     */
51
-    virtual unsigned long registeredSources();
52
-
53
-    /*!
54
-     * \brief Remove all loaded sounds
55
-     */
56
-    virtual void clear();
57
-
58
-    /*!
59
-     * \brief Move listener and repositions them
60
-     * \param pos New position for listener
61
-     * \param angle New orientation for listener
62
-     */
63
-    virtual void listenAt(float pos[3], float angle[3]);
64
-
65
-    /*!
66
-     * \brief Move sound source to position
67
-     * \param source valid source id
68
-     * \param pos new position for source
69
-     */
70
-    virtual void sourceAt(unsigned long source, float pos[3]);
71
-
72
-    /*!
73
-     * \brief Load wav file from disk
74
-     * \param filename not NULL!
75
-     * \param source not NULL! Returns new source ID or -1 on error.
76
-     * \param flags set options. Use SoundFlags enum bitwise OR-ed
77
-     * \returns 0 for no error or < 0 error flag
78
-     */
79
-    virtual int addFile(const char* filename, unsigned long* source, unsigned int flags);
80
-
81
-    /*!
82
-     * \brief Load wav file from buffer
83
-     * \param wav not NULL! Is a valid waveform buffer!
84
-     * \param length length of wav buffer
85
-     * \param source not NULL! Returns new source ID or -1 on error.
86
-     * \param flags set options. Use SoundFlags enum bitwise OR-ed
87
-     * \returns 0 for no error or < 0 error flag
88
-     */
89
-    virtual int addWave(unsigned char* wav, unsigned int length, unsigned long* source,
90
-                        unsigned int flags);
91
-
92
-    /*!
93
-     * \brief Play sound source
94
-     * \param source sound source to play
95
-     */
96
-    virtual void play(unsigned long source);
97
-
98
-    /*!
99
-     * \brief Stop playing sound source
100
-     * \param source sound source to stop
101
-     */
102
-    virtual void stop(unsigned long source);
103
-
104
-  private:
105
-    unsigned long sources;
106
-};
107
-
108
-#endif
109
-

include/Font.h → include/system/Font.h View File


include/FontImGui.h → include/system/FontImGui.h View File


include/FontSDL.h → include/system/FontSDL.h View File


include/FontTRLE.h → include/system/FontTRLE.h View File


+ 37
- 0
include/system/Sound.h View File

1
+/*!
2
+ * \file include/system/Sound.h
3
+ * \brief This is the audio manager Header
4
+ *
5
+ * \author xythobuz
6
+ */
7
+
8
+#ifndef _SOUND_H_
9
+#define _SOUND_H_
10
+
11
+class Sound {
12
+  public:
13
+    static int initialize();
14
+    static void shutdown();
15
+    static void clear();
16
+
17
+    static int numBuffers();
18
+    static int loadBuffer(unsigned char* buffer, unsigned int length);
19
+
20
+    static int numSources(bool atListener = false);
21
+    static int addSource(int buffer, float volume = 1.0f, bool atListener = false, bool loop = false);
22
+
23
+    static int sourceAt(int source, float pos[3]);
24
+    static void listenAt(float pos[3], float orientation[6]);
25
+
26
+    static void play(int source, bool atListener = false);
27
+    static void stopAll();
28
+
29
+    static void setEnabled(bool on = true);
30
+    static bool getEnabled();
31
+
32
+    static void setVolume(float vol = 1.0f);
33
+    static float getVolume();
34
+};
35
+
36
+#endif
37
+

+ 50
- 0
include/system/SoundAL.h View File

1
+/*!
2
+ * \file include/system/SoundAL.h
3
+ * \brief This is the OpenAL audio manager Header
4
+ *
5
+ * \author xythobuz
6
+ */
7
+
8
+#ifndef _SOUND_AL_H_
9
+#define _SOUND_AL_H_
10
+
11
+#include <vector>
12
+
13
+class SoundAL {
14
+  public:
15
+    static int initialize();
16
+    static void shutdown();
17
+    static void clear();
18
+
19
+    static int numBuffers();
20
+    static int loadBuffer(unsigned char* buffer, unsigned int length);
21
+
22
+    static int numSources(bool atListener);
23
+    static int addSource(int buffer, float volume, bool atListener, bool loop);
24
+
25
+    static int sourceAt(int source, float pos[3]);
26
+    static void listenAt(float pos[3], float orientation[6]);
27
+
28
+    static void play(int source, bool atListener);
29
+    static void stopAll();
30
+
31
+    static void setEnabled(bool on);
32
+    static bool getEnabled();
33
+
34
+    static void setVolume(float vol);
35
+    static float getVolume();
36
+
37
+  private:
38
+    static bool init;
39
+    static bool enabled;
40
+    static float volume;
41
+
42
+    static std::vector<unsigned int> buffers;
43
+    static std::vector<unsigned int> sources;
44
+    static std::vector<unsigned int> listenerSources;
45
+
46
+    static float lastPosition[3];
47
+};
48
+
49
+#endif
50
+

include/Window.h → include/system/Window.h View File


include/WindowGLUT.h → include/system/WindowGLUT.h View File

8
 #ifndef _WINDOW_GLUT_H_
8
 #ifndef _WINDOW_GLUT_H_
9
 #define _WINDOW_GLUT_H_
9
 #define _WINDOW_GLUT_H_
10
 
10
 
11
-#include "Window.h"
11
+#include "system/Window.h"
12
 
12
 
13
 /*!
13
 /*!
14
  * \brief GLUT windowing implementation
14
  * \brief GLUT windowing implementation

include/WindowSDL.h → include/system/WindowSDL.h View File

10
 
10
 
11
 #include "SDL.h"
11
 #include "SDL.h"
12
 
12
 
13
-#include "Window.h"
13
+#include "system/Window.h"
14
 
14
 
15
 /*!
15
 /*!
16
  * \brief SDL windowing implementation
16
  * \brief SDL windowing implementation

+ 2
- 10
src/CMakeLists.txt View File

62
 set (SRCS ${SRCS} "Console.cpp")
62
 set (SRCS ${SRCS} "Console.cpp")
63
 set (SRCS ${SRCS} "Entity.cpp")
63
 set (SRCS ${SRCS} "Entity.cpp")
64
 set (SRCS ${SRCS} "Exception.cpp")
64
 set (SRCS ${SRCS} "Exception.cpp")
65
-set (SRCS ${SRCS} "Font.cpp")
66
-set (SRCS ${SRCS} "FontImGui.cpp")
67
-set (SRCS ${SRCS} "FontTRLE.cpp")
68
 set (SRCS ${SRCS} "Game.cpp")
65
 set (SRCS ${SRCS} "Game.cpp")
69
 set (SRCS ${SRCS} "Log.cpp")
66
 set (SRCS ${SRCS} "Log.cpp")
70
 set (SRCS ${SRCS} "main.cpp")
67
 set (SRCS ${SRCS} "main.cpp")
77
 set (SRCS ${SRCS} "RunTime.cpp")
74
 set (SRCS ${SRCS} "RunTime.cpp")
78
 set (SRCS ${SRCS} "Script.cpp")
75
 set (SRCS ${SRCS} "Script.cpp")
79
 set (SRCS ${SRCS} "SkeletalModel.cpp")
76
 set (SRCS ${SRCS} "SkeletalModel.cpp")
80
-set (SRCS ${SRCS} "Sound.cpp")
81
 set (SRCS ${SRCS} "SoundManager.cpp")
77
 set (SRCS ${SRCS} "SoundManager.cpp")
82
 set (SRCS ${SRCS} "Sprite.cpp")
78
 set (SRCS ${SRCS} "Sprite.cpp")
83
 set (SRCS ${SRCS} "StaticMesh.cpp")
79
 set (SRCS ${SRCS} "StaticMesh.cpp")
85
 set (SRCS ${SRCS} "TombRaider.cpp")
81
 set (SRCS ${SRCS} "TombRaider.cpp")
86
 set (SRCS ${SRCS} "UI.cpp")
82
 set (SRCS ${SRCS} "UI.cpp")
87
 set (SRCS ${SRCS} "ViewVolume.cpp")
83
 set (SRCS ${SRCS} "ViewVolume.cpp")
88
-set (SRCS ${SRCS} "Window.cpp")
89
 set (SRCS ${SRCS} "World.cpp")
84
 set (SRCS ${SRCS} "World.cpp")
90
 
85
 
91
 # Select available Sound library
86
 # Select available Sound library
92
 if (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
87
 if (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
93
-    set (SRCS ${SRCS} "SoundAL.cpp")
94
     set (USING_AL TRUE)
88
     set (USING_AL TRUE)
95
 else (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
89
 else (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
96
-    set (SRCS ${SRCS} "SoundNull.cpp")
97
     set (USING_AL FALSE)
90
     set (USING_AL FALSE)
98
     message (STATUS "Disabled Sound support (no OpenAL and ALUT)!")
91
     message (STATUS "Disabled Sound support (no OpenAL and ALUT)!")
99
 endif (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
92
 endif (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
100
 
93
 
101
 # Select available Windowing library
94
 # Select available Windowing library
102
 if (SDL2_FOUND AND NOT FORCE_GLUT)
95
 if (SDL2_FOUND AND NOT FORCE_GLUT)
103
-    set (SRCS ${SRCS} "WindowSDL.cpp")
104
     set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -DUSING_SDL")
96
     set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -DUSING_SDL")
105
     if (SDL2TTF_FOUND)
97
     if (SDL2TTF_FOUND)
106
-        set (SRCS ${SRCS} "FontSDL.cpp")
107
         set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -DUSING_SDL_FONT")
98
         set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -DUSING_SDL_FONT")
108
     endif (SDL2TTF_FOUND)
99
     endif (SDL2TTF_FOUND)
109
 else (SDL2_FOUND AND NOT FORCE_GLUT)
100
 else (SDL2_FOUND AND NOT FORCE_GLUT)
110
     if (FREEGLUT_FOUND)
101
     if (FREEGLUT_FOUND)
111
-        set (SRCS ${SRCS} "WindowGLUT.cpp")
112
         set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -DUSING_GLUT")
102
         set (OpenRaider_CXX_FLAGS "${OpenRaider_CXX_FLAGS} -DUSING_GLUT")
113
     else (FREEGLUT_FOUND)
103
     else (FREEGLUT_FOUND)
114
         message (FATAL_ERROR "SDL2 or freeGLUT are required!")
104
         message (FATAL_ERROR "SDL2 or freeGLUT are required!")
230
 add_subdirectory ("deps")
220
 add_subdirectory ("deps")
231
 add_subdirectory ("loader")
221
 add_subdirectory ("loader")
232
 add_subdirectory ("math")
222
 add_subdirectory ("math")
223
+add_subdirectory ("system")
233
 add_subdirectory ("utils")
224
 add_subdirectory ("utils")
234
 
225
 
235
 # Add Executable
226
 # Add Executable
238
     $<TARGET_OBJECTS:OpenRaider_all> $<TARGET_OBJECTS:OpenRaider_commands>
229
     $<TARGET_OBJECTS:OpenRaider_all> $<TARGET_OBJECTS:OpenRaider_commands>
239
     $<TARGET_OBJECTS:OpenRaider_deps> $<TARGET_OBJECTS:OpenRaider_math>
230
     $<TARGET_OBJECTS:OpenRaider_deps> $<TARGET_OBJECTS:OpenRaider_math>
240
     $<TARGET_OBJECTS:OpenRaider_utils> $<TARGET_OBJECTS:OpenRaider_loader>
231
     $<TARGET_OBJECTS:OpenRaider_utils> $<TARGET_OBJECTS:OpenRaider_loader>
232
+    $<TARGET_OBJECTS:OpenRaider_system>
241
 )
233
 )
242
 
234
 
243
 #################################################################
235
 #################################################################

+ 6
- 4
src/Game.cpp View File

16
 #include "loader/Loader.h"
16
 #include "loader/Loader.h"
17
 #include "Log.h"
17
 #include "Log.h"
18
 #include "Render.h"
18
 #include "Render.h"
19
-#include "Sound.h"
20
 #include "SoundManager.h"
19
 #include "SoundManager.h"
21
 #include "StaticMesh.h"
20
 #include "StaticMesh.h"
21
+#include "system/Sound.h"
22
 #include "TextureManager.h"
22
 #include "TextureManager.h"
23
 #include "World.h"
23
 #include "World.h"
24
 #include "utils/strings.h"
24
 #include "utils/strings.h"
55
 
55
 
56
     getWorld().destroy();
56
     getWorld().destroy();
57
     getRender().ClearWorld();
57
     getRender().ClearWorld();
58
-    getSound().clear(); // Remove all previously loaded sounds
59
-    getSoundManager().clear();
58
+    Sound::clear(); // Remove all previously loaded sounds
59
+    SoundManager::clear();
60
     getTextureManager().clear();
60
     getTextureManager().clear();
61
 }
61
 }
62
 
62
 
80
         if (error != 0) {
80
         if (error != 0) {
81
             getLog() << "Error while trying new loader (" << error << ")..." << Log::endl;
81
             getLog() << "Error while trying new loader (" << error << ")..." << Log::endl;
82
             destroy();
82
             destroy();
83
+        } else {
84
+            SoundManager::prepareSources();
83
         }
85
         }
84
     }
86
     }
85
 
87
 
228
     for (i = 0; i < mTombRaider.getSoundSamplesCount(); ++i) {
230
     for (i = 0; i < mTombRaider.getSoundSamplesCount(); ++i) {
229
         mTombRaider.getSoundSample(i, &riffSz, &riff);
231
         mTombRaider.getSoundSample(i, &riffSz, &riff);
230
 
232
 
231
-        getSound().addWave(riff, riffSz, &id, Sound::SoundFlagsNone);
233
+        id = Sound::loadBuffer(riff, riffSz);
232
 
234
 
233
         //if (((i + 1) == TR_SOUND_F_PISTOL) && (id > 0))
235
         //if (((i + 1) == TR_SOUND_F_PISTOL) && (id > 0))
234
         //{
236
         //{

+ 2
- 2
src/Menu.cpp View File

6
  */
6
  */
7
 
7
 
8
 #include "global.h"
8
 #include "global.h"
9
-#include "Font.h"
10
 #include "Log.h"
9
 #include "Log.h"
11
-#include "Window.h"
12
 #include "Menu.h"
10
 #include "Menu.h"
13
 #include "MenuFolder.h"
11
 #include "MenuFolder.h"
12
+#include "system/Font.h"
13
+#include "system/Window.h"
14
 
14
 
15
 void Menu::showDialog(std::string msg, std::string btn1, std::string btn2,
15
 void Menu::showDialog(std::string msg, std::string btn1, std::string btn2,
16
                       std::function<int (bool state)> callback) {
16
                       std::function<int (bool state)> callback) {

+ 2
- 2
src/MenuFolder.cpp View File

6
  */
6
  */
7
 
7
 
8
 #include "global.h"
8
 #include "global.h"
9
-#include "Font.h"
10
 #include "Game.h"
9
 #include "Game.h"
11
 #include "loader/Loader.h"
10
 #include "loader/Loader.h"
12
 #include "Log.h"
11
 #include "Log.h"
13
 #include "RunTime.h"
12
 #include "RunTime.h"
14
-#include "Window.h"
15
 #include "MenuFolder.h"
13
 #include "MenuFolder.h"
14
+#include "system/Font.h"
15
+#include "system/Window.h"
16
 
16
 
17
 MenuFolder::MenuFolder() {
17
 MenuFolder::MenuFolder() {
18
     mCursor = 0;
18
     mCursor = 0;

+ 1
- 1
src/Render.cpp View File

19
 #include "Render.h"
19
 #include "Render.h"
20
 #include "utils/strings.h"
20
 #include "utils/strings.h"
21
 #include "utils/tga.h"
21
 #include "utils/tga.h"
22
-#include "Window.h"
23
 #include "World.h"
22
 #include "World.h"
23
+#include "system/Window.h"
24
 
24
 
25
 Render::Render() {
25
 Render::Render() {
26
     mSkyMesh = -1;
26
     mSkyMesh = -1;

+ 0
- 13
src/Sound.cpp View File

1
-/*!
2
- * \file src/Sound.cpp
3
- * \brief This is the audio manager Implementation
4
- *
5
- * \author xythobuz
6
- */
7
-
8
-#include "global.h"
9
-#include "Sound.h"
10
-
11
-Sound::~Sound() {
12
-}
13
-

+ 0
- 263
src/SoundAL.cpp View File

1
-/*!
2
- * \file src/SoundAL.cpp
3
- * \brief This is the OpenAL audio manager Implementation
4
- *
5
- * \author Mongoose
6
- * \author xythobuz
7
- */
8
-
9
-#ifdef __APPLE__
10
-#include <OpenAL/al.h>
11
-#else
12
-#include <AL/al.h>
13
-#include <fcntl.h>
14
-#include <unistd.h>
15
-#endif
16
-
17
-#include <AL/alut.h>
18
-
19
-#include <cstdio>
20
-#include <cstdlib>
21
-
22
-#include "global.h"
23
-#include "math/math.h"
24
-#include "SoundAL.h"
25
-
26
-SoundAL::SoundAL() {
27
-    mEnabled = false;
28
-    mInit = false;
29
-    mVolume = 1.0f;
30
-}
31
-
32
-SoundAL::~SoundAL() {
33
-    if (mInit)
34
-        alutExit();
35
-}
36
-
37
-int SoundAL::initialize() {
38
-    assert(mInit == false);
39
-
40
-    if (!mEnabled)
41
-        return 0;
42
-
43
-    ALCdevice* Device = alcOpenDevice(NULL);
44
-    ALCcontext* Context = alcCreateContext(Device, NULL);
45
-    alcMakeContextCurrent(Context);
46
-
47
-    if (alutInitWithoutContext(NULL, NULL) == AL_FALSE) {
48
-        printf("ALUT-Error: %s\n", alutGetErrorString(alutGetError()));
49
-        return -2;
50
-    }
51
-
52
-    mInit = true;
53
-
54
-    return 0;
55
-}
56
-
57
-void SoundAL::setEnabled(bool on) {
58
-    mEnabled = on;
59
-    if (on && (!mInit))
60
-        initialize();
61
-}
62
-
63
-void SoundAL::setVolume(float vol) {
64
-    assert(mSource.size() == mBuffer.size());
65
-
66
-    if (mEnabled) {
67
-        if ((mSource.size() > 0) && (!equalEpsilon(mVolume, vol))) {
68
-            // Apply new volume to old sources if needed
69
-            for (size_t i = 0; i < mSource.size(); i++)
70
-                alSourcef(mSource[i], AL_GAIN, vol);
71
-        }
72
-    }
73
-
74
-    mVolume = vol;
75
-}
76
-
77
-unsigned long SoundAL::registeredSources() {
78
-    assert(mSource.size() == mBuffer.size());
79
-
80
-    if ((!mEnabled) || (!mInit))
81
-        return 0;
82
-
83
-    return mSource.size();
84
-}
85
-
86
-void SoundAL::clear() {
87
-    assert(mSource.size() == mBuffer.size());
88
-
89
-    if ((!mEnabled) || (!mInit))
90
-        return;
91
-
92
-    for (size_t i = 0; i < mSource.size(); i++) {
93
-        alDeleteSources(1, &mSource[i]);
94
-        alDeleteBuffers(1, &mBuffer[i]);
95
-    }
96
-
97
-    mSource.clear();
98
-    mBuffer.clear();
99
-}
100
-
101
-void SoundAL::listenAt(float pos[3], float angle[3]) {
102
-    assert(mSource.size() == mBuffer.size());
103
-    assert(pos != NULL);
104
-    assert(angle != NULL);
105
-
106
-    if ((!mEnabled) || (!mInit))
107
-        return;
108
-
109
-    alListenerfv(AL_POSITION, pos);
110
-    alListenerfv(AL_ORIENTATION, angle);
111
-}
112
-
113
-void SoundAL::sourceAt(unsigned long source, float pos[3]) {
114
-    assert(mSource.size() == mBuffer.size());
115
-    assert(source < mSource.size());
116
-    assert(pos != NULL);
117
-
118
-    if ((!mEnabled) || (!mInit))
119
-        return;
120
-
121
-    alSourcefv(mSource[source], AL_POSITION, pos);
122
-}
123
-
124
-//! \fixme Seperate sourcing and buffering, Mongoose 2002.01.04
125
-int SoundAL::addFile(const char* filename, unsigned long* source, unsigned int flags) {
126
-    ALsizei size;
127
-    ALfloat freq;
128
-    ALenum format;
129
-    ALvoid* data;
130
-    unsigned long id;
131
-
132
-    assert(mSource.size() == mBuffer.size());
133
-    assert(filename != NULL);
134
-    assert(filename[0] != '\0');
135
-    assert(source != NULL);
136
-
137
-    if ((!mEnabled) || (!mInit)) {
138
-        *source = 0;
139
-        return 0;
140
-    }
141
-
142
-    id = mSource.size();
143
-
144
-    mSource.push_back(0);
145
-    mBuffer.push_back(0);
146
-
147
-    alGetError();
148
-    alGenBuffers(1, &mBuffer[id]);
149
-    if (alGetError() != AL_NO_ERROR) {
150
-        printf("Could not load wav file (alGenBuffers)\n");
151
-        return -1;
152
-    }
153
-
154
-    alGetError();
155
-    alGenSources(1, &mSource[id]);
156
-    if (alGetError() != AL_NO_ERROR) {
157
-        printf("Could not load wav file (alGenSources)\n");
158
-        return -2;
159
-    }
160
-
161
-    data = alutLoadMemoryFromFile(filename, &format, &size, &freq);
162
-    if (alutGetError() != ALUT_ERROR_NO_ERROR) {
163
-        printf("Could not load %s\n", filename);
164
-        return -3;
165
-    }
166
-
167
-    alBufferData(mBuffer[id], format, data, size, static_cast<ALsizei>(freq));
168
-    alSourcei(mSource[id], AL_BUFFER, mBuffer[id]);
169
-
170
-    if (flags & SoundFlagsLoop) {
171
-        alSourcei(mSource[id], AL_LOOPING, 1);
172
-    }
173
-
174
-    alSourcef(mSource[id], AL_GAIN, mVolume);
175
-
176
-    *source = id;
177
-
178
-    return 0;
179
-}
180
-
181
-int SoundAL::addWave(unsigned char* wav, unsigned int length, unsigned long* source,
182
-                     unsigned int flags) {
183
-    ALsizei size;
184
-    ALfloat freq;
185
-    ALenum format;
186
-    ALvoid* data;
187
-    int error = 0;
188
-    unsigned long id;
189
-
190
-    assert(mSource.size() == mBuffer.size());
191
-    assert(wav != NULL);
192
-    assert(source != NULL);
193
-
194
-    if ((!mEnabled) || (!mInit)) {
195
-        *source = 0;
196
-        return 0;
197
-    }
198
-
199
-    id = mSource.size();
200
-
201
-    mSource.push_back(0);
202
-    mBuffer.push_back(0);
203
-
204
-    data = wav;
205
-
206
-    alGetError();
207
-    alGenBuffers(1, &mBuffer[id]);
208
-    if (alGetError() != AL_NO_ERROR) {
209
-        printf("Could not load wav (alGenBuffers)\n");
210
-        return -1;
211
-    }
212
-
213
-    alGetError();
214
-    alGenSources(1, &mSource[id]);
215
-    if (alGetError() != AL_NO_ERROR) {
216
-        printf("Could not load wav (alGenSources)\n");
217
-        return -2;
218
-    }
219
-
220
-    data = alutLoadMemoryFromFileImage(wav, length, &format, &size, &freq);
221
-    if (((error = alutGetError()) != ALUT_ERROR_NO_ERROR) || (data == NULL)) {
222
-        printf("Could not load wav buffer (%s)\n", alutGetErrorString(error));
223
-        return -3;
224
-    }
225
-
226
-    alBufferData(mBuffer[id], format, data, size, static_cast<ALsizei>(freq));
227
-    alSourcei(mSource[id], AL_BUFFER, mBuffer[id]);
228
-
229
-    if (flags & SoundFlagsLoop) {
230
-        alSourcei(mSource[id], AL_LOOPING, 1);
231
-    }
232
-
233
-    alSourcef(mSource[id], AL_GAIN, mVolume);
234
-
235
-    *source = id;
236
-
237
-    //! \fixme Should free alut buffer?
238
-
239
-    return 0;
240
-}
241
-
242
-void SoundAL::play(unsigned long source) {
243
-    assert(mInit);
244
-    assert(mSource.size() == mBuffer.size());
245
-    assert(source < mSource.size());
246
-
247
-    if (!mEnabled)
248
-        return;
249
-
250
-    alSourcePlay(mSource[source]);
251
-}
252
-
253
-void SoundAL::stop(unsigned long source) {
254
-    assert(mInit);
255
-    assert(mSource.size() == mBuffer.size());
256
-    assert(source < mSource.size());
257
-
258
-    if (!mEnabled)
259
-        return;
260
-
261
-    alSourceStop(mSource[source]);
262
-}
263
-

+ 65
- 16
src/SoundManager.cpp View File

6
  */
6
  */
7
 
7
 
8
 #include "global.h"
8
 #include "global.h"
9
-#include "Sound.h"
9
+#include "system/Sound.h"
10
 #include "SoundManager.h"
10
 #include "SoundManager.h"
11
 
11
 
12
+std::vector<SoundSource> SoundManager::soundSources;
13
+std::vector<int> SoundManager::soundMap;
14
+std::vector<SoundDetail> SoundManager::soundDetails;
15
+std::vector<int> SoundManager::sampleIndices;
16
+
12
 void SoundManager::clear() {
17
 void SoundManager::clear() {
13
     soundSources.clear();
18
     soundSources.clear();
14
     soundMap.clear();
19
     soundMap.clear();
16
     sampleIndices.clear();
21
     sampleIndices.clear();
17
 }
22
 }
18
 
23
 
24
+int SoundManager::prepareSources() {
25
+    for (int i = 0; i < soundSources.size(); i++) {
26
+        float vol;
27
+        int index = getIndex(soundSources.at(i).id, &vol);
28
+        int ret = Sound::addSource(index, vol, false, true);
29
+        assert(ret == i);
30
+        float pos[3] = { soundSources.at(i).x, soundSources.at(i).y, soundSources.at(i).z };
31
+        ret = Sound::sourceAt(i, pos);
32
+        assert(ret == 0);
33
+        Sound::play(i, false);
34
+    }
35
+
36
+    for (int i = 0; i < soundMap.size(); i++) {
37
+        float vol;
38
+        int index = getIndex(i, &vol);
39
+        if (index >= 0) {
40
+            int ret = Sound::addSource(index, vol, true, false);
41
+            assert(ret >= 0);
42
+        }
43
+    }
44
+}
45
+
19
 void SoundManager::addSoundSource(float x, float y, float z, int id, int flags) {
46
 void SoundManager::addSoundSource(float x, float y, float z, int id, int flags) {
20
     soundSources.emplace_back(x, y, z, id, flags);
47
     soundSources.emplace_back(x, y, z, id, flags);
21
 }
48
 }
32
     sampleIndices.push_back(index);
59
     sampleIndices.push_back(index);
33
 }
60
 }
34
 
61
 
35
-int SoundManager::playSound(int index) {
62
+int SoundManager::sizeSoundMap() {
63
+    return soundMap.size();
64
+}
65
+
66
+int SoundManager::getIndex(int index, float* volume) {
67
+    if (index <= -1)
68
+        return -1;
69
+
36
     if (index >= soundMap.size())
70
     if (index >= soundMap.size())
37
-        return -1; // SoundMap not big enough
71
+        return -2; // SoundMap not big enough
38
 
72
 
39
     index = soundMap.at(index);
73
     index = soundMap.at(index);
40
 
74
 
41
-    if (index == -1)
42
-        return -2; // SoundMap has no entry here (-1)
75
+    if (index <= -1)
76
+        return -3; // SoundMap has no entry here (-1)
43
 
77
 
44
     if (index >= soundDetails.size())
78
     if (index >= soundDetails.size())
45
-        return -3; // SoundMap entry is bigger than SoundDetails
79
+        return -4; // SoundMap entry is bigger than SoundDetails
46
 
80
 
47
     SoundDetail s = soundDetails.at(index);
81
     SoundDetail s = soundDetails.at(index);
48
 
82
 
49
-    if (s.sample == -1)
50
-        return -4; // SoundDetail has no entry here (-1)
83
+    if (volume != nullptr)
84
+        *volume = s.volume;
85
+
86
+    if (s.sample <= -1)
87
+        return -5; // SoundDetail has no entry here (-1)
51
 
88
 
52
     if (s.sample >= sampleIndices.size())
89
     if (s.sample >= sampleIndices.size())
53
-        return -5; // SoundDetail entry is bigger than SampleIndices
90
+        return -6; // SoundDetail entry is bigger than SampleIndices
54
 
91
 
55
     index = sampleIndices.at(s.sample);
92
     index = sampleIndices.at(s.sample);
56
 
93
 
57
-    if (index == -1)
58
-        return -6; // SampleIndices has no entry here (-1)
59
-
60
-    if (index >= getSound().registeredSources())
61
-        return -7; // SampleIndices entry is bigger than number of sounds loaded
94
+    if (index <= -1)
95
+        return -7; // SampleIndices has no entry here (-1)
62
 
96
 
63
-    // TODO play sound _index_ with matching volume
97
+    return index;
98
+}
64
 
99
 
65
-    return 0;
100
+int SoundManager::playSound(int index) {
101
+    if ((index >= 0) && (index < soundMap.size())) {
102
+        if (soundMap.at(index) == -1)
103
+            return 0;
104
+
105
+        int c = 1;
106
+        for (int i = 0; i < index; i++)
107
+            if (soundMap.at(i) != -1)
108
+                c++;
109
+
110
+        Sound::play(c, true);
111
+        return 0;
112
+    } else {
113
+        return -1;
114
+    }
66
 }
115
 }
67
 
116
 

+ 0
- 63
src/SoundNull.cpp View File

1
-/*!
2
- * \file src/SoundNull.cpp
3
- * \brief This is the null audio manager Implementation
4
- *
5
- * \author xythobuz
6
- */
7
-
8
-#include "global.h"
9
-#include "SoundNull.h"
10
-
11
-SoundNull::SoundNull() {
12
-    sources = 0;
13
-}
14
-
15
-SoundNull::~SoundNull() {
16
-}
17
-
18
-int SoundNull::initialize() {
19
-    return 0;
20
-}
21
-
22
-void SoundNull::setEnabled(bool on) {
23
-}
24
-
25
-void SoundNull::setVolume(float vol) {
26
-}
27
-
28
-unsigned long SoundNull::registeredSources() {
29
-    return sources;
30
-}
31
-
32
-void SoundNull::clear() {
33
-    sources = 0;
34
-}
35
-
36
-void SoundNull::listenAt(float pos[3], float angle[3]) {
37
-}
38
-
39
-void SoundNull::sourceAt(unsigned long source, float pos[3]) {
40
-    assert(source < sources);
41
-}
42
-
43
-int SoundNull::addFile(const char* filename, unsigned long* source, unsigned int flags) {
44
-    *source = sources;
45
-    sources++;
46
-    return 0;
47
-}
48
-
49
-int SoundNull::addWave(unsigned char* wav, unsigned int length, unsigned long* source,
50
-                       unsigned int flags) {
51
-    *source = sources;
52
-    sources++;
53
-    return 0;
54
-}
55
-
56
-void SoundNull::play(unsigned long source) {
57
-    assert(source < sources);
58
-}
59
-
60
-void SoundNull::stop(unsigned long source) {
61
-    assert(source < sources);
62
-}
63
-

+ 21
- 16
src/UI.cpp View File

15
 #include "Menu.h"
15
 #include "Menu.h"
16
 #include "Render.h"
16
 #include "Render.h"
17
 #include "RunTime.h"
17
 #include "RunTime.h"
18
-#include "Sound.h"
18
+#include "SoundManager.h"
19
 #include "TextureManager.h"
19
 #include "TextureManager.h"
20
-#include "Window.h"
21
 #include "commands/Command.h"
20
 #include "commands/Command.h"
21
+#include "system/Sound.h"
22
+#include "system/Window.h"
22
 #include "utils/time.h"
23
 #include "utils/time.h"
23
 #include "UI.h"
24
 #include "UI.h"
24
 
25
 
178
     bool input = !(visible || getMenu().isVisible());
179
     bool input = !(visible || getMenu().isVisible());
179
     if (getWindow().getMousegrab() != input)
180
     if (getWindow().getMousegrab() != input)
180
         getWindow().setMousegrab(input);
181
         getWindow().setMousegrab(input);
182
+
183
+    io.MouseWheel = 0;
181
 }
184
 }
182
 
185
 
183
 void UI::display() {
186
 void UI::display() {
219
                 getRunTime().setRunning(running);
222
                 getRunTime().setRunning(running);
220
             }
223
             }
221
             ImGui::SameLine();
224
             ImGui::SameLine();
222
-            bool sound = getSound().getEnabled();
225
+            bool sound = Sound::getEnabled();
223
             if (ImGui::Checkbox("Sound##runtime", &sound)) {
226
             if (ImGui::Checkbox("Sound##runtime", &sound)) {
224
-                getSound().setEnabled(sound);
227
+                Sound::setEnabled(sound);
225
             }
228
             }
226
             ImGui::SameLine();
229
             ImGui::SameLine();
227
             bool fullscreen = getWindow().getFullscreen();
230
             bool fullscreen = getWindow().getFullscreen();
229
                 getWindow().setFullscreen(fullscreen);
232
                 getWindow().setFullscreen(fullscreen);
230
             }
233
             }
231
 
234
 
232
-            float vol = getSound().getVolume();
235
+            float vol = Sound::getVolume();
233
             if (ImGui::InputFloat("Volume##runtime", &vol, 0.0f, 0.0f, 3,
236
             if (ImGui::InputFloat("Volume##runtime", &vol, 0.0f, 0.0f, 3,
234
                                   ImGuiInputTextFlags_EnterReturnsTrue)) {
237
                                   ImGuiInputTextFlags_EnterReturnsTrue)) {
235
                 if (vol < 0.0f)
238
                 if (vol < 0.0f)
236
                     vol = 0.0f;
239
                     vol = 0.0f;
237
                 if (vol > 1.0f)
240
                 if (vol > 1.0f)
238
                     vol = 1.0f;
241
                     vol = 1.0f;
239
-                getSound().setVolume(vol);
242
+                Sound::setVolume(vol);
240
             }
243
             }
241
 
244
 
242
             int w = getWindow().getWidth();
245
             int w = getWindow().getWidth();
461
             }
464
             }
462
         }
465
         }
463
 
466
 
464
-        if (ImGui::CollapsingHeader("SoundSample Player")) {
465
-            if (!getSound().getEnabled()) {
466
-                ImGui::Text("Please enable Sound before loading a level!");
467
+        if (ImGui::CollapsingHeader("SoundManager Player")) {
468
+            if (!Sound::getEnabled()) {
469
+                ImGui::Text("Please enable Sound first!");
467
                 if (ImGui::Button("Enable Sound!")) {
470
                 if (ImGui::Button("Enable Sound!")) {
468
-                    getSound().setEnabled(true);
471
+                    Sound::setEnabled(true);
469
                 }
472
                 }
470
-            } else if (getSound().registeredSources() == 0) {
473
+            } else if (Sound::numBuffers() == 0) {
471
                 ImGui::Text("Please load a level!");
474
                 ImGui::Text("Please load a level!");
472
             } else {
475
             } else {
473
                 static int index = 0;
476
                 static int index = 0;
474
                 ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.5f);
477
                 ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.5f);
475
-                ImGui::SliderInt("##soundslide", &index, 0, getSound().registeredSources() - 1);
478
+                ImGui::SliderInt("##soundslide", &index, 0, SoundManager::sizeSoundMap() - 1);
476
                 ImGui::PopItemWidth();
479
                 ImGui::PopItemWidth();
477
                 ImGui::SameLine();
480
                 ImGui::SameLine();
478
                 if (ImGui::Button("+##soundplus", ImVec2(0, 0), true)) {
481
                 if (ImGui::Button("+##soundplus", ImVec2(0, 0), true)) {
479
-                    if (index < (getSound().registeredSources() - 1))
482
+                    if (index < (SoundManager::sizeSoundMap() - 1))
480
                         index++;
483
                         index++;
481
                     else
484
                     else
482
                         index = 0;
485
                         index = 0;
486
                     if (index > 0)
489
                     if (index > 0)
487
                         index--;
490
                         index--;
488
                     else
491
                     else
489
-                        index = getSound().registeredSources() - 1;
492
+                        index = SoundManager::sizeSoundMap() - 1;
490
                 }
493
                 }
491
                 ImGui::SameLine();
494
                 ImGui::SameLine();
492
                 if (ImGui::Button("Play##soundplay")) {
495
                 if (ImGui::Button("Play##soundplay")) {
493
-                    getSound().play(index);
496
+                    SoundManager::playSound(index);
494
                 }
497
                 }
498
+
499
+                ImGui::Text("Index: %d", SoundManager::getIndex(index));
495
             }
500
             }
496
         }
501
         }
497
 
502
 
558
 
563
 
559
 void UI::handleMouseScroll(int xrel, int yrel) {
564
 void UI::handleMouseScroll(int xrel, int yrel) {
560
     ImGuiIO& io = ImGui::GetIO();
565
     ImGuiIO& io = ImGui::GetIO();
561
-    io.MouseWheel = (yrel != 0) ? yrel > 0 ? 1 : -1 : 0;
566
+    io.MouseWheel += yrel;
562
 
567
 
563
     scrollEvents.push_back(std::make_tuple(xrel, yrel));
568
     scrollEvents.push_back(std::make_tuple(xrel, yrel));
564
 }
569
 }

+ 7
- 7
src/commands/CommandSet.cpp View File

7
 
7
 
8
 #include "global.h"
8
 #include "global.h"
9
 #include "Camera.h"
9
 #include "Camera.h"
10
-#include "Font.h"
11
 #include "Log.h"
10
 #include "Log.h"
12
 #include "RunTime.h"
11
 #include "RunTime.h"
13
-#include "Sound.h"
14
-#include "Window.h"
12
+#include "system/Font.h"
13
+#include "system/Sound.h"
14
+#include "system/Window.h"
15
 #include "utils/strings.h"
15
 #include "utils/strings.h"
16
 #include "commands/CommandSet.h"
16
 #include "commands/CommandSet.h"
17
 
17
 
89
             getLog() << "set-audio-Error: Invalid value" << Log::endl;
89
             getLog() << "set-audio-Error: Invalid value" << Log::endl;
90
             return -4;
90
             return -4;
91
         }
91
         }
92
-        getSound().setEnabled(audio);
92
+        Sound::setEnabled(audio);
93
     } else if (var.compare("volume") == 0) {
93
     } else if (var.compare("volume") == 0) {
94
         float vol = 1.0f;
94
         float vol = 1.0f;
95
         if (!(args >> vol)) {
95
         if (!(args >> vol)) {
96
             getLog() << "set-volume-Error: Invalid value" << Log::endl;
96
             getLog() << "set-volume-Error: Invalid value" << Log::endl;
97
             return -5;
97
             return -5;
98
         }
98
         }
99
-        getSound().setVolume(vol);
99
+        Sound::setVolume(vol);
100
     } else if (var.compare("mouse_x") == 0) {
100
     } else if (var.compare("mouse_x") == 0) {
101
         float sense = 1.0f;
101
         float sense = 1.0f;
102
         if (!(args >> sense)) {
102
         if (!(args >> sense)) {
183
     } else if (var.compare("fullscreen") == 0) {
183
     } else if (var.compare("fullscreen") == 0) {
184
         getLog() << getWindow().getFullscreen() << Log::endl;
184
         getLog() << getWindow().getFullscreen() << Log::endl;
185
     } else if (var.compare("audio") == 0) {
185
     } else if (var.compare("audio") == 0) {
186
-        getLog() << getSound().getEnabled() << Log::endl;
186
+        getLog() << Sound::getEnabled() << Log::endl;
187
     } else if (var.compare("volume") == 0) {
187
     } else if (var.compare("volume") == 0) {
188
-        getLog() << getSound().getVolume() << Log::endl;
188
+        getLog() << Sound::getVolume() << Log::endl;
189
     } else if (var.compare("mouse_x") == 0) {
189
     } else if (var.compare("mouse_x") == 0) {
190
         getLog() << OR_RAD_TO_DEG(getCamera().getSensitivityX()) << Log::endl;
190
         getLog() << OR_RAD_TO_DEG(getCamera().getSensitivityX()) << Log::endl;
191
     } else if (var.compare("mouse_y") == 0) {
191
     } else if (var.compare("mouse_y") == 0) {

+ 15
- 6
src/loader/LoaderTR2.cpp View File

13
 #include "Log.h"
13
 #include "Log.h"
14
 #include "Mesh.h"
14
 #include "Mesh.h"
15
 #include "Room.h"
15
 #include "Room.h"
16
-#include "Sound.h"
17
 #include "SoundManager.h"
16
 #include "SoundManager.h"
18
 #include "TextureManager.h"
17
 #include "TextureManager.h"
18
+#include "system/Sound.h"
19
 #include "utils/pixel.h"
19
 #include "utils/pixel.h"
20
 #include "loader/LoaderTR2.h"
20
 #include "loader/LoaderTR2.h"
21
 
21
 
626
         // Unknown, 0x40, 0x80 or 0xC0
626
         // Unknown, 0x40, 0x80 or 0xC0
627
         uint16_t flags = file.readU16();
627
         uint16_t flags = file.readU16();
628
 
628
 
629
-        getSoundManager().addSoundSource(x, y, z, soundID, flags);
629
+        SoundManager::addSoundSource(x, y, z, soundID, flags);
630
     }
630
     }
631
+
632
+    if (numSoundSources > 0)
633
+        getLog() << "LoaderTR2: Found " << numSoundSources << " SoundSources" << Log::endl;
631
 }
634
 }
632
 
635
 
633
 void LoaderTR2::loadSoundMap() {
636
 void LoaderTR2::loadSoundMap() {
634
     for (int i = 0; i < 370; i++) {
637
     for (int i = 0; i < 370; i++) {
635
-        getSoundManager().addSoundMapEntry(file.read16());
638
+        SoundManager::addSoundMapEntry(file.read16());
636
     }
639
     }
637
 }
640
 }
638
 
641
 
650
         // Bits 0-1: channel number?
653
         // Bits 0-1: channel number?
651
         uint16_t unknown2 = file.readU16();
654
         uint16_t unknown2 = file.readU16();
652
 
655
 
653
-        getSoundManager().addSoundDetail(sample, ((float)volume) / 32767.0f);
656
+        SoundManager::addSoundDetail(sample, ((float)volume) / 32767.0f);
654
     }
657
     }
658
+
659
+    if (numSoundDetails > 0)
660
+        getLog() << "LoaderTR2: Found " << numSoundDetails << " SoundDetails" << Log::endl;
655
 }
661
 }
656
 
662
 
657
 void LoaderTR2::loadSampleIndices() {
663
 void LoaderTR2::loadSampleIndices() {
658
     uint32_t numSampleIndices = file.readU32();
664
     uint32_t numSampleIndices = file.readU32();
659
     for (unsigned int i = 0; i < numSampleIndices; i++) {
665
     for (unsigned int i = 0; i < numSampleIndices; i++) {
660
-        getSoundManager().addSampleIndex(file.readU32());
666
+        SoundManager::addSampleIndex(file.readU32());
661
     }
667
     }
668
+
669
+    if (numSampleIndices > 0)
670
+        getLog() << "LoaderTR2: Found " << numSampleIndices << " SampleIndices" << Log::endl;
662
 }
671
 }
663
 
672
 
664
 void LoaderTR2::loadExternalSoundFile(std::string f) {
673
 void LoaderTR2::loadExternalSoundFile(std::string f) {
697
             buff[i] = sfx.readU8();
706
             buff[i] = sfx.readU8();
698
 
707
 
699
         unsigned long src;
708
         unsigned long src;
700
-        int ret = getSound().addWave(buff, riffSize + 8, &src, 0);
709
+        int ret = Sound::loadBuffer(buff, riffSize + 8);
701
         assert(ret >= 0);
710
         assert(ret >= 0);
702
 
711
 
703
         riffCount++;
712
         riffCount++;

+ 7
- 28
src/main.cpp View File

18
 #ifndef UNIT_TEST
18
 #ifndef UNIT_TEST
19
 
19
 
20
 #include "Camera.h"
20
 #include "Camera.h"
21
-#include "Font.h"
22
 #include "Game.h"
21
 #include "Game.h"
23
 #include "Log.h"
22
 #include "Log.h"
24
 #include "MenuFolder.h"
23
 #include "MenuFolder.h"
27
 #include "SoundManager.h"
26
 #include "SoundManager.h"
28
 #include "TextureManager.h"
27
 #include "TextureManager.h"
29
 #include "UI.h"
28
 #include "UI.h"
30
-#include "Window.h"
31
 #include "World.h"
29
 #include "World.h"
32
-
33
-#ifdef USING_AL
34
-#include "SoundAL.h"
35
-#else
36
-#include "SoundNull.h"
37
-#endif
30
+#include "system/Font.h"
31
+#include "system/Sound.h"
32
+#include "system/Window.h"
38
 
33
 
39
 #ifdef USING_SDL
34
 #ifdef USING_SDL
40
-#include "WindowSDL.h"
35
+#include "system/WindowSDL.h"
41
 #elif defined(USING_GLUT)
36
 #elif defined(USING_GLUT)
42
-#include "WindowGLUT.h"
37
+#include "system/WindowGLUT.h"
43
 #else
38
 #else
44
 #error No Windowing Library selected!
39
 #error No Windowing Library selected!
45
 #endif
40
 #endif
52
 static std::shared_ptr<MenuFolder> gMenu;
47
 static std::shared_ptr<MenuFolder> gMenu;
53
 static std::shared_ptr<Render> gRender;
48
 static std::shared_ptr<Render> gRender;
54
 static std::shared_ptr<RunTime> gRunTime;
49
 static std::shared_ptr<RunTime> gRunTime;
55
-static std::shared_ptr<Sound> gSound;
56
-static std::shared_ptr<SoundManager> gSoundManager;
57
 static std::shared_ptr<TextureManager> gTextureManager;
50
 static std::shared_ptr<TextureManager> gTextureManager;
58
 static std::shared_ptr<Window> gWindow;
51
 static std::shared_ptr<Window> gWindow;
59
 static std::shared_ptr<World> gWorld;
52
 static std::shared_ptr<World> gWorld;
82
     return *gRunTime;
75
     return *gRunTime;
83
 }
76
 }
84
 
77
 
85
-Sound& getSound() {
86
-    return *gSound;
87
-}
88
-
89
-SoundManager& getSoundManager() {
90
-    return *gSoundManager;
91
-}
92
-
93
 TextureManager& getTextureManager() {
78
 TextureManager& getTextureManager() {
94
     return *gTextureManager;
79
     return *gTextureManager;
95
 }
80
 }
120
     gLog.reset(new Log());
105
     gLog.reset(new Log());
121
     gMenu.reset(new MenuFolder());
106
     gMenu.reset(new MenuFolder());
122
     gRender.reset(new Render());
107
     gRender.reset(new Render());
123
-    gSoundManager.reset(new SoundManager());
124
     gTextureManager.reset(new TextureManager());
108
     gTextureManager.reset(new TextureManager());
125
     gWorld.reset(new World());
109
     gWorld.reset(new World());
126
 
110
 
127
-#ifdef USING_AL
128
-    gSound.reset(new SoundAL());
129
-#else
130
-    gSound.reset(new SoundNull());
131
-#endif
132
-
133
 #ifdef USING_SDL
111
 #ifdef USING_SDL
134
     gWindow.reset(new WindowSDL());
112
     gWindow.reset(new WindowSDL());
135
 #elif defined(USING_GLUT)
113
 #elif defined(USING_GLUT)
176
     }
154
     }
177
 
155
 
178
     // Initialize Sound
156
     // Initialize Sound
179
-    error = getSound().initialize();
157
+    error = Sound::initialize();
180
     if (error != 0) {
158
     if (error != 0) {
181
         std::cout << "Could not initialize Sound (" << error << ")!" << std::endl;
159
         std::cout << "Could not initialize Sound (" << error << ")!" << std::endl;
182
         return -4;
160
         return -4;
222
 
200
 
223
     UI::shutdown();
201
     UI::shutdown();
224
     Font::shutdown();
202
     Font::shutdown();
203
+    Sound::shutdown();
225
 
204
 
226
 #ifdef DEBUG
205
 #ifdef DEBUG
227
     std::cout << std::endl;
206
     std::cout << std::endl;

+ 31
- 0
src/system/CMakeLists.txt View File

1
+# Source files
2
+set (SYS_SRCS ${SYS_SRCS} "Font.cpp")
3
+set (SYS_SRCS ${SYS_SRCS} "FontImGui.cpp")
4
+set (SYS_SRCS ${SYS_SRCS} "FontTRLE.cpp")
5
+set (SYS_SRCS ${SYS_SRCS} "Sound.cpp")
6
+set (SYS_SRCS ${SYS_SRCS} "Window.cpp")
7
+
8
+# Select available Sound library
9
+if (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
10
+    set (SYS_SRCS ${SYS_SRCS} "SoundAL.cpp")
11
+else (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
12
+    message (STATUS "Disabled Sound support (no OpenAL and ALUT)!")
13
+endif (OPENAL_FOUND AND ALUT_FOUND AND ENABLE_AUDIO)
14
+
15
+# Select available Windowing library
16
+if (SDL2_FOUND AND NOT FORCE_GLUT)
17
+    set (SYS_SRCS ${SYS_SRCS} "WindowSDL.cpp")
18
+    if (SDL2TTF_FOUND)
19
+        set (SYS_SRCS ${SYS_SRCS} "FontSDL.cpp")
20
+    endif (SDL2TTF_FOUND)
21
+else (SDL2_FOUND AND NOT FORCE_GLUT)
22
+    if (FREEGLUT_FOUND)
23
+        set (SYS_SRCS ${SYS_SRCS} "WindowGLUT.cpp")
24
+    else (FREEGLUT_FOUND)
25
+        message (FATAL_ERROR "SDL2 or freeGLUT are required!")
26
+    endif (FREEGLUT_FOUND)
27
+endif (SDL2_FOUND AND NOT FORCE_GLUT)
28
+
29
+# Add library
30
+add_library (OpenRaider_system OBJECT ${SYS_SRCS})
31
+

src/Font.cpp → src/system/Font.cpp View File

8
 #include "global.h"
8
 #include "global.h"
9
 #include "Log.h"
9
 #include "Log.h"
10
 #include "utils/strings.h"
10
 #include "utils/strings.h"
11
-#include "Window.h"
12
-#include "Font.h"
13
-#include "FontImGui.h"
14
-#include "FontTRLE.h"
11
+#include "system/Window.h"
12
+#include "system/Font.h"
13
+#include "system/FontImGui.h"
14
+#include "system/FontTRLE.h"
15
 
15
 
16
 #ifdef USING_SDL_FONT
16
 #ifdef USING_SDL_FONT
17
-#include "FontSDL.h"
17
+#include "system/FontSDL.h"
18
 #endif
18
 #endif
19
 
19
 
20
 bool Font::isInit = false;
20
 bool Font::isInit = false;

src/FontImGui.cpp → src/system/FontImGui.cpp View File

7
 
7
 
8
 #include "global.h"
8
 #include "global.h"
9
 #include "UI.h"
9
 #include "UI.h"
10
-#include "FontImGui.h"
10
+#include "system/FontImGui.h"
11
 
11
 
12
 #define SCALE_CALC 1.0f
12
 #define SCALE_CALC 1.0f
13
 #define SCALE_DRAW 20.0f
13
 #define SCALE_DRAW 20.0f

src/FontSDL.cpp → src/system/FontSDL.cpp View File

8
 #include <iostream>
8
 #include <iostream>
9
 
9
 
10
 #include "global.h"
10
 #include "global.h"
11
-#include "FontSDL.h"
11
+#include "system/FontSDL.h"
12
 
12
 
13
 bool FontSDL::mFontInit = false;
13
 bool FontSDL::mFontInit = false;
14
 TTF_Font* FontSDL::mFont = nullptr;
14
 TTF_Font* FontSDL::mFont = nullptr;

src/FontTRLE.cpp → src/system/FontTRLE.cpp View File

12
 
12
 
13
 #include "global.h"
13
 #include "global.h"
14
 #include "utils/strings.h"
14
 #include "utils/strings.h"
15
-#include "FontTRLE.h"
15
+#include "system/FontTRLE.h"
16
 
16
 
17
 #define SCALING 2.0f
17
 #define SCALING 2.0f
18
 
18
 

+ 120
- 0
src/system/Sound.cpp View File

1
+/*!
2
+ * \file src/system/Sound.cpp
3
+ * \brief This is the audio manager Implementation
4
+ *
5
+ * \author xythobuz
6
+ */
7
+
8
+#include "global.h"
9
+#include "system/Sound.h"
10
+
11
+#ifdef USING_AL
12
+#include "system/SoundAL.h"
13
+#endif
14
+
15
+int Sound::initialize() {
16
+#ifdef USING_AL
17
+    return SoundAL::initialize();
18
+#else
19
+    return 0;
20
+#endif
21
+}
22
+
23
+void Sound::shutdown() {
24
+#ifdef USING_AL
25
+    SoundAL::shutdown();
26
+#endif
27
+}
28
+
29
+void Sound::clear() {
30
+#ifdef USING_AL
31
+    SoundAL::clear();
32
+#endif
33
+}
34
+
35
+int Sound::numBuffers() {
36
+#ifdef USING_AL
37
+    return SoundAL::numBuffers();
38
+#else
39
+    return 0;
40
+#endif
41
+}
42
+
43
+int Sound::loadBuffer(unsigned char* buffer, unsigned int length) {
44
+#ifdef USING_AL
45
+    return SoundAL::loadBuffer(buffer, length);
46
+#else
47
+    return 0;
48
+#endif
49
+}
50
+
51
+int Sound::numSources(bool atListener) {
52
+#ifdef USING_AL
53
+    return SoundAL::numSources(atListener);
54
+#else
55
+    return 0;
56
+#endif
57
+}
58
+
59
+int Sound::addSource(int buffer, float volume, bool atListener, bool loop) {
60
+#ifdef USING_AL
61
+    return SoundAL::addSource(buffer, volume, atListener, loop);
62
+#else
63
+    return 0;
64
+#endif
65
+}
66
+
67
+int Sound::sourceAt(int source, float pos[3]) {
68
+#ifdef USING_AL
69
+    return SoundAL::sourceAt(source, pos);
70
+#else
71
+    return 0;
72
+#endif
73
+}
74
+
75
+void Sound::listenAt(float pos[3], float orientation[6]) {
76
+#ifdef USING_AL
77
+    SoundAL::listenAt(pos, orientation);
78
+#endif
79
+}
80
+
81
+void Sound::play(int source, bool atListener) {
82
+#ifdef USING_AL
83
+    SoundAL::play(source, atListener);
84
+#endif
85
+}
86
+
87
+void Sound::stopAll() {
88
+#ifdef USING_AL
89
+    SoundAL::stopAll();
90
+#endif
91
+}
92
+
93
+void Sound::setEnabled(bool on) {
94
+#ifdef USING_AL
95
+    SoundAL::setEnabled(on);
96
+#endif
97
+}
98
+
99
+bool Sound::getEnabled() {
100
+#ifdef USING_AL
101
+    return SoundAL::getEnabled();
102
+#else
103
+    return false;
104
+#endif
105
+}
106
+
107
+void Sound::setVolume(float vol) {
108
+#ifdef USING_AL
109
+    SoundAL::setVolume(vol);
110
+#endif
111
+}
112
+
113
+float Sound::getVolume() {
114
+#ifdef USING_AL
115
+    return SoundAL::getVolume();
116
+#else
117
+    return 0.0f;
118
+#endif
119
+}
120
+

+ 215
- 0
src/system/SoundAL.cpp View File

1
+/*!
2
+ * \file src/system/SoundAL.cpp
3
+ * \brief This is the OpenAL audio manager Implementation
4
+ *
5
+ * \author Mongoose
6
+ * \author xythobuz
7
+ */
8
+
9
+#ifdef __APPLE__
10
+#include <OpenAL/al.h>
11
+#else
12
+#include <AL/al.h>
13
+#include <fcntl.h>
14
+#include <unistd.h>
15
+#endif
16
+
17
+#include <AL/alut.h>
18
+
19
+#include "global.h"
20
+#include "Log.h"
21
+#include "system/SoundAL.h"
22
+
23
+bool SoundAL::init = false;
24
+bool SoundAL::enabled = true;
25
+float SoundAL::volume = 1.0f;
26
+std::vector<unsigned int> SoundAL::buffers;
27
+std::vector<unsigned int> SoundAL::sources;
28
+std::vector<unsigned int> SoundAL::listenerSources;
29
+float SoundAL::lastPosition[3] = { 0.0f, 0.0f, 0.0f };
30
+
31
+int SoundAL::initialize() {
32
+    if (init)
33
+        return 0;
34
+
35
+    ALCdevice* device = alcOpenDevice(NULL);
36
+    ALCcontext* context = alcCreateContext(device, NULL);
37
+    alcMakeContextCurrent(context);
38
+
39
+    if (alutInitWithoutContext(nullptr, nullptr) == AL_FALSE) {
40
+        getLog() << "SoundAL Error: " << alutGetErrorString(alutGetError()) << Log::endl;
41
+        return -1;
42
+    }
43
+
44
+    init = true;
45
+    setVolume(volume);
46
+    return 0;
47
+}
48
+
49
+void SoundAL::shutdown() {
50
+    if (!init)
51
+        return;
52
+
53
+    clear();
54
+    if (alutExit() == AL_FALSE)
55
+        getLog() << "SoundAL Error: " << alutGetErrorString(alutGetError()) << Log::endl;
56
+    init = false;
57
+}
58
+
59
+void SoundAL::clear() {
60
+    if (!init)
61
+        return;
62
+
63
+    stopAll();
64
+
65
+    alGetError();
66
+    alDeleteSources(sources.size(), &sources[0]);
67
+    sources.clear();
68
+    if (alGetError() != AL_NO_ERROR) {
69
+        getLog() << "SoundAL: Error while deleting sources!" << Log::endl;
70
+    }
71
+
72
+    alGetError();
73
+    alDeleteSources(listenerSources.size(), &listenerSources[0]);
74
+    listenerSources.clear();
75
+    if (alGetError() != AL_NO_ERROR) {
76
+        getLog() << "SoundAL: Error while deleting listener sources!" << Log::endl;
77
+    }
78
+
79
+    alGetError();
80
+    alDeleteBuffers(buffers.size(), &buffers[0]);
81
+    if (alGetError() != AL_NO_ERROR) {
82
+        getLog() << "SoundAL: Error while deleting buffers!" << Log::endl;
83
+    }
84
+
85
+    for (int i = 0; i < 3; i++)
86
+        lastPosition[i] = 0.0f;
87
+}
88
+
89
+int SoundAL::numBuffers() {
90
+    return buffers.size();
91
+}
92
+
93
+int SoundAL::loadBuffer(unsigned char* buffer, unsigned int length) {
94
+    if (!init)
95
+        return -1;
96
+
97
+    alGetError();
98
+    unsigned int r = alutCreateBufferFromFileImage(buffer, length);
99
+    if (r == AL_NONE) {
100
+        getLog() << "SoundAL Error: " << alutGetErrorString(alutGetError()) << Log::endl;
101
+        return -2;
102
+    }
103
+    buffers.push_back(r);
104
+    return r;
105
+}
106
+
107
+int SoundAL::numSources(bool atListener) {
108
+    if (atListener)
109
+        return listenerSources.size();
110
+    else
111
+        return sources.size();
112
+}
113
+
114
+int SoundAL::addSource(int buffer, float volume, bool atListener, bool loop) {
115
+    if ((!init) || (buffer < 0) || (buffer >= buffers.size()))
116
+        return -1;
117
+
118
+    unsigned int id;
119
+
120
+    alGetError();
121
+    alGenSources(1, &id);
122
+    if (alGetError() != AL_NO_ERROR) {
123
+        getLog() << "SoundAL Error: Could not create source!" << Log::endl;
124
+        return -2;
125
+    }
126
+
127
+    alSourcei(id, AL_BUFFER, buffers.at(buffer));
128
+    alSourcef(id, AL_GAIN, volume);
129
+
130
+    if (loop)
131
+        alSourcei(id, AL_LOOPING, AL_TRUE);
132
+
133
+    if (atListener) {
134
+        alSourcefv(id, AL_POSITION, lastPosition);
135
+        listenerSources.push_back(id);
136
+        return listenerSources.size() - 1;
137
+    } else {
138
+        sources.push_back(id);
139
+        return sources.size() - 1;
140
+    }
141
+}
142
+
143
+int SoundAL::sourceAt(int source, float pos[3]) {
144
+    if (!init)
145
+        return -1;
146
+
147
+    if ((source < 0) || (source >= sources.size()) || (pos == nullptr)) {
148
+        getLog() << "SoundAL: Can't position non-existing source!" << Log::endl;
149
+        return -2;
150
+    }
151
+
152
+    alSourcefv(sources.at(source), AL_POSITION, pos);
153
+
154
+    return 0;
155
+}
156
+
157
+void SoundAL::listenAt(float pos[3], float orientation[6]) {
158
+    if ((!init) || (pos == nullptr) || (orientation == nullptr))
159
+        return;
160
+
161
+    alListenerfv(AL_POSITION, pos);
162
+    alListenerfv(AL_ORIENTATION, orientation);
163
+
164
+    for (auto& s : listenerSources) {
165
+        alSourcefv(s, AL_POSITION, pos);
166
+    }
167
+
168
+    for (int i = 0; i < 3; i++)
169
+        lastPosition[i] = pos[i];
170
+}
171
+
172
+void SoundAL::play(int source, bool atListener) {
173
+    if ((!init) || (!enabled))
174
+        return;
175
+
176
+    if (atListener) {
177
+        if ((source >= 0) && (source < listenerSources.size()))
178
+            alSourcePlay(listenerSources.at(source));
179
+        else
180
+            getLog() << "SoundAL: Can't play non-existing listener source!" << Log::endl;
181
+    } else {
182
+        if ((source >= 0) && (source < sources.size()))
183
+            alSourcePlay(sources.at(source));
184
+        else
185
+            getLog() << "SoundAL: Can't play non-existing source!" << Log::endl;
186
+    }
187
+}
188
+
189
+void SoundAL::stopAll() {
190
+    if (!init)
191
+        return;
192
+
193
+    alSourceStopv(sources.size(), &sources[0]);
194
+    alSourceStopv(listenerSources.size(), &listenerSources[0]);
195
+}
196
+
197
+void SoundAL::setEnabled(bool on) {
198
+    enabled = on;
199
+}
200
+
201
+bool SoundAL::getEnabled() {
202
+    return enabled;
203
+}
204
+
205
+void SoundAL::setVolume(float vol) {
206
+    volume = vol;
207
+
208
+    if (init)
209
+        alListenerf(AL_GAIN, volume);
210
+}
211
+
212
+float SoundAL::getVolume() {
213
+    return volume;
214
+}
215
+

src/Window.cpp → src/system/Window.cpp View File

13
 #include "global.h"
13
 #include "global.h"
14
 #include "math/math.h"
14
 #include "math/math.h"
15
 #include "utils/strings.h"
15
 #include "utils/strings.h"
16
-#include "Window.h"
16
+#include "system/Window.h"
17
 
17
 
18
 int Window::initializeGL() {
18
 int Window::initializeGL() {
19
     // Print driver support information
19
     // Print driver support information

src/WindowGLUT.cpp → src/system/WindowGLUT.cpp View File

13
 #include "RunTime.h"
13
 #include "RunTime.h"
14
 #include "UI.h"
14
 #include "UI.h"
15
 #include "utils/strings.h"
15
 #include "utils/strings.h"
16
-#include "WindowGLUT.h"
16
+#include "system/WindowGLUT.h"
17
 
17
 
18
 //! \todo Modifier keys currently don't create keyboard events...
18
 //! \todo Modifier keys currently don't create keyboard events...
19
 
19
 

src/WindowSDL.cpp → src/system/WindowSDL.cpp View File

11
 #include "RunTime.h"
11
 #include "RunTime.h"
12
 #include "UI.h"
12
 #include "UI.h"
13
 #include "utils/strings.h"
13
 #include "utils/strings.h"
14
-#include "WindowSDL.h"
14
+#include "system/WindowSDL.h"
15
 
15
 
16
 #define SUBSYSTEMS_USED (SDL_INIT_VIDEO | SDL_INIT_EVENTS)
16
 #define SUBSYSTEMS_USED (SDL_INIT_VIDEO | SDL_INIT_EVENTS)
17
 
17
 

Loading…
Cancel
Save