#pragma once #include #include "libNPK.h" struct LuaNPKFileItemBaseInfo : public NPK::FileItemBaseInfo { const char* c_keyName() const { return keyName.c_str(); } }; struct LuaNPKFileItemFullInfo : public NPK::FileItemFullInfo { const char* c_npkName() const { return npkName.c_str(); } const char* c_npkBase() const { return npkBase.c_str(); } const char* c_keyName() const { return keyName.c_str(); } }; class LuaNPKFileStream { public: const char* name(void) const; uint32_t size(void) const; uint32_t read(void* buffer, uint32_t size); bool seek(uint32_t offset); uint32_t tell(void) const; uint32_t crc32(void); bool isEOF(void) const; //write total file content to local disk file, wszFileName(utf8) bool writeToDiskFile(const char* wszFileName); public: NPK::IFileStream* m_pFileStream = nullptr; }; class LuaNPKFileList { public: static LuaNPKFileList* createEmpty(); static void destroy(LuaNPKFileList* instance); public: int32_t getFileCounts(void) const; LuaNPKFileItemFullInfo getFileItem(int32_t index) const; public: NPK::IFileList* m_pFileList = nullptr; }; class LuaNPKFile { public: static LuaNPKFile* create(); static void destroy(LuaNPKFile* instance); public: bool openPakFile(const char* szPackFileName); bool closePakFile(void); int32_t getFileCounts(void) const; LuaNPKFileList* generateFullInfoList(); LuaNPKFileItemBaseInfo getFileNode(int32_t index) const; LuaNPKFileStream* openFileStream(const char* szFileName); void closeFileStream(LuaNPKFileStream* fileStream); public: NPK::INPKFile* m_pNPKFile = nullptr; public: LuaNPKFile(); ~LuaNPKFile(); }; void registerNPKLuaLibs(struct lua_State* L);