//--------------------------------------------------------------------------------------
// Copyright (C) 2008 http://shift.delblanco.es
//--------------------------------------------------------------------------------------
// SHIFT Videogame 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 3 of the License, or later version.
//
// This program 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.
//--------------------------------------------------------------------------------------
/// \file 3DSoundMng.h
/// Clase para gestionar los sonidos 3D de la escena.
/// Esta clase abstrae todas las operaciones de gestión de los sonidos 3D de la escena
//--------------------------------------------------------------------------------------
#pragma once
#ifndef __C3DSOUNDMNG_H__
#define __C3DSOUNDMNG_H__

//--------------------------------------------------------------------------------------
// Ficheros de cabecera
//--------------------------------------------------------------------------------------
#include <vector>
#include "3DSound.h"

//--------------------------------------------------------------------------------------
/// Clase para gestionar los sonidos 3D de la escena.
//--------------------------------------------------------------------------------------
class C3DSoundMng
{

private:  // Campos miembro

    bool                        m_bInit;              ///< Flag que indica si el objeto está inicializado

    CSoundManager*              m_pSoundManager;      ///< Manejador principal de sonidos 3D
    LPDIRECTSOUND3DLISTENER     m_pDSListener;        ///< Entorno 3D para el sonido

    long                        m_lVolume;            ///< Volumen actual de los sonidos
    std::vector<C3DSound*>      m_aSounds;            ///< Lista de sonidos 3D manejados

public: // Métodos públicos

    /// Constructor
    C3DSoundMng();
    /// Destructor
    ~C3DSoundMng();

    /// Carga el manejador de sonidos
    bool initialize(void);

    /// Crea un nuevo sonido 3D
    C3DSound *Create(LPWSTR File, C3DObject *Owner);
    /// Destruye un sonido 3D existente
    bool Destroy(C3DSound *Sound);
    /// Pausa y Despausa la reproducción de todos los sonidos que maneja
    void Pause(bool enabled);
    /// Cambia el volumen de reproducción de todos los sonidos que maneja
    void setVolume(long lVolume);

    /// Actualiza los cambios de los sonidos 3D
    void update(void);
    /// Libera todos los sonidos que maneja
    void Release();

};

#endif
