XPlor/libs/xassets/xscriptstringlist.cpp

78 lines
2.0 KiB
C++
Raw Normal View History

2025-09-03 13:22:24 -04:00
#include "xscriptstringlist.h"
#include "xstring.h"
XScriptStringList::XScriptStringList()
: XAsset()
, mCount(0)
, mStringPtrs()
, mScriptStrings()
{
2025-09-07 12:36:08 -04:00
SetName("Script String List");
2025-09-03 13:22:24 -04:00
}
int XScriptStringList::Size()
{
return mScriptStrings.size();
}
void XScriptStringList::Clear()
{
mCount = 0;
mStringPtrs.clear();
mScriptStrings.clear();
}
void XScriptStringList::ParseData(QDataStream *aStream)
{
2025-09-05 18:35:17 -04:00
if (GetPtr() == -1)
2025-09-03 13:22:24 -04:00
{
2025-09-07 12:36:08 -04:00
if (IsDebug())
{
qDebug() << QString("[%1] Parsing data for %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(GetName());
}
2025-09-03 13:22:24 -04:00
for (int i = 0; i < mCount; i++)
{
qint32 tempStringPtr;
*aStream >> tempStringPtr;
if (tempStringPtr == -1)
{
2025-09-07 12:36:08 -04:00
const QString newScriptString = XString::ParseCustom(aStream);
mScriptStrings << newScriptString;
if (IsDebug())
{
qDebug() << QString("[%1] newScriptString = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(newScriptString);
}
2025-09-03 13:22:24 -04:00
}
}
}
}
void XScriptStringList::ParsePtr(QDataStream *aStream, bool aDataFlag)
{
qint32 stringsPtr;
*aStream
>> mCount
>> stringsPtr;
2025-09-07 12:36:08 -04:00
if (mDebug)
{
// Always treat as unsigned when displaying in hex
quint64 raw = static_cast<quint64>(static_cast<quint32>(GetPtr()));
QString hexPtr = QString("0x%1")
.arg(raw, 8, 16, QLatin1Char('0'))
.toUpper();
qDebug() << QString("[%1] Parsed %2 ptr %3 (%4)").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(GetName()).arg(stringsPtr).arg(hexPtr);
qDebug() << QString("[%1] mCount = %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(mCount);
}
2025-09-03 13:22:24 -04:00
SetPtr(stringsPtr);
2025-09-05 18:35:17 -04:00
if (aDataFlag)
{
ParseData(aStream);
}
2025-09-03 13:22:24 -04:00
}