XPlor/libs/xassets/xspeakermap.cpp

120 lines
2.3 KiB
C++
Raw Normal View History

2025-08-17 13:14:17 -04:00
#include "xspeakermap.h"
XSpeakerMap::XSpeakerMap()
: XAsset()
, mIsDefault(false)
, mName(new XString())
, mChannelMaps(QVector<QVector<XAudioChannelMap*>>())
{
for (int i = 0; i < MAP_DIM; i++)
{
for (int j = 0; j < MAP_DIM; j++)
{
mChannelMaps[i][j] = nullptr;
}
}
}
XSpeakerMap::~XSpeakerMap()
{
for (int i = 0; i < mChannelMaps.size(); i++)
{
for (int j = 0; j < mChannelMaps[i].size(); j++)
{
delete mChannelMaps[i][j];
}
}
delete mName;
}
QVector<QVector<XAudioChannelMap*>> XSpeakerMap::ChannelArrayToMap(const QVector<XAudioChannelMap*> aChannelArray)
{
QVector<QVector<XAudioChannelMap*>> channelMap(MAP_DIM, QVector<XAudioChannelMap*>(MAP_DIM));
for (int i = 0; i < MAP_DIM; i++)
{
for (int j = 0; j < MAP_DIM; j++)
{
channelMap[i][j] = aChannelArray[i * MAP_DIM + j];
}
}
return channelMap;
}
void XSpeakerMap::SetIsDefault(bool aIsDefault)
{
mIsDefault = aIsDefault;
}
bool XSpeakerMap::IsDefault() const
{
return mIsDefault;
}
void XSpeakerMap::SetName(XString *aName)
{
mName = aName;
}
XString *XSpeakerMap::GetName()
{
return mName;
}
XAudioChannelMap *XSpeakerMap::GetChannelMapEntry(int aRow, int aCol)
{
return mChannelMaps[aRow][aCol];
}
QVector<XAudioChannelMap*> XSpeakerMap::ParseChannelArray(QDataStream *aStream, int aCount)
{
for (int i = 0; i < aCount; i++)
{
XAudioChannelMap* newChannelMap = new XAudioChannelMap();
newChannelMap->ParseData(aStream);
}
}
void XSpeakerMap::ParseData(QDataStream *aStream)
{
*aStream >> mIsDefault;
// Skip padding bytes in struct
aStream->skipRawData(3);
mName->ParsePtr(aStream, false);
auto channelArray = ParseChannelArray(aStream, MAP_DIM);
for (int i = 0; i < 2; i++)
{
for (int j = 0; j < 2; j++)
{
XAudioChannelMap* newChannelMap = new XAudioChannelMap();
mChannelMaps[i][j] = newChannelMap;
}
}
mName->ParseData(aStream);
}
void XSpeakerMap::Clear()
{
mIsDefault = 0;
mName->Clear();
for (int i = 0; i < mChannelMaps.size(); i++)
{
for (int j = 0; j < mChannelMaps[i].size(); j++)
{
delete mChannelMaps[i][j];
}
}
mChannelMaps.clear();
}