XPlor/libs/xassets/xassetlist.cpp

126 lines
2.7 KiB
C++
Raw Normal View History

2025-08-17 13:14:17 -04:00
#include "xassetlist.h"
2025-09-05 18:35:17 -04:00
#include "qdebug.h"
#include "qfiledevice.h"
2025-08-17 13:14:17 -04:00
XAssetList::XAssetList()
: XAsset()
, mStringList()
2025-09-05 18:35:17 -04:00
, mAssetCount()
, mAssets()
2025-09-05 18:35:17 -04:00
, mAssetHeaders()
, mZoneFile(nullptr)
{
2025-09-10 21:56:32 -04:00
SetType(ASSET_TYPE_ASSETLIST);
SetName("Asset List");
2025-08-17 13:14:17 -04:00
}
2025-09-05 18:35:17 -04:00
XAssetList::XAssetList(ZoneFile* aZoneFile)
: XAsset()
, mStringList()
, mAssetCount()
, mAssets()
, mAssetHeaders()
, mZoneFile(aZoneFile)
{
2025-09-07 12:36:08 -04:00
SetType(ASSET_TYPE_ASSETLIST);
SetName("Asset List");
2025-09-05 18:35:17 -04:00
}
XAssetList::~XAssetList()
{
}
2025-09-10 21:56:32 -04:00
void XAssetList::ParseData(XDataStream *aStream) {
2025-09-05 18:35:17 -04:00
// Parse string list
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-10 21:56:32 -04:00
mStringList.ParsePtr(aStream, false);
2025-09-05 18:35:17 -04:00
// Parse asset count and assets
2025-09-10 21:56:32 -04:00
mAssetCount = aStream->ParseUInt32(QString("%1 asset count").arg(GetName()));
qint32 assetsPtr = aStream->ParseInt32(QString("%1 assets ptr").arg(GetName()));
2025-08-17 13:14:17 -04:00
2025-09-05 18:35:17 -04:00
mStringList.ParseData(aStream);
if (assetsPtr)
{
2025-09-10 21:56:32 -04:00
for (quint32 i = 0; i < mAssetCount; i++)
2025-09-05 18:35:17 -04:00
{
XAssetHeader assetHeader(mZoneFile);
assetHeader.ParseData(aStream);
mAssetHeaders.append(assetHeader);
}
2025-09-05 18:35:17 -04:00
for (int i = 0; i < mAssetHeaders.size(); i++)
{
2025-09-10 21:56:32 -04:00
if (aStream->device()->pos() > 98000)
{
qDebug() << "test";
}
2025-09-05 18:35:17 -04:00
XAssetHeader assetHeader = mAssetHeaders[i];
XAsset* asset = XAsset::Create(assetHeader.GetAssetType());
2025-09-10 21:56:32 -04:00
if (asset)
{
asset->SetPtr(assetHeader.GetAssetPtr());
asset->ParseData(aStream);
2025-09-10 21:56:32 -04:00
mAssets.append(asset);
}
2025-08-17 13:14:17 -04:00
}
}
}
2025-09-05 18:35:17 -04:00
void XAssetList::Clear()
{
}
XScriptStringList XAssetList::GetStringList() const {
2025-08-17 13:14:17 -04:00
return mStringList;
}
void XAssetList::SetStringList(const XScriptStringList& stringList) {
2025-08-17 13:14:17 -04:00
mStringList = stringList;
}
2025-09-05 18:35:17 -04:00
QVector<XAsset*> XAssetList::GetAssets() const {
return mAssets;
2025-08-17 13:14:17 -04:00
}
2025-09-05 18:35:17 -04:00
XAsset *XAssetList::GetAsset(size_t aIndex) const
{
return mAssets[aIndex];
2025-08-17 13:14:17 -04:00
}
2025-09-05 18:35:17 -04:00
QVector<XAsset*> XAssetList::GetAssetsByType(XAssetType aAssetType) const
{
QVector<XAsset *> foundAssets;
for (int i = 0; i < mAssets.size(); i++)
{
XAsset* asset = mAssets[i];
if (asset->GetType() == aAssetType)
{
foundAssets.append(asset);
}
}
return foundAssets;
2025-08-17 13:14:17 -04:00
}
void XAssetList::SetAssets(QVector<XAsset *> assets) {
2025-08-17 13:14:17 -04:00
mAssets = assets;
}
2025-09-05 18:35:17 -04:00
void XAssetList::AddAsset(XAsset *aAsset)
{
mAssets.append(aAsset);
}
2025-08-17 13:14:17 -04:00
2025-09-05 18:35:17 -04:00
size_t XAssetList::Size() const
{
return mAssets.size();
}