add: Player class
This commit is contained in:
parent
1c8de670ac
commit
665735626e
|
|
@ -65,7 +65,7 @@ void e2d::Animate::Init()
|
||||||
auto target = dynamic_cast<Sprite*>(target_);
|
auto target = dynamic_cast<Sprite*>(target_);
|
||||||
if (target && animation_)
|
if (target && animation_)
|
||||||
{
|
{
|
||||||
target->Open(animation_->GetFrames()[frame_index_]);
|
target->Load(animation_->GetFrames()[frame_index_]);
|
||||||
++frame_index_;
|
++frame_index_;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -87,7 +87,7 @@ void e2d::Animate::Update()
|
||||||
|
|
||||||
if (target)
|
if (target)
|
||||||
{
|
{
|
||||||
target->Open(frames[frame_index_]);
|
target->Load(frames[frame_index_]);
|
||||||
}
|
}
|
||||||
|
|
||||||
started_ += Duration(animation_->GetInterval());
|
started_ += Duration(animation_->GetInterval());
|
||||||
|
|
|
||||||
|
|
@ -55,12 +55,12 @@ namespace e2d
|
||||||
virtual ~Image();
|
virtual ~Image();
|
||||||
|
|
||||||
// 加载图片资源
|
// 加载图片资源
|
||||||
bool Open(
|
bool Load(
|
||||||
const Resource& res
|
const Resource& res
|
||||||
);
|
);
|
||||||
|
|
||||||
// 加载图片资源
|
// 加载图片资源
|
||||||
bool Open(
|
bool Load(
|
||||||
const String& file_name
|
const String& file_name
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -108,13 +108,13 @@ namespace e2d
|
||||||
protected:
|
protected:
|
||||||
E2D_DISABLE_COPY(Image);
|
E2D_DISABLE_COPY(Image);
|
||||||
|
|
||||||
// ¼ÓÔØÍ¼Æ¬×ÊÔ´
|
// »º´æ Bitmap ×ÊÔ´
|
||||||
bool Load(
|
static bool CacheBitmap(
|
||||||
const String& file_name
|
const String& file_name
|
||||||
);
|
);
|
||||||
|
|
||||||
// ¼ÓÔØÍ¼Æ¬×ÊÔ´
|
// »º´æ Bitmap ×ÊÔ´
|
||||||
bool Load(
|
static bool CacheBitmap(
|
||||||
const Resource& res
|
const Resource& res
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -729,17 +729,17 @@ namespace e2d
|
||||||
virtual ~Sprite();
|
virtual ~Sprite();
|
||||||
|
|
||||||
// 加载图片文件
|
// 加载图片文件
|
||||||
bool Open(
|
bool Load(
|
||||||
const Resource& res
|
const Resource& res
|
||||||
);
|
);
|
||||||
|
|
||||||
// 加载图片文件
|
// 加载图片文件
|
||||||
bool Open(
|
bool Load(
|
||||||
const String& file_name
|
const String& file_name
|
||||||
);
|
);
|
||||||
|
|
||||||
// 加载图片
|
// 加载图片
|
||||||
bool Open(
|
bool Load(
|
||||||
Image * image
|
Image * image
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
106
core/e2dtool.h
106
core/e2dtool.h
|
|
@ -86,12 +86,12 @@ namespace e2d
|
||||||
virtual ~Music();
|
virtual ~Music();
|
||||||
|
|
||||||
// 打开音乐文件
|
// 打开音乐文件
|
||||||
bool Open(
|
bool Load(
|
||||||
const e2d::String& file_path /* 音乐文件路径 */
|
const e2d::String& file_path /* 音乐文件路径 */
|
||||||
);
|
);
|
||||||
|
|
||||||
// 打开音乐资源
|
// 打开音乐资源
|
||||||
bool Open(
|
bool Load(
|
||||||
const Resource& res
|
const Resource& res
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
@ -134,6 +134,8 @@ namespace e2d
|
||||||
IXAudio2SourceVoice * GetSourceVoice() const;
|
IXAudio2SourceVoice * GetSourceVoice() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Music);
|
||||||
|
|
||||||
bool ReadMMIO();
|
bool ReadMMIO();
|
||||||
|
|
||||||
bool ResetFile();
|
bool ResetFile();
|
||||||
|
|
@ -163,6 +165,106 @@ namespace e2d
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// 音乐播放器
|
||||||
|
class Player
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Player();
|
||||||
|
|
||||||
|
~Player();
|
||||||
|
|
||||||
|
// 预加载音乐资源
|
||||||
|
bool Load(
|
||||||
|
const String& file_path /* 音乐文件路径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 播放音乐
|
||||||
|
bool Play(
|
||||||
|
const String& file_path, /* 音乐文件路径 */
|
||||||
|
int loop_count = 0 /* 重复播放次数,设置 -1 为循环播放 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 暂停音乐
|
||||||
|
void Pause(
|
||||||
|
const String& file_path /* 音乐文件路径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 继续播放音乐
|
||||||
|
void Resume(
|
||||||
|
const String& file_path /* 音乐文件路径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 停止音乐
|
||||||
|
void Stop(
|
||||||
|
const String& file_path /* 音乐文件路径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取音乐播放状态
|
||||||
|
bool IsPlaying(
|
||||||
|
const String& file_path /* 音乐文件路径 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 预加载音乐资源
|
||||||
|
bool Load(
|
||||||
|
const Resource& res /* 音乐资源 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 播放音乐
|
||||||
|
bool Play(
|
||||||
|
const Resource& res, /* 音乐资源 */
|
||||||
|
int loop_count = 0 /* 重复播放次数,设置 -1 为循环播放 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 暂停音乐
|
||||||
|
void Pause(
|
||||||
|
const Resource& res /* 音乐资源 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 继续播放音乐
|
||||||
|
void Resume(
|
||||||
|
const Resource& res /* 音乐资源 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 停止音乐
|
||||||
|
void Stop(
|
||||||
|
const Resource& res /* 音乐资源 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取音乐播放状态
|
||||||
|
bool IsPlaying(
|
||||||
|
const Resource& res /* 音乐资源 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 获取音量
|
||||||
|
float GetVolume();
|
||||||
|
|
||||||
|
// 设置音量
|
||||||
|
void SetVolume(
|
||||||
|
float volume /* 音量范围为 -224 ~ 224,0 是静音,1 是正常音量 */
|
||||||
|
);
|
||||||
|
|
||||||
|
// 暂停所有音乐
|
||||||
|
void PauseAll();
|
||||||
|
|
||||||
|
// 继续播放所有音乐
|
||||||
|
void ResumeAll();
|
||||||
|
|
||||||
|
// 停止所有音乐
|
||||||
|
void StopAll();
|
||||||
|
|
||||||
|
// 清除缓存
|
||||||
|
static void ClearCache();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
E2D_DISABLE_COPY(Player);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
float volume_;
|
||||||
|
|
||||||
|
static std::map<size_t, Music*> musics_;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
// 数据管理工具
|
// 数据管理工具
|
||||||
class Data
|
class Data
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ e2d::Game::~Game()
|
||||||
SafeRelease(next_scene_);
|
SafeRelease(next_scene_);
|
||||||
|
|
||||||
Image::ClearCache();
|
Image::ClearCache();
|
||||||
|
Player::ClearCache();
|
||||||
Device::Destroy();
|
Device::Destroy();
|
||||||
|
|
||||||
if (hwnd_)
|
if (hwnd_)
|
||||||
|
|
|
||||||
|
|
@ -34,14 +34,14 @@ e2d::Image::Image(const Resource& res)
|
||||||
: bitmap_(nullptr)
|
: bitmap_(nullptr)
|
||||||
, crop_rect_()
|
, crop_rect_()
|
||||||
{
|
{
|
||||||
this->Open(res);
|
this->Load(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Image::Image(const Resource& res, const Rect& crop_rect)
|
e2d::Image::Image(const Resource& res, const Rect& crop_rect)
|
||||||
: bitmap_(nullptr)
|
: bitmap_(nullptr)
|
||||||
, crop_rect_()
|
, crop_rect_()
|
||||||
{
|
{
|
||||||
this->Open(res);
|
this->Load(res);
|
||||||
this->Crop(crop_rect);
|
this->Crop(crop_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -49,14 +49,14 @@ e2d::Image::Image(const String & file_name)
|
||||||
: bitmap_(nullptr)
|
: bitmap_(nullptr)
|
||||||
, crop_rect_()
|
, crop_rect_()
|
||||||
{
|
{
|
||||||
this->Open(file_name);
|
this->Load(file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Image::Image(const String & file_name, const Rect & crop_rect)
|
e2d::Image::Image(const String & file_name, const Rect & crop_rect)
|
||||||
: bitmap_(nullptr)
|
: bitmap_(nullptr)
|
||||||
, crop_rect_()
|
, crop_rect_()
|
||||||
{
|
{
|
||||||
this->Open(file_name);
|
this->Load(file_name);
|
||||||
this->Crop(crop_rect);
|
this->Crop(crop_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -65,9 +65,9 @@ e2d::Image::~Image()
|
||||||
SafeRelease(bitmap_);
|
SafeRelease(bitmap_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Image::Open(const Resource& res)
|
bool e2d::Image::Load(const Resource& res)
|
||||||
{
|
{
|
||||||
if (!Image::Load(res))
|
if (!Image::CacheBitmap(res))
|
||||||
{
|
{
|
||||||
WARN("Load Image from file failed!");
|
WARN("Load Image from file failed!");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -77,14 +77,14 @@ bool e2d::Image::Open(const Resource& res)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Image::Open(const String & file_name)
|
bool e2d::Image::Load(const String & file_name)
|
||||||
{
|
{
|
||||||
WARN_IF(file_name.IsEmpty(), "Image Open failed! Invalid file name.");
|
WARN_IF(file_name.IsEmpty(), "Image Load failed! Invalid file name.");
|
||||||
|
|
||||||
if (file_name.IsEmpty())
|
if (file_name.IsEmpty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (!Image::Load(file_name))
|
if (!Image::CacheBitmap(file_name))
|
||||||
{
|
{
|
||||||
WARN("Load Image from file failed!");
|
WARN("Load Image from file failed!");
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -182,7 +182,7 @@ ID2D1Bitmap * e2d::Image::GetBitmap() const
|
||||||
return bitmap_;
|
return bitmap_;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Image::Load(const Resource& res)
|
bool e2d::Image::CacheBitmap(const Resource& res)
|
||||||
{
|
{
|
||||||
if (bitmap_cache_.find(res.id) != bitmap_cache_.end())
|
if (bitmap_cache_.find(res.id) != bitmap_cache_.end())
|
||||||
{
|
{
|
||||||
|
|
@ -308,7 +308,7 @@ bool e2d::Image::Load(const Resource& res)
|
||||||
return SUCCEEDED(hr);
|
return SUCCEEDED(hr);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Image::Load(const String & file_name)
|
bool e2d::Image::CacheBitmap(const String & file_name)
|
||||||
{
|
{
|
||||||
size_t hash = file_name.GetHash();
|
size_t hash = file_name.GetHash();
|
||||||
if (bitmap_cache_.find(hash) != bitmap_cache_.end())
|
if (bitmap_cache_.find(hash) != bitmap_cache_.end())
|
||||||
|
|
@ -322,8 +322,9 @@ bool e2d::Image::Load(const String & file_name)
|
||||||
// 默认搜索路径,所以需要通过 File::GetPath 获取完整路径
|
// 默认搜索路径,所以需要通过 File::GetPath 获取完整路径
|
||||||
String image_file_path = image_file.GetPath();
|
String image_file_path = image_file.GetPath();
|
||||||
|
|
||||||
IWICImagingFactory *imaging_factory = Device::GetGraphics()->GetImagingFactory();
|
Graphics * graphics_device = Device::GetGraphics();
|
||||||
ID2D1HwndRenderTarget* render_target = Device::GetGraphics()->GetRenderTarget();
|
IWICImagingFactory *imaging_factory = graphics_device->GetImagingFactory();
|
||||||
|
ID2D1HwndRenderTarget* render_target = graphics_device->GetRenderTarget();
|
||||||
IWICBitmapDecoder *decoder = nullptr;
|
IWICBitmapDecoder *decoder = nullptr;
|
||||||
IWICBitmapFrameDecode *source = nullptr;
|
IWICBitmapFrameDecode *source = nullptr;
|
||||||
IWICStream *stream = nullptr;
|
IWICStream *stream = nullptr;
|
||||||
|
|
|
||||||
|
|
@ -29,32 +29,32 @@ e2d::Sprite::Sprite()
|
||||||
e2d::Sprite::Sprite(Image * image)
|
e2d::Sprite::Sprite(Image * image)
|
||||||
: image_(nullptr)
|
: image_(nullptr)
|
||||||
{
|
{
|
||||||
Open(image);
|
Load(image);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Sprite::Sprite(const Resource& res)
|
e2d::Sprite::Sprite(const Resource& res)
|
||||||
: image_(nullptr)
|
: image_(nullptr)
|
||||||
{
|
{
|
||||||
Open(res);
|
Load(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Sprite::Sprite(const Resource& res, const Rect& crop_rect)
|
e2d::Sprite::Sprite(const Resource& res, const Rect& crop_rect)
|
||||||
: image_(nullptr)
|
: image_(nullptr)
|
||||||
{
|
{
|
||||||
Open(res);
|
Load(res);
|
||||||
Crop(crop_rect);
|
Crop(crop_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Sprite::Sprite(const String & file_name)
|
e2d::Sprite::Sprite(const String & file_name)
|
||||||
: image_(nullptr)
|
: image_(nullptr)
|
||||||
{
|
{
|
||||||
Open(file_name);
|
Load(file_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Sprite::Sprite(const String & file_name, const Rect & crop_rect)
|
e2d::Sprite::Sprite(const String & file_name, const Rect & crop_rect)
|
||||||
: image_(nullptr)
|
: image_(nullptr)
|
||||||
{
|
{
|
||||||
Open(file_name);
|
Load(file_name);
|
||||||
Crop(crop_rect);
|
Crop(crop_rect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -63,7 +63,7 @@ e2d::Sprite::~Sprite()
|
||||||
SafeRelease(image_);
|
SafeRelease(image_);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Sprite::Open(Image * image)
|
bool e2d::Sprite::Load(Image * image)
|
||||||
{
|
{
|
||||||
if (image)
|
if (image)
|
||||||
{
|
{
|
||||||
|
|
@ -81,7 +81,7 @@ bool e2d::Sprite::Open(Image * image)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Sprite::Open(const Resource& res)
|
bool e2d::Sprite::Load(const Resource& res)
|
||||||
{
|
{
|
||||||
if (!image_)
|
if (!image_)
|
||||||
{
|
{
|
||||||
|
|
@ -89,7 +89,7 @@ bool e2d::Sprite::Open(const Resource& res)
|
||||||
image_->Retain();
|
image_->Retain();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image_->Open(res))
|
if (image_->Load(res))
|
||||||
{
|
{
|
||||||
Node::SetSize(image_->GetWidth(), image_->GetHeight());
|
Node::SetSize(image_->GetWidth(), image_->GetHeight());
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -97,7 +97,7 @@ bool e2d::Sprite::Open(const Resource& res)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Sprite::Open(const String & file_name)
|
bool e2d::Sprite::Load(const String & file_name)
|
||||||
{
|
{
|
||||||
if (!image_)
|
if (!image_)
|
||||||
{
|
{
|
||||||
|
|
@ -105,7 +105,7 @@ bool e2d::Sprite::Open(const String & file_name)
|
||||||
image_->Retain();
|
image_->Retain();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (image_->Open(file_name))
|
if (image_->Load(file_name))
|
||||||
{
|
{
|
||||||
Node::SetSize(image_->GetWidth(), image_->GetHeight());
|
Node::SetSize(image_->GetWidth(), image_->GetHeight());
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ e2d::Music::Music(const e2d::String & file_path)
|
||||||
, voice_(nullptr)
|
, voice_(nullptr)
|
||||||
, callback_()
|
, callback_()
|
||||||
{
|
{
|
||||||
this->Open(file_path);
|
this->Load(file_path);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Music::Music(const Resource& res)
|
e2d::Music::Music(const Resource& res)
|
||||||
|
|
@ -78,7 +78,7 @@ e2d::Music::Music(const Resource& res)
|
||||||
, voice_(nullptr)
|
, voice_(nullptr)
|
||||||
, callback_()
|
, callback_()
|
||||||
{
|
{
|
||||||
this->Open(res);
|
this->Load(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
e2d::Music::~Music()
|
e2d::Music::~Music()
|
||||||
|
|
@ -86,7 +86,7 @@ e2d::Music::~Music()
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Music::Open(const e2d::String & file_path)
|
bool e2d::Music::Load(const e2d::String & file_path)
|
||||||
{
|
{
|
||||||
if (opened_)
|
if (opened_)
|
||||||
{
|
{
|
||||||
|
|
@ -95,14 +95,14 @@ bool e2d::Music::Open(const e2d::String & file_path)
|
||||||
|
|
||||||
if (file_path.IsEmpty())
|
if (file_path.IsEmpty())
|
||||||
{
|
{
|
||||||
WARN("Music::Open error: Invalid file name.");
|
WARN("Music::Load error: Invalid file name.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
File music_file;
|
File music_file;
|
||||||
if (!music_file.Open(file_path))
|
if (!music_file.Open(file_path))
|
||||||
{
|
{
|
||||||
WARN("Music::Open error: File not found.");
|
WARN("Music::Load error: File not found.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -160,7 +160,7 @@ bool e2d::Music::Open(const e2d::String & file_path)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool e2d::Music::Open(const Resource& res)
|
bool e2d::Music::Load(const Resource& res)
|
||||||
{
|
{
|
||||||
if (opened_)
|
if (opened_)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,204 @@
|
||||||
|
#include "..\e2dtool.h"
|
||||||
|
|
||||||
|
|
||||||
|
std::map<size_t, e2d::Music*> e2d::Player::musics_;
|
||||||
|
|
||||||
|
e2d::Player::Player()
|
||||||
|
: volume_(1.f)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
e2d::Player::~Player()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::Player::Load(const String & file_path)
|
||||||
|
{
|
||||||
|
if (file_path.IsEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
Music * music = new (std::nothrow) Music();
|
||||||
|
|
||||||
|
if (music)
|
||||||
|
{
|
||||||
|
if (music->Load(file_path))
|
||||||
|
{
|
||||||
|
music->SetVolume(volume_);
|
||||||
|
musics_.insert(std::make_pair(file_path.GetHash(), music));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete music;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::Player::Play(const String & file_path, int loop_count)
|
||||||
|
{
|
||||||
|
if (file_path.IsEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (Load(file_path))
|
||||||
|
{
|
||||||
|
auto music = musics_[file_path.GetHash()];
|
||||||
|
if (music->Play(loop_count))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::Pause(const String & file_path)
|
||||||
|
{
|
||||||
|
if (file_path.IsEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
size_t hash = file_path.GetHash();
|
||||||
|
if (musics_.end() != musics_.find(hash))
|
||||||
|
musics_[hash]->Pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::Resume(const String & file_path)
|
||||||
|
{
|
||||||
|
if (file_path.IsEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
size_t hash = file_path.GetHash();
|
||||||
|
if (musics_.end() != musics_.find(hash))
|
||||||
|
musics_[hash]->Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::Stop(const String & file_path)
|
||||||
|
{
|
||||||
|
if (file_path.IsEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
size_t hash = file_path.GetHash();
|
||||||
|
if (musics_.end() != musics_.find(hash))
|
||||||
|
musics_[hash]->Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::Player::IsPlaying(const String & file_path)
|
||||||
|
{
|
||||||
|
if (file_path.IsEmpty())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
size_t hash = file_path.GetHash();
|
||||||
|
if (musics_.end() != musics_.find(hash))
|
||||||
|
return musics_[hash]->IsPlaying();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::Player::Load(const Resource& res)
|
||||||
|
{
|
||||||
|
if (musics_.end() != musics_.find(res.id))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
Music * music = new (std::nothrow) Music();
|
||||||
|
|
||||||
|
if (music)
|
||||||
|
{
|
||||||
|
if (music->Load(res))
|
||||||
|
{
|
||||||
|
music->SetVolume(volume_);
|
||||||
|
musics_.insert(std::make_pair(res.id, music));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
delete music;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::Player::Play(const Resource& res, int loop_count)
|
||||||
|
{
|
||||||
|
if (Load(res))
|
||||||
|
{
|
||||||
|
auto music = musics_[res.id];
|
||||||
|
if (music->Play(loop_count))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::Pause(const Resource& res)
|
||||||
|
{
|
||||||
|
if (musics_.end() != musics_.find(res.id))
|
||||||
|
musics_[res.id]->Pause();
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::Resume(const Resource& res)
|
||||||
|
{
|
||||||
|
if (musics_.end() != musics_.find(res.id))
|
||||||
|
musics_[res.id]->Resume();
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::Stop(const Resource& res)
|
||||||
|
{
|
||||||
|
if (musics_.end() != musics_.find(res.id))
|
||||||
|
musics_[res.id]->Stop();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool e2d::Player::IsPlaying(const Resource& res)
|
||||||
|
{
|
||||||
|
if (musics_.end() != musics_.find(res.id))
|
||||||
|
return musics_[res.id]->IsPlaying();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
float e2d::Player::GetVolume()
|
||||||
|
{
|
||||||
|
return volume_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::SetVolume(float volume)
|
||||||
|
{
|
||||||
|
volume_ = std::min(std::max(volume, -224.f), 224.f);
|
||||||
|
for (const auto& pair : musics_)
|
||||||
|
{
|
||||||
|
pair.second->SetVolume(volume_);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::PauseAll()
|
||||||
|
{
|
||||||
|
for (const auto& pair : musics_)
|
||||||
|
{
|
||||||
|
pair.second->Pause();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::ResumeAll()
|
||||||
|
{
|
||||||
|
for (const auto& pair : musics_)
|
||||||
|
{
|
||||||
|
pair.second->Resume();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::StopAll()
|
||||||
|
{
|
||||||
|
for (const auto& pair : musics_)
|
||||||
|
{
|
||||||
|
pair.second->Stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void e2d::Player::ClearCache()
|
||||||
|
{
|
||||||
|
if (musics_.empty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
for (const auto& pair : musics_)
|
||||||
|
{
|
||||||
|
delete pair.second;
|
||||||
|
}
|
||||||
|
musics_.clear();
|
||||||
|
}
|
||||||
|
|
@ -62,6 +62,7 @@
|
||||||
<ClCompile Include="..\..\core\tools\File.cpp" />
|
<ClCompile Include="..\..\core\tools\File.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Music.cpp" />
|
<ClCompile Include="..\..\core\tools\Music.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Path.cpp" />
|
<ClCompile Include="..\..\core\tools\Path.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\tools\Player.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Random.cpp" />
|
<ClCompile Include="..\..\core\tools\Random.cpp" />
|
||||||
<ClCompile Include="..\..\core\transitions\BoxTransition.cpp" />
|
<ClCompile Include="..\..\core\transitions\BoxTransition.cpp" />
|
||||||
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
|
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -162,6 +162,9 @@
|
||||||
<ClCompile Include="..\..\core\tools\Path.cpp">
|
<ClCompile Include="..\..\core\tools\Path.cpp">
|
||||||
<Filter>tools</Filter>
|
<Filter>tools</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\tools\Player.cpp">
|
||||||
|
<Filter>tools</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\tools\Random.cpp">
|
<ClCompile Include="..\..\core\tools\Random.cpp">
|
||||||
<Filter>tools</Filter>
|
<Filter>tools</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
||||||
|
|
@ -206,6 +206,7 @@
|
||||||
<ClCompile Include="..\..\core\tools\File.cpp" />
|
<ClCompile Include="..\..\core\tools\File.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Music.cpp" />
|
<ClCompile Include="..\..\core\tools\Music.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Path.cpp" />
|
<ClCompile Include="..\..\core\tools\Path.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\tools\Player.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Random.cpp" />
|
<ClCompile Include="..\..\core\tools\Random.cpp" />
|
||||||
<ClCompile Include="..\..\core\transitions\BoxTransition.cpp" />
|
<ClCompile Include="..\..\core\transitions\BoxTransition.cpp" />
|
||||||
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
|
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -162,6 +162,9 @@
|
||||||
<ClCompile Include="..\..\core\tools\Path.cpp">
|
<ClCompile Include="..\..\core\tools\Path.cpp">
|
||||||
<Filter>tools</Filter>
|
<Filter>tools</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\tools\Player.cpp">
|
||||||
|
<Filter>tools</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\tools\Random.cpp">
|
<ClCompile Include="..\..\core\tools\Random.cpp">
|
||||||
<Filter>tools</Filter>
|
<Filter>tools</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
||||||
|
|
@ -239,6 +239,7 @@
|
||||||
<ClCompile Include="..\..\core\tools\File.cpp" />
|
<ClCompile Include="..\..\core\tools\File.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Music.cpp" />
|
<ClCompile Include="..\..\core\tools\Music.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Path.cpp" />
|
<ClCompile Include="..\..\core\tools\Path.cpp" />
|
||||||
|
<ClCompile Include="..\..\core\tools\Player.cpp" />
|
||||||
<ClCompile Include="..\..\core\tools\Random.cpp" />
|
<ClCompile Include="..\..\core\tools\Random.cpp" />
|
||||||
<ClCompile Include="..\..\core\transitions\BoxTransition.cpp" />
|
<ClCompile Include="..\..\core\transitions\BoxTransition.cpp" />
|
||||||
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
|
<ClCompile Include="..\..\core\transitions\EmergeTransition.cpp" />
|
||||||
|
|
|
||||||
|
|
@ -162,6 +162,9 @@
|
||||||
<ClCompile Include="..\..\core\tools\Path.cpp">
|
<ClCompile Include="..\..\core\tools\Path.cpp">
|
||||||
<Filter>tools</Filter>
|
<Filter>tools</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\core\tools\Player.cpp">
|
||||||
|
<Filter>tools</Filter>
|
||||||
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\core\tools\Random.cpp">
|
<ClCompile Include="..\..\core\tools\Random.cpp">
|
||||||
<Filter>tools</Filter>
|
<Filter>tools</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue