#pragma once #include "../../Minecraft.World/Util/SoundTypes.h" #ifdef _WINDOWS64 #include "../../windows64/Miles/include/mss.h" #else // Linux currently uses the Windows64 Miles headers as the compatible host SDK. #include "../../Minecraft.Client/Platform/Windows64/Miles/include/mss.h" #endif typedef struct { float x, y, z; } AUDIO_VECTOR; typedef struct { bool bValid; AUDIO_VECTOR vPosition; AUDIO_VECTOR vOrientFront; } AUDIO_LISTENER; class Options; class ConsoleSoundEngine { public: ConsoleSoundEngine() : m_bIsPlayingStreamingCDMusic(false), m_bIsPlayingStreamingGameMusic(false), m_bIsPlayingEndMusic(false), m_bIsPlayingNetherMusic(false) {} virtual void tick(std::shared_ptr* players, float a) = 0; virtual void destroy() = 0; virtual void play(int iSound, float x, float y, float z, float volume, float pitch) = 0; virtual void playStreaming(const std::wstring& name, float x, float y, float z, float volume, float pitch, bool bMusicDelay = true) = 0; virtual void playUI(int iSound, float volume, float pitch) = 0; virtual void updateMusicVolume(float fVal) = 0; virtual void updateSystemMusicPlaying(bool isPlaying) = 0; virtual void updateSoundEffectVolume(float fVal) = 0; virtual void init(Options*) = 0; virtual void add(const std::wstring& name, File* file) = 0; virtual void addMusic(const std::wstring& name, File* file) = 0; virtual void addStreaming(const std::wstring& name, File* file) = 0; virtual char* ConvertSoundPathToName(const std::wstring& name, bool bConvertSpaces) = 0; virtual void playMusicTick() = 0; virtual bool GetIsPlayingStreamingCDMusic(); virtual bool GetIsPlayingStreamingGameMusic(); virtual void SetIsPlayingStreamingCDMusic(bool bVal); virtual void SetIsPlayingStreamingGameMusic(bool bVal); virtual bool GetIsPlayingEndMusic(); virtual bool GetIsPlayingNetherMusic(); virtual void SetIsPlayingEndMusic(bool bVal); virtual void SetIsPlayingNetherMusic(bool bVal); static const wchar_t* wchSoundNames[eSoundType_MAX]; static const wchar_t* wchUISoundNames[eSFX_MAX]; public: void tick(); void schedule(int iSound, float x, float y, float z, float volume, float pitch, int delayTicks); private: class ScheduledSound { public: int iSound; float x, y, z; float volume, pitch; int delay; public: ScheduledSound(int iSound, float x, float y, float z, float volume, float pitch, int delay); }; std::vector scheduledSounds; virtual int initAudioHardware(int iMinSpeakers) = 0; bool m_bIsPlayingStreamingCDMusic; bool m_bIsPlayingStreamingGameMusic; bool m_bIsPlayingEndMusic; bool m_bIsPlayingNetherMusic; };