SwitchGame/source/EngineCore/Asset_ImagePack.h

89 lines
2.0 KiB
C++

#pragma once
#include <switch.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
#include <SDL.h>
#include <map>
#include "Tool/Ifstream_NPK.h"
#include <zlib.h>
class Asset_ImagePack
{
public:
struct NpkInfo
{
int Offset;
int Length;
std::string Path;
};
// PNG结构体
struct ImgInfo
{
// 图片格式
int Type;
// 压缩类型
int CmpType;
// 宽度
int Width;
// 高度
int Height;
// 大小
int Size;
// Xpos
int Xpos;
// Ypos
int Ypos;
// Xpos
int XposEx = 0;
// Ypos
int YposEx = 0;
// 帧域X
int FrameXpos;
// 帧域Y
int FrameYpos;
// 偏移
int Offset;
// Png位图数据
BYTE *PNGdata;
};
struct IMG // npk的img的结构体
{
std::string lpImgName; // img文件的路径
int img_index; // img文件在npk文件里的序号
unsigned imgOffset;
unsigned imgSize;
std::string lpBelongsFile; // 这个img属于哪个npk文件
int png_sum; // 这个img文件有多少个 图片
ImgInfo *lp_lplist; // 图片的数组..
Uint32 UseTime = 0;
};
public:
Asset_ImagePack(const Asset_ImagePack &) = delete;
Asset_ImagePack &operator=(const Asset_ImagePack &) = delete;
Asset_ImagePack(Asset_ImagePack &&) = delete;
Asset_ImagePack &operator=(Asset_ImagePack &&) = delete;
// 全局访问点
static Asset_ImagePack &GetInstance()
{
static Asset_ImagePack instance; // 局部静态变量,保证只初始化一次
return instance;
}
public:
void Init();
void ParseColor(BYTE *Tab, int Type, BYTE *SaveByte, int Offset);
void LoadImgToMem(IMG *p);
IMG *GetIMG(std::string imgName);
private:
Asset_ImagePack(/* args */);
~Asset_ImagePack();
std::map<std::string, IMG> map_npk;
};