#include "xassetlist.h" #include "qdebug.h" #include "qfiledevice.h" XAssetList::XAssetList() : XAsset() , mStringList() , mAssetCount() , mAssets() , mAssetHeaders() , mZoneFile(nullptr) { SetType(ASSET_TYPE_ASSETLIST); SetName("Asset List"); } XAssetList::XAssetList(ZoneFile* aZoneFile) : XAsset() , mStringList() , mAssetCount() , mAssets() , mAssetHeaders() , mZoneFile(aZoneFile) { SetType(ASSET_TYPE_ASSETLIST); SetName("Asset List"); } XAssetList::~XAssetList() { } void XAssetList::ParseData(XDataStream *aStream) { // Parse string list if (IsDebug()) { qDebug() << QString("[%1] Parsing data for %2").arg(aStream->device()->pos(), 10, 10, QChar('0')).arg(GetName()); } mStringList.ParsePtr(aStream, false); // Parse asset count and assets mAssetCount = aStream->ParseUInt32(QString("%1 asset count").arg(GetName())); qint32 assetsPtr = aStream->ParseInt32(QString("%1 assets ptr").arg(GetName())); mStringList.ParseData(aStream); if (assetsPtr) { for (quint32 i = 0; i < mAssetCount; i++) { XAssetHeader assetHeader(mZoneFile); assetHeader.ParseData(aStream); mAssetHeaders.append(assetHeader); } for (int i = 0; i < mAssetHeaders.size(); i++) { if (aStream->device()->pos() > 98000) { qDebug() << "test"; } XAssetHeader assetHeader = mAssetHeaders[i]; XAsset* asset = XAsset::Create(assetHeader.GetAssetType()); if (asset) { asset->SetPtr(assetHeader.GetAssetPtr()); asset->ParseData(aStream); mAssets.append(asset); } } } } void XAssetList::Clear() { } XScriptStringList XAssetList::GetStringList() const { return mStringList; } void XAssetList::SetStringList(const XScriptStringList& stringList) { mStringList = stringList; } QVector XAssetList::GetAssets() const { return mAssets; } XAsset *XAssetList::GetAsset(size_t aIndex) const { return mAssets[aIndex]; } QVector XAssetList::GetAssetsByType(XAssetType aAssetType) const { QVector foundAssets; for (int i = 0; i < mAssets.size(); i++) { XAsset* asset = mAssets[i]; if (asset->GetType() == aAssetType) { foundAssets.append(asset); } } return foundAssets; } void XAssetList::SetAssets(QVector assets) { mAssets = assets; } void XAssetList::AddAsset(XAsset *aAsset) { mAssets.append(aAsset); } size_t XAssetList::Size() const { return mAssets.size(); }