Salut AnonymHax,
Comme ça fait un peu de temps que j'ai pas touché à ça je te passe directement un morceau de fichier qui marche très bien, comme en témoigne le petit screen à la fin.
Bien sûr si tu veux plus de détails je pourrai t'en donner plus tard ;)
EDIT : pour une raison totalement inconnue ton post s'est affiché dans les nouveaux messages et j'ai donc cru qu'il était tout récent. My bad
Cliquez pour révéler
Cliquez pour masquer
Map::Map(BigEndianReader &reader)
{
int header = 0;
int dataLen = 0;
static const QByteArray decryptionKey("649ae451ca33ec53bbcbcc33becf15f4");
header = reader.readByte();
if(header != 77)
throw MalformedDataException("L'en-tête du fichier dlm est corrompue.");
_mapVersion = reader.readByte();
_id = reader.readUnsignedInt();
if(_mapVersion >= 7)
{
_encrypted = reader.readBoolean();
_encryptionVersion = reader.readByte();
dataLen = reader.readInt();
if(_encrypted)
{
QByteArray encryptedData = reader.readBytes(dataLen);
QByteArray decryptedData;
for(int i = 0; i < encryptedData.size(); i++)
decryptedData.append(encryptedData ^ decryptionKey[i % decryptionKey.size()]);
BigEndianReader decryptedReader(decryptedData);
reader = decryptedReader;
}
}
_relativeId = reader.readUnsignedInt();
_mapType = reader.readByte();
_subareaId = reader.readInt();
_topNeighbourId = reader.readInt();
_bottomNeighbourId = reader.readInt();
_leftNeighbourId = reader.readInt();
_rightNeighbourId = reader.readInt();
_shadowBonusOnEntities = reader.readInt();
//qDebug() << "mapVersion =" << _mapVersion;
qDebug() << "id =" << _id;
//qDebug() << "relativeId =" << _relativeId;
//qDebug() << "mapType =" << _mapType;
//qDebug() << "subareaId =" << _subareaId;
//qDebug() << "topNeighbourId =" << _topNeighbourId;
//qDebug() << "bottomNeighbourId =" << _bottomNeighbourId;
//qDebug() << "leftNeighbourId =" << _leftNeighbourId;
//qDebug() << "rightNeighbourId =" << _rightNeighbourId;
//qDebug() << "shadowBonusOnEntities =" << _shadowBonusOnEntities;
if(_mapVersion >= 3)
{
_backgroundRed = reader.readByte();
_backgroundGreen = reader.readByte();
_backgroundBlue = reader.readByte();
_backgroundColor = (_backgroundRed & 255) << 16 | (_backgroundGreen & 255) << 8 | (_backgroundBlue & 255);
//qDebug("backgroundColor = (%d, %d, %d) = %d", _backgroundRed, _backgroundGreen, _backgroundBlue, _backgroundColor);
}
if(_mapVersion >= 4)
{
_zoomScale = (float) reader.readUnsignedShort() / 100;
_zoomOffsetX = reader.readShort();
_zoomOffsetY = reader.readShort();
//qDebug() << "zoomScale =" << _zoomScale;
//qDebug() << "zoomOffsetX =" << _zoomOffsetX;
//qDebug() << "zoomOffsetY =" << _zoomOffsetY;
}
_useLowPassFilter = reader.readBoolean();
_useReverb = reader.readBoolean();
if(_useReverb) {
_presetId = reader.readInt();
}
else {
_presetId = -1;
}
//qDebug() << "useLowPassFilter =" << _useLowPassFilter;
//qDebug() << "useReverb =" << _useReverb;
//qDebug() << "presetId =" << _presetId;
int backgroundsCount = reader.readByte();
//qDebug() << "backgroundsCount =" << backgroundsCount;
for(int i = 0; i < backgroundsCount; i++) {
_backgroundFixtures.append(FixtureSP(new Fixture(reader)));
}
int foregroundsCount = reader.readByte();
//qDebug() << "foregroundsCount =" << foregroundsCount;
for(int i = 0; i < foregroundsCount; i++) {
_foregroundFixtures.append(FixtureSP(new Fixture(reader)));
}
reader.readInt();
_groundCRC = reader.readInt();
//qDebug() << "groundCRC =" << _groundCRC;
int layersCount = reader.readByte();
//qDebug() << "layersCount =" << layersCount;
for(int i = 0; i < layersCount; i++) {
_layers.append(LayerSP(new Layer(reader, _mapVersion)));
}
//qDebug() << "cellsCount (const) =" << MAP_CELLS_COUNT;
for(uint i = 0; i < MAP_CELLS_COUNT; i++) {
_cells.append(CellDataSP(new CellData(i, reader, _mapVersion)));
}
//qDebug("Map parsing done!");
//qDebug() << "╠═ have errors:" << reader.hasError();
//qDebug("╠═ bytes remaining: %d", reader.bytesAvailable());
//qDebug() << "╚═ TOTAL bytes:" << reader.data().size();
}