增加Lua导出和FileList

This commit is contained in:
2025-09-02 20:39:30 +08:00
parent 1fb319f0e8
commit 6788128cc3
18 changed files with 682 additions and 56 deletions
+197
View File
@@ -0,0 +1,197 @@
#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 LuaNPKFile::registerLuaApi(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::class_add<LuaNPKFile>(L, "NPKFile");
lua_tinker::class_def<LuaNPKFile>(L, "openPakFile", &LuaNPKFile::openPakFile);
lua_tinker::class_def<LuaNPKFile>(L, "closePakFile", &LuaNPKFile::closePakFile);
lua_tinker::class_def<LuaNPKFile>(L, "getFileCounts", &LuaNPKFile::getFileCounts);
lua_tinker::class_def<LuaNPKFile>(L, "getFileNode", &LuaNPKFile::getFileNode);
lua_tinker::class_def<LuaNPKFile>(L, "openFileStream", &LuaNPKFile::openFileStream);
lua_tinker::class_def<LuaNPKFile>(L, "closeFileStream", &LuaNPKFile::closeFileStream);
lua_tinker::class_def<LuaNPKFile>(L, "generateFullInfoList", &LuaNPKFile::generateFullInfoList);
lua_tinker::class_add<LuaNPKFileItemBaseInfo>(L, "NPKFileItemBaseInfo");
lua_tinker::class_def<LuaNPKFileItemBaseInfo>(L, "keyName", &LuaNPKFileItemBaseInfo::c_keyName);
lua_tinker::class_mem<LuaNPKFileItemBaseInfo>(L, "fileOffset", &LuaNPKFileItemBaseInfo::fileOffset);
lua_tinker::class_mem<LuaNPKFileItemBaseInfo>(L, "fileSize", &LuaNPKFileItemBaseInfo::fileSize);
lua_tinker::class_add<LuaNPKFileItemFullInfo>(L, "LuaNPKFileItemFullInfo");
lua_tinker::class_def<LuaNPKFileItemFullInfo>(L, "npkName", &LuaNPKFileItemFullInfo::c_npkName);
lua_tinker::class_def<LuaNPKFileItemFullInfo>(L, "npkBase", &LuaNPKFileItemFullInfo::c_npkBase);
lua_tinker::class_def<LuaNPKFileItemFullInfo>(L, "keyName", &LuaNPKFileItemFullInfo::c_keyName);
lua_tinker::class_mem<LuaNPKFileItemFullInfo>(L, "fileOffset", &LuaNPKFileItemFullInfo::fileOffset);
lua_tinker::class_mem<LuaNPKFileItemFullInfo>(L, "fileSize", &LuaNPKFileItemFullInfo::fileSize);
lua_tinker::class_mem<LuaNPKFileItemFullInfo>(L, "fileCRC", &LuaNPKFileItemFullInfo::fileCRC);
lua_tinker::class_add<LuaNPKFileList>(L, "LuaNPKFileList");
lua_tinker::class_def<LuaNPKFileList>(L, "getFileCounts", &LuaNPKFileList::getFileCounts);
lua_tinker::class_def<LuaNPKFileList>(L, "getFileItem", &LuaNPKFileList::getFileItem);
lua_tinker::class_add<LuaNPKFileStream>(L, "NPKFileStream");
lua_tinker::class_def<LuaNPKFileStream>(L, "name", &LuaNPKFileStream::name);
lua_tinker::class_def<LuaNPKFileStream>(L, "size", &LuaNPKFileStream::size);
lua_tinker::class_def<LuaNPKFileStream>(L, "read", &LuaNPKFileStream::read);
lua_tinker::class_def<LuaNPKFileStream>(L, "seek", &LuaNPKFileStream::seek);
lua_tinker::class_def<LuaNPKFileStream>(L, "tell", &LuaNPKFileStream::tell);
lua_tinker::class_def<LuaNPKFileStream>(L, "crc32", &LuaNPKFileStream::crc32);
lua_tinker::class_def<LuaNPKFileStream>(L, "isEOF", &LuaNPKFileStream::isEOF);
}
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;
}
/// /////////////////////////////////////////////////////////////////////////////////
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;
}