206 lines
6.5 KiB
C++
206 lines
6.5 KiB
C++
#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<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);
|
|
lua_tinker::class_def<LuaNPKFileStream>(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;
|
|
}
|