Daniele Bartolini 12 лет назад
Родитель
Сommit
5e1a67122f
1 измененных файлов с 31 добавлено и 3 удалено
  1. 31 3
      engine/audio/backend/SLESSoundWorld.cpp

+ 31 - 3
engine/audio/backend/SLESSoundWorld.cpp

@@ -254,6 +254,12 @@ struct SoundInstance
 		check_sles_errors(result);
 	}
 
+	void resume()
+	{
+		SLresult res = (*m_player_play)->SetPlayState(m_player_play, SL_PLAYSTATE_PLAYING);
+		check_sles_errors(res);
+	}
+
 	void stop()
 	{
 		SLresult res = (*m_player_play)->SetPlayState(m_player_play, SL_PLAYSTATE_STOPPED);
@@ -331,7 +337,6 @@ class SLESSoundWorld : public SoundWorld
 public:
 
 	SLESSoundWorld()
-		: m_to_stop(default_allocator())
 	{
 		sles_sound_world::init();
 		SLresult result;
@@ -359,7 +364,7 @@ public:
 		sles_sound_world::shutdown();
 	}
 
-	virtual SoundInstanceId play(const char* name, bool loop, float volume)
+	virtual SoundInstanceId play(const char* name, bool loop, float volume, const Vector3& /*pos*/)
 	{
 		return play((SoundResource*) device()->resource_manager()->lookup(SOUND_EXTENSION, name), loop, volume);
 	}
@@ -381,6 +386,30 @@ public:
 		m_playing_sounds.destroy(id);
 	}
 
+	virtual void stop_all()
+	{
+		for (uint32_t i = 0; i < m_playing_sounds.size(); i++)
+		{
+			m_playing_sounds[i].stop();
+		}
+	}
+
+	virtual void pause_all()
+	{
+		for (uint32_t i = 0; i < m_playing_sounds.size(); i++)
+		{
+			m_playing_sounds[i].pause();
+		}
+	}
+
+	virtual void resume_all()
+	{
+		for (uint32_t i = 0; i < m_playing_sounds.size(); i++)
+		{
+			m_playing_sounds[i].resume();
+		}
+	}
+
 	virtual void set_sound_positions(uint32_t count, const SoundInstanceId* ids, const Vector3* positions)
 	{
 		for (uint32_t i = 0; i < m_playing_sounds.size(); i++)
@@ -438,7 +467,6 @@ private:
 
 	IdArray<MAX_SOUND_INSTANCES, SoundInstance> m_playing_sounds;
 	Matrix4x4 m_listener_pose;
-	Queue<SoundInstanceId> m_to_stop;
 
 	SLObjectItf m_sl_object;
 	SLEngineItf m_sl_engine;