#ifndef D_SND_CONTROL_PLAYER_H
#define D_SND_CONTROL_PLAYER_H

#include "d/snd/d_snd_sound.h"
#include "nw4r/snd/snd_SoundPlayer.h"

class dSndControlPlayer_c : public dSndControl_c {
public:
    dSndControlPlayer_c(f32 value, f32 min, f32 max) : dSndControl_c(value, min, max) {}
    virtual void reset() override; // vt 0x0C

    virtual void stop() override;      // vt 0x18
    virtual void apply() = 0;          // vt 0x1C
    virtual f32 getAppliedValue() = 0; // vt 0x20

    void setIndex1(u32 idx);
    void setIndex2(u32 idx);

protected:
    /* 0x30 */ nw4r::snd::SoundPlayer *mpPlayer;
    /* 0x34 */ u32 mIndex;
};

class dSndControlPlayerVolumeBase_c : public dSndControlPlayer_c {
public:
    dSndControlPlayerVolumeBase_c();
};

class dSndControlPlayerVolume_c : public dSndControlPlayerVolumeBase_c {
public:
    dSndControlPlayerVolume_c() {}

    virtual void apply() override;          // vt 0x1C
    virtual f32 getAppliedValue() override; // vt 0x20
};

class dSndControlPlayerLpfFreq_c : public dSndControlPlayer_c {
public:
    dSndControlPlayerLpfFreq_c() : dSndControlPlayer_c(0.0f, -1.0f, 0.0f) {}

    virtual void apply() override;          // vt 0x1C
    virtual f32 getAppliedValue() override; // vt 0x20
};

class dSndControlPlayerFxSend_c : public dSndControlPlayer_c {
public:
    dSndControlPlayerFxSend_c() : dSndControlPlayer_c(0.0f, 0.0f, 1.0f) {}

    virtual void apply() override;          // vt 0x1C
    virtual f32 getAppliedValue() override; // vt 0x20
};

#endif
