update ResLoader
This commit is contained in:
parent
084fc4aff7
commit
5957e75924
|
|
@ -84,6 +84,11 @@ namespace easy2d
|
|||
return true;
|
||||
}
|
||||
|
||||
bool Image::IsValid() const
|
||||
{
|
||||
return !!bitmap_;
|
||||
}
|
||||
|
||||
void Image::Crop(Rect const& crop_rect)
|
||||
{
|
||||
if (bitmap_)
|
||||
|
|
|
|||
|
|
@ -51,6 +51,9 @@ namespace easy2d
|
|||
Resource const& res
|
||||
);
|
||||
|
||||
// 资源是否有效
|
||||
bool IsValid() const;
|
||||
|
||||
// 将图片裁剪为矩形
|
||||
void Crop(
|
||||
Rect const& crop_rect /* 裁剪矩形 */
|
||||
|
|
|
|||
|
|
@ -44,10 +44,21 @@ namespace easy2d
|
|||
bool ResLoader::AddImage(String const& id, Resource const& image)
|
||||
{
|
||||
ImagePtr ptr = new (std::nothrow) Image;
|
||||
if (ptr && ptr->Load(FindRes(image)))
|
||||
if (ptr)
|
||||
{
|
||||
res_.insert(std::make_pair(id, ptr));
|
||||
return true;
|
||||
if (image.IsFile())
|
||||
{
|
||||
String path = Search(image.GetFileName(), search_paths_);
|
||||
ptr->Load(path.c_str());
|
||||
}
|
||||
else
|
||||
ptr->Load(image);
|
||||
|
||||
if (ptr->IsValid())
|
||||
{
|
||||
res_.insert(std::make_pair(id, ptr));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -74,10 +85,21 @@ namespace easy2d
|
|||
for (const auto& image : images)
|
||||
{
|
||||
ImagePtr ptr = new (std::nothrow) Image;
|
||||
if (ptr && ptr->Load(FindRes(image)))
|
||||
if (ptr)
|
||||
{
|
||||
frames->Add(ptr);
|
||||
++total;
|
||||
if (image.IsFile())
|
||||
{
|
||||
String path = Search(image.GetFileName(), search_paths_);
|
||||
ptr->Load(path.c_str());
|
||||
}
|
||||
else
|
||||
ptr->Load(image);
|
||||
|
||||
if (ptr->IsValid())
|
||||
{
|
||||
frames->Add(ptr);
|
||||
++total;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -109,24 +131,59 @@ namespace easy2d
|
|||
return total;
|
||||
}
|
||||
|
||||
int ResLoader::AddFrames(String const& id, Array<std::pair<Resource, Rect>> const& images)
|
||||
int ResLoader::AddFrames(String const & id, Resource const & image, int cols, int rows)
|
||||
{
|
||||
if (images.empty())
|
||||
if (cols <= 0 || rows <= 0)
|
||||
return 0;
|
||||
|
||||
int total = 0;
|
||||
FramesPtr frames = new (std::nothrow) Frames;
|
||||
if (frames)
|
||||
{
|
||||
for (const auto& pair : images)
|
||||
ImagePtr raw = new (std::nothrow) Image;
|
||||
if (!raw || !raw->Load(image))
|
||||
return 0;
|
||||
|
||||
float raw_width = raw->GetSourceWidth();
|
||||
float raw_height = raw->GetSourceHeight();
|
||||
float width = raw_width / cols;
|
||||
float height = raw_height / rows;
|
||||
|
||||
for (int i = 0; i < rows; i++)
|
||||
{
|
||||
ImagePtr ptr = new (std::nothrow) Image;
|
||||
if (ptr && ptr->Load(FindRes(pair.first)))
|
||||
for (int j = 0; j < cols; j++)
|
||||
{
|
||||
if (!pair.second.IsEmpty())
|
||||
ImagePtr ptr = new (std::nothrow) Image(raw->GetBitmap());
|
||||
if (ptr)
|
||||
{
|
||||
ptr->Crop(pair.second);
|
||||
ptr->Crop(Rect{ i * width, j * height, width, height });
|
||||
frames->Add(ptr);
|
||||
++total;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (total)
|
||||
res_.insert(std::make_pair(id, frames));
|
||||
return total;
|
||||
}
|
||||
|
||||
int ResLoader::AddFrames(String const & id, Resource const & image, Array<Rect> const & crop_rects)
|
||||
{
|
||||
int total = 0;
|
||||
FramesPtr frames = new (std::nothrow) Frames;
|
||||
if (frames)
|
||||
{
|
||||
ImagePtr raw = new (std::nothrow) Image;
|
||||
if (!raw || !raw->Load(image))
|
||||
return 0;
|
||||
|
||||
for (const auto& rect : crop_rects)
|
||||
{
|
||||
ImagePtr ptr = new (std::nothrow) Image(raw->GetBitmap());
|
||||
if (ptr)
|
||||
{
|
||||
ptr->Crop(rect);
|
||||
frames->Add(ptr);
|
||||
++total;
|
||||
}
|
||||
|
|
@ -137,13 +194,35 @@ namespace easy2d
|
|||
return total;
|
||||
}
|
||||
|
||||
bool ResLoader::AddFrames(String const & id, FramesPtr const & frames)
|
||||
{
|
||||
if (frames)
|
||||
{
|
||||
res_.insert(std::make_pair(id, frames));
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool ResLoader::AddMusic(String const & id, Resource const & music)
|
||||
{
|
||||
MusicPtr ptr = new (std::nothrow) Music;
|
||||
if (ptr && ptr->Load(FindRes(music)))
|
||||
if (ptr)
|
||||
{
|
||||
res_.insert(std::make_pair(id, ptr));
|
||||
return true;
|
||||
bool valid = false;
|
||||
if (music.IsFile())
|
||||
{
|
||||
String path = Search(music.GetFileName(), search_paths_);
|
||||
valid = ptr->Load(path.c_str());
|
||||
}
|
||||
else
|
||||
valid = ptr->Load(music);
|
||||
|
||||
if (valid)
|
||||
{
|
||||
res_.insert(std::make_pair(id, ptr));
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -220,14 +299,4 @@ namespace easy2d
|
|||
}
|
||||
}
|
||||
|
||||
Resource ResLoader::FindRes(Resource const & res) const
|
||||
{
|
||||
if (res.IsFile())
|
||||
{
|
||||
String path = Search(res.GetFileName(), search_paths_);
|
||||
return Resource(path.c_str());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -27,20 +27,36 @@ namespace easy2d
|
|||
class ResLoader
|
||||
{
|
||||
public:
|
||||
// 添加图片
|
||||
bool AddImage(String const& id, Resource const& image);
|
||||
|
||||
// 添加图片
|
||||
bool AddImage(String const& id, ImagePtr const& image);
|
||||
|
||||
// 添加帧集合
|
||||
int AddFrames(String const& id, Array<Resource> const& images);
|
||||
|
||||
int AddFrames(String const& id, Array<Pair<Resource, Rect>> const& images);
|
||||
|
||||
// 添加帧集合
|
||||
int AddFrames(String const& id, Array<ImagePtr> const& images);
|
||||
|
||||
// 添加帧集合
|
||||
// 按行列数裁剪图片
|
||||
int AddFrames(String const& id, Resource const& image, int cols, int rows = 1);
|
||||
|
||||
// 添加帧集合
|
||||
// 按指定裁剪矩形裁剪图片
|
||||
int AddFrames(String const& id, Resource const& image, Array<Rect> const& crop_rects);
|
||||
|
||||
// 添加帧集合
|
||||
bool AddFrames(String const& id, FramesPtr const& frames);
|
||||
|
||||
// 添加音乐
|
||||
bool AddMusic(String const& id, Resource const& music);
|
||||
|
||||
// 添加音乐
|
||||
bool AddMusic(String const& id, MusicPtr const& music);
|
||||
|
||||
// 添加对象
|
||||
bool AddObj(String const& id, ObjectPtr const& obj);
|
||||
|
||||
ImagePtr GetImage(String const& id) const;
|
||||
|
|
@ -51,8 +67,10 @@ namespace easy2d
|
|||
|
||||
ObjectPtr GetObj(String const& id) const;
|
||||
|
||||
// 删除指定资源
|
||||
void Delete(String const& id);
|
||||
|
||||
// 销毁所有资源
|
||||
void Destroy();
|
||||
|
||||
// Ìí¼Ó×ÊÔ´ËÑË÷·¾¶
|
||||
|
|
@ -60,8 +78,6 @@ namespace easy2d
|
|||
String const& path
|
||||
);
|
||||
|
||||
Resource FindRes(Resource const& res) const;
|
||||
|
||||
template<typename T>
|
||||
auto Get(String const& id) const -> decltype(auto)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue