#include "sgu_lua_npk_file.h" #include "libNPK_Utils.h" extern "C" { #include "lua.h" #include "lualib.h" #include "lauxlib.h" }; #include "lua_tinker.h" //////////////////////////////////////////////////////////////////////////////////// void registerNPKLuaLibs(lua_State* L) { lua_tinker::def(L, "createNPKFile", &LuaNPKFile::create); lua_tinker::def(L, "destroyNPKFile", &LuaNPKFile::destroy); lua_tinker::def(L, "createEmptyFileList", &LuaNPKFileList::createEmpty); lua_tinker::def(L, "destroyFileList", &LuaNPKFileList::destroy); lua_tinker::def(L, "getLastErrorMessage", &NPK::getLastErrorMessage); lua_tinker::class_add(L, "NPKFile"); lua_tinker::class_def(L, "openPakFile", &LuaNPKFile::openPakFile); lua_tinker::class_def(L, "closePakFile", &LuaNPKFile::closePakFile); lua_tinker::class_def(L, "getFileCounts", &LuaNPKFile::getFileCounts); lua_tinker::class_def(L, "getFileNode", &LuaNPKFile::getFileNode); lua_tinker::class_def(L, "openFileStream", &LuaNPKFile::openFileStream); lua_tinker::class_def(L, "closeFileStream", &LuaNPKFile::closeFileStream); lua_tinker::class_def(L, "generateFullInfoList", &LuaNPKFile::generateFullInfoList); lua_tinker::class_add(L, "NPKFileItemBaseInfo"); lua_tinker::class_def(L, "keyName", &LuaNPKFileItemBaseInfo::c_keyName); lua_tinker::class_mem(L, "fileOffset", &LuaNPKFileItemBaseInfo::fileOffset); lua_tinker::class_mem(L, "fileSize", &LuaNPKFileItemBaseInfo::fileSize); lua_tinker::class_add(L, "LuaNPKFileItemFullInfo"); lua_tinker::class_def(L, "npkName", &LuaNPKFileItemFullInfo::c_npkName); lua_tinker::class_def(L, "npkBase", &LuaNPKFileItemFullInfo::c_npkBase); lua_tinker::class_def(L, "keyName", &LuaNPKFileItemFullInfo::c_keyName); lua_tinker::class_mem(L, "fileOffset", &LuaNPKFileItemFullInfo::fileOffset); lua_tinker::class_mem(L, "fileSize", &LuaNPKFileItemFullInfo::fileSize); lua_tinker::class_mem(L, "fileCRC", &LuaNPKFileItemFullInfo::fileCRC); lua_tinker::class_add(L, "LuaNPKFileList"); lua_tinker::class_def(L, "getFileCounts", &LuaNPKFileList::getFileCounts); lua_tinker::class_def(L, "getFileItem", &LuaNPKFileList::getFileItem); lua_tinker::class_add(L, "NPKFileStream"); lua_tinker::class_def(L, "name", &LuaNPKFileStream::name); lua_tinker::class_def(L, "size", &LuaNPKFileStream::size); lua_tinker::class_def(L, "read", &LuaNPKFileStream::read); lua_tinker::class_def(L, "seek", &LuaNPKFileStream::seek); lua_tinker::class_def(L, "tell", &LuaNPKFileStream::tell); lua_tinker::class_def(L, "crc32", &LuaNPKFileStream::crc32); lua_tinker::class_def(L, "isEOF", &LuaNPKFileStream::isEOF); lua_tinker::class_def(L, "writeToDiskFile", &LuaNPKFileStream::writeToDiskFile); } LuaNPKFile* LuaNPKFile::create() { return new LuaNPKFile(); } void LuaNPKFile::destroy(LuaNPKFile* instance) { delete instance; } LuaNPKFile::LuaNPKFile() { m_pNPKFile = NPK::createNPKFile(); } LuaNPKFile::~LuaNPKFile() { closeNPKFile(m_pNPKFile); m_pNPKFile = nullptr; } bool LuaNPKFile::openPakFile(const char* szPackFileName) { std::wstring strFullName = convertUtf8StringToWide(szPackFileName); return m_pNPKFile && m_pNPKFile->openPakFile(strFullName.c_str()); } bool LuaNPKFile::closePakFile(void) { return m_pNPKFile && m_pNPKFile->closePakFile(); } int32_t LuaNPKFile::getFileCounts(void) const { return m_pNPKFile ? m_pNPKFile->getFileCounts() : 0; } LuaNPKFileItemBaseInfo LuaNPKFile::getFileNode(int32_t index) const { LuaNPKFileItemBaseInfo baseInfo; m_pNPKFile->getFileItemBaseInfo(index, &baseInfo); return baseInfo; } LuaNPKFileList* LuaNPKFile::generateFullInfoList() { LuaNPKFileList* fileList = new LuaNPKFileList(); fileList->m_pFileList = m_pNPKFile->generateFullInfoList(); return fileList; } LuaNPKFileStream* LuaNPKFile::openFileStream(const char* szFileName) { if(m_pNPKFile) { LuaNPKFileStream* fileStream = new LuaNPKFileStream(); fileStream->m_pFileStream = m_pNPKFile->openFileStream(szFileName); if (fileStream->m_pFileStream) { return fileStream; } delete fileStream; } return nullptr; } void LuaNPKFile::closeFileStream(LuaNPKFileStream* fileStream) { if (m_pNPKFile && fileStream) { m_pNPKFile->closeFileStream(fileStream->m_pFileStream); fileStream->m_pFileStream = nullptr; } delete fileStream; } //////////////////////////////////////////////////////////////////////////////////// const char* LuaNPKFileStream::name(void) const { return m_pFileStream ? m_pFileStream->name() : nullptr; } uint32_t LuaNPKFileStream::size(void) const { return m_pFileStream ? m_pFileStream->size() : 0; } uint32_t LuaNPKFileStream::read(void* buffer, uint32_t size) { return m_pFileStream ? m_pFileStream->read(buffer, size) : 0; } bool LuaNPKFileStream::seek(uint32_t offset) { return m_pFileStream ? m_pFileStream->seek(offset) : false; } uint32_t LuaNPKFileStream::tell(void) const { return m_pFileStream ? m_pFileStream->tell() : 0; } uint32_t LuaNPKFileStream::crc32(void) { return m_pFileStream ? m_pFileStream->crc32() : 0; } bool LuaNPKFileStream::isEOF(void) const { return m_pFileStream ? m_pFileStream->isEOF() : true; } bool LuaNPKFileStream::writeToDiskFile(const char* wszFileName) { std::wstring wstrLocalDiskFile = convertUtf8StringToWide(wszFileName); return m_pFileStream ? m_pFileStream->writeToDiskFile(wstrLocalDiskFile.c_str()) : false; } /// ///////////////////////////////////////////////////////////////////////////////// LuaNPKFileList* LuaNPKFileList::createEmpty() { LuaNPKFileList* pNewLuaFileList = new LuaNPKFileList(); pNewLuaFileList->m_pFileList = NPK::createEmptyFileList(); return pNewLuaFileList; } void LuaNPKFileList::destroy(LuaNPKFileList* instance) { NPK::destoryFileList(instance->m_pFileList); delete instance; } int32_t LuaNPKFileList::getFileCounts(void) const { return m_pFileList ? m_pFileList->getFileCounts() : 0; } LuaNPKFileItemFullInfo LuaNPKFileList::getFileItem(int32_t index) const { LuaNPKFileItemFullInfo fullInfo; if (m_pFileList) { m_pFileList->getFileItem(index, &fullInfo); } return fullInfo; }