Added events: PlayBackgroundMusic, SetBGMGain, SetSFXGain. Added some editor specific code.
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
#ifndef Events_PlayBackgroundMusic_h__
|
||||
#define Events_PlayBackgroundMusic_h__
|
||||
|
||||
#include <string>
|
||||
#include "Core/Entity.h"
|
||||
#include "Core/Event.h"
|
||||
|
||||
namespace Events
|
||||
{
|
||||
|
||||
struct PlayBackgroundMusic : public Event
|
||||
{
|
||||
std::string FilePath = "";
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -2,7 +2,7 @@
|
||||
#define Events_PlaySoundOnPosition_h__
|
||||
|
||||
#include <string>
|
||||
#include <glm\common.hpp>
|
||||
#include <glm/common.hpp>
|
||||
#include "Core/Event.h"
|
||||
|
||||
namespace Events
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef Events_SetBGMGain_h__
|
||||
#define Events_SetBGMGain_h__
|
||||
|
||||
#include "Core/Event.h"
|
||||
|
||||
namespace Events
|
||||
{
|
||||
|
||||
struct SetBGMGain : public Event
|
||||
{
|
||||
float Gain;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,16 @@
|
||||
#ifndef Events_SetSFXGain_h__
|
||||
#define Events_SetSFXGain_h__
|
||||
|
||||
#include "Core/Event.h"
|
||||
|
||||
namespace Events
|
||||
{
|
||||
|
||||
struct SetSFXGain : public Event
|
||||
{
|
||||
float Gain;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -7,7 +7,7 @@ class Sound : public Resource
|
||||
{
|
||||
friend class ResourceManager;
|
||||
public:
|
||||
Sound(std::string path) { m_Buffer = LoadFile(path); }
|
||||
Sound(std::string path) { m_Buffer = LoadFile(path); m_Path = path; }
|
||||
~Sound() { ClearBuffer(); }
|
||||
ALuint Buffer() { return m_Buffer; }
|
||||
std::string Path() { return m_Path; }
|
||||
@@ -35,14 +35,14 @@ private:
|
||||
return m_BufferCache[path];
|
||||
}
|
||||
|
||||
//// Open file
|
||||
// Open file
|
||||
FILE *fp = fopen(path.c_str(), "rb");
|
||||
if (!fp) {
|
||||
printf("Failed to open file %s, no such file exists", path.c_str());
|
||||
printf("Sound: Failed to open file %s, no such file exists", path.c_str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
//// CHECK FOR VALID WAVE-FILE
|
||||
//CHECK FOR VALID WAVE-FILE
|
||||
fread(m_Type, sizeof(char), 4, fp);
|
||||
if (m_Type[0] != 'R' || m_Type[1] != 'I' || m_Type[2] != 'F' || m_Type[3] != 'F') {
|
||||
printf("ERROR: No RIFF in WAVE-file");
|
||||
@@ -62,7 +62,7 @@ private:
|
||||
return 0;
|
||||
}
|
||||
|
||||
//// READ THE DATA FROM WAVE-FILE
|
||||
// READ THE DATA FROM WAVE-FILE
|
||||
fread(&m_ChunkSize, 4 * sizeof(char), 1, fp);
|
||||
fread(&m_FormatType, 2 * sizeof(char), 1, fp);
|
||||
fread(&m_Channels, 2 * sizeof(char), 1, fp);
|
||||
@@ -83,7 +83,7 @@ private:
|
||||
fread(buf, sizeof(char), m_DataSize, fp);
|
||||
fclose(fp);
|
||||
|
||||
//// Create buffer
|
||||
// Create buffer
|
||||
ALuint format = 0;
|
||||
if (m_BitsPerSample == 8) {
|
||||
if (m_Channels == 1) {
|
||||
|
||||
@@ -15,9 +15,12 @@
|
||||
#include "Sound/EPlaySound.h"
|
||||
#include "Sound/EPlaySoundOnEntity.h"
|
||||
#include "Sound/EPlaySoundOnPosition.h"
|
||||
#include "Sound/EPlayBackgroundMusic.h"
|
||||
#include "Sound/EPauseSound.h"
|
||||
#include "Sound/EStopSound.h"
|
||||
#include "Sound/EContinueSound.h"
|
||||
#include "Sound/EStopSound.h"
|
||||
#include "Sound/ESetBGMGain.h"
|
||||
#include "Sound/ESetSFXGain.h"
|
||||
|
||||
|
||||
struct Source
|
||||
@@ -31,9 +34,10 @@ class SoundSystem
|
||||
{
|
||||
public:
|
||||
SoundSystem() { }
|
||||
SoundSystem(World* world, EventBroker* eventBroker);
|
||||
SoundSystem(World* world, EventBroker* eventBroker, bool editorMode);
|
||||
~SoundSystem();
|
||||
void Update(); // Update emitters
|
||||
// Update emitters / listener
|
||||
void Update();
|
||||
private:
|
||||
// Help functions for working with OpenaAL
|
||||
void setListenerPos(glm::vec3 pos) { alListener3f(AL_POSITION, pos.x, pos.y, pos.z); };
|
||||
@@ -54,9 +58,9 @@ private:
|
||||
Source* createSource(std::string filePath);
|
||||
void playSound(Source* source);
|
||||
void stopSound(Source* source);
|
||||
void stopEmitter(EntityID emitter);
|
||||
void stopEmitters();
|
||||
bool isPlaying(ALuint source);
|
||||
void setGain(Source* source, float gain);
|
||||
void setSoundProperties(ALuint source, float gain, float pitch, bool loop, float maxDistance, float rollOffFactor, float referenceDistance);
|
||||
|
||||
// OpenAL system variables
|
||||
@@ -64,9 +68,12 @@ private:
|
||||
ALCcontext* m_ALCcontext = nullptr;
|
||||
|
||||
// Logic
|
||||
World* m_World;
|
||||
EventBroker* m_EventBroker;
|
||||
World* m_World = nullptr;
|
||||
EventBroker* m_EventBroker = nullptr;
|
||||
std::unordered_map<EntityID, Source*> m_Sources;
|
||||
float m_BGMVolumeChannel = 1.f;
|
||||
float m_SFXVolumeChannel = 1.f;
|
||||
bool m_EditorEnabled = false;
|
||||
|
||||
// Events
|
||||
EventRelay<SoundSystem, Events::PlaySound> m_EPlaySound;
|
||||
@@ -81,6 +88,12 @@ private:
|
||||
bool OnStopSound(const Events::StopSound &e);
|
||||
EventRelay<SoundSystem, Events::ContinueSound> m_EContinueSound;
|
||||
bool OnContinueSound(const Events::ContinueSound &e);
|
||||
EventRelay<SoundSystem, Events::PlayBackgroundMusic> m_EPlayBackgroundMusic;
|
||||
bool OnPlayBackgroundMusic(const Events::PlayBackgroundMusic &e);
|
||||
EventRelay<SoundSystem, Events::SetBGMGain> m_ESetBGMGain;
|
||||
bool OnSetBGMGain(const Events::SetBGMGain &e); // Not tested
|
||||
EventRelay<SoundSystem, Events::SetSFXGain> m_ESetSFXGain;
|
||||
bool OnSetSFXGain(const Events::SetSFXGain &e); // Not tested
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user