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