Files
GDevelop/Extensions/SoundObject/SoundWrapperBase.cpp
T
2015-11-01 17:06:23 +01:00

287 lines
4.9 KiB
C++

/**
Sound Object Extension
Copyright (c) 2011-2012 Thomas Flecy
This project is released under the MIT License.
*/
#include "SoundWrapperBase.h"
#include "GDCpp/Project/Project.h"
#include "GDCpp/ResourcesLoader.h"
///////////////// SoundWrapperBase /////////////////
SoundWrapperBase::SoundWrapperBase() : m_filename("")
{
}
SoundWrapperBase::~SoundWrapperBase()
{
}
bool SoundWrapperBase::LoadFromFile(const gd::String &filename, const RuntimeScene &scene)
{
if(LoadFromFileImpl(filename, scene))
{
m_filename = filename;
return true;
}
else
{
return false;
}
}
/////////////////// SoundWrapper ///////////////////
SoundWrapper::SoundWrapper() : SoundWrapperBase(), m_sound(), m_buffer()
{
}
SoundWrapper::~SoundWrapper()
{
}
void SoundWrapper::Play()
{
m_sound.play();
}
bool SoundWrapper::IsPlaying() const
{
return (m_sound.getStatus() == sf::SoundSource::Playing);
}
void SoundWrapper::Pause()
{
m_sound.pause();
}
bool SoundWrapper::IsPausing() const
{
return (m_sound.getStatus() == sf::SoundSource::Paused);
}
void SoundWrapper::Stop()
{
m_sound.stop();
}
bool SoundWrapper::IsStopped() const
{
return (m_sound.getStatus() == sf::SoundSource::Stopped);
}
void SoundWrapper::SetPosition(sf::Vector3f position)
{
m_sound.setPosition(position);
}
sf::Vector3f SoundWrapper::GetPosition() const
{
return m_sound.getPosition();
}
void SoundWrapper::SetVolume(float volume)
{
m_sound.setVolume(volume);
}
float SoundWrapper::GetVolume() const
{
return m_sound.getVolume();
}
void SoundWrapper::SetAttenuation(float attenuation)
{
m_sound.setAttenuation(attenuation);
}
float SoundWrapper::GetAttenuation() const
{
return m_sound.getAttenuation();
}
void SoundWrapper::SetMinDistance(float minDist)
{
m_sound.setMinDistance(minDist);
}
float SoundWrapper::GetMinDistance() const
{
return m_sound.getMinDistance();
}
void SoundWrapper::SetLooping(bool is)
{
m_sound.setLoop(is);
}
bool SoundWrapper::IsLooping() const
{
return m_sound.getLoop();
}
void SoundWrapper::SetPitch(float pitch)
{
m_sound.setPitch(pitch);
}
float SoundWrapper::GetPitch() const
{
return m_sound.getPitch();
}
bool SoundWrapper::LoadFromFileImpl(const gd::String &filename, const RuntimeScene &scene)
{
#if !defined(GD_IDE_ONLY)
if(gd::ResourcesLoader::Get()->HasFile(filename))
{
if(m_buffer.loadFromMemory(gd::ResourcesLoader::Get()->LoadBinaryFile(filename),
gd::ResourcesLoader::Get()->GetBinaryFileSize(filename)))
{
m_sound.setBuffer(m_buffer);
return true;
}
}
else
#endif
{
if(m_buffer.loadFromFile(filename.ToLocale()))
{
m_sound.setBuffer(m_buffer);
}
}
return false;
}
/////////////////// MusicWrapper ///////////////////
MusicWrapper::MusicWrapper() : SoundWrapperBase(), m_music()
{
}
MusicWrapper::~MusicWrapper()
{
}
void MusicWrapper::Play()
{
m_music.play();
}
bool MusicWrapper::IsPlaying() const
{
return (m_music.getStatus() == sf::SoundSource::Playing);
}
void MusicWrapper::Pause()
{
m_music.pause();
}
bool MusicWrapper::IsPausing() const
{
return (m_music.getStatus() == sf::SoundSource::Paused);
}
void MusicWrapper::Stop()
{
m_music.stop();
}
bool MusicWrapper::IsStopped() const
{
return (m_music.getStatus() == sf::SoundSource::Stopped);
}
void MusicWrapper::SetPosition(sf::Vector3f position)
{
m_music.setPosition(position);
}
sf::Vector3f MusicWrapper::GetPosition() const
{
return m_music.getPosition();
}
void MusicWrapper::SetVolume(float volume)
{
m_music.setVolume(volume);
}
float MusicWrapper::GetVolume() const
{
return m_music.getVolume();
}
void MusicWrapper::SetAttenuation(float attenuation)
{
m_music.setAttenuation(attenuation);
}
float MusicWrapper::GetAttenuation() const
{
return m_music.getAttenuation();
}
void MusicWrapper::SetMinDistance(float minDist)
{
m_music.setMinDistance(minDist);
}
float MusicWrapper::GetMinDistance() const
{
return m_music.getMinDistance();
}
void MusicWrapper::SetLooping(bool is)
{
m_music.setLoop(is);
}
bool MusicWrapper::IsLooping() const
{
return m_music.getLoop();
}
void MusicWrapper::SetPitch(float pitch)
{
m_music.setPitch(pitch);
}
float MusicWrapper::GetPitch() const
{
return m_music.getPitch();
}
bool MusicWrapper::LoadFromFileImpl(const gd::String &filename, const RuntimeScene &scene)
{
#if !defined(GD_IDE_ONLY)
if(gd::ResourcesLoader::Get()->HasFile(filename))
{
if(m_music.openFromMemory(gd::ResourcesLoader::Get()->LoadBinaryFile(filename),
gd::ResourcesLoader::Get()->GetBinaryFileSize(filename)))
{
return true;
}
}
else
#endif
{
if(m_music.openFromFile(filename.ToLocale()))
{
return true;
}
}
return false;
}