#ifndef MUSIC_H
#define MUSIC_H

#include "BinaryBlob.h"

#define musicroom(rx, ry) ((rx) + ((ry) * 20))

/* The amount of "space" for the scale of the user-set volume. */
#define USER_VOLUME_MAX 256

/* It is advised that USER_VOLUME_MAX be divisible by this. */
#define USER_VOLUME_STEP 32

class musicclass
{
public:
    musicclass(void);
    void init(void);
    void destroy(void);

    void play(int t);
    void resume(void);
    void resumefade(const int fadein_ms);
    void pause(void);
    void haltdasmusik(void);
    void silencedasmusik(void);
    void fadeMusicVolumeIn(int ms);
    void fadeMusicVolumeOut(const int fadeout_ms);
    void fadeout(const bool quick_fade_ = true);
    void fadein(void);
    void processmusicfadein(void);
    void processmusicfadeout(void);
    void processmusic(void);
    void niceplay(int t);

    void changemusicarea(int x, int y);

    int currentsong;

    void playef(int t);
    void pauseef(void);
    void resumeef(void);

    bool halted(void);
    void updatemutestate(void);

    bool safeToProcessMusic;

    int nicechange; // -1 if no song queued
    bool nicefade;

    bool m_doFadeInVol;
    bool m_doFadeOutVol;
    int musicVolume;

    /* 0..USER_VOLUME_MAX */
    int user_music_volume;
    int user_sound_volume;

    bool quick_fade;

    // MMMMMM mod settings
    bool mmmmmm;
    bool usingmmmmmm;

    binaryBlob pppppp_blob;
    binaryBlob mmmmmm_blob;
    int num_pppppp_tracks;
    int num_mmmmmm_tracks;
};

#ifndef MUSIC_DEFINITION
extern musicclass music;
#endif

#endif /* MUSIC_H */
