XPlor/libs/zonefile/zonefile.cpp

458 lines
17 KiB
C++

#include "zonefile.h"
#include "utils.h"
#include "logmanager.h"
#include <QFile>
#include <QDataStream>
#include <QDebug>
ZoneFile::ZoneFile() :
mStem(),
mSize(),
mTagCount(),
mTags(),
mRecordCount(),
mRecords(),
mAssetMap() {
}
ZoneFile::~ZoneFile() {
}
ZoneFile::ZoneFile(const ZoneFile &aZoneFile) {
mStem = aZoneFile.mStem;
mSize = aZoneFile.mSize;
mTagCount = aZoneFile.mTagCount;
mTags = aZoneFile.mTags;
mRecordCount = aZoneFile.mRecordCount;
mRecords = aZoneFile.mRecords;
mAssetMap = aZoneFile.mAssetMap;
}
ZoneFile &ZoneFile::operator=(const ZoneFile &other) {
if (this != &other) {
mStem = other.mStem;
mSize = other.mSize;
mTagCount = other.mTagCount;
mTags = other.mTags;
mRecordCount = other.mRecordCount;
mRecords = other.mRecords;
mAssetMap = other.mAssetMap;
}
return *this;
}
QString ZoneFile::AssetEnumToStr(const AssetType aAssetType)
{
if (aAssetType == ASSET_LOCAL_STRING) {
return "LOCAL_STRING";
} else if (aAssetType == ASSET_RAW_FILE) {
return "RAW_FILE";
} else if (aAssetType == ASSET_SCRIPT_PARSE_TREE) {
return "GSC_FILE";
} else if (aAssetType == ASSET_EFFECT) {
return "EFFECT";
} else if (aAssetType == ASSET_SOUND) {
return "SOUND";
} else if (aAssetType == ASSET_ANIMATION) {
return "ANIMATION";
} else if (aAssetType == ASSET_COLLISION_MAP) {
return "COLLISION_MAP";
} else if (aAssetType == ASSET_STRING_TABLE) {
return "STRING_TABLE";
} else if (aAssetType == ASSET_MENU) {
return "MENU";
} else if (aAssetType == ASSET_TECH_SET) {
return "TECH_SET";
} else if (aAssetType == ASSET_WEAPON) {
return "WEAPON";
} else if (aAssetType == ASSET_GFX_MAP) {
return "GFX_MAP";
} else if (aAssetType == ASSET_LIGHT_DEF) {
return "LIGHT_DEF";
} else if (aAssetType == ASSET_FONT) {
return "FONT";
} else if (aAssetType == ASSET_MODEL) {
return "MODEL";
} else if (aAssetType == ASSET_D3DBSP) {
return "D3DBSP";
} else if (aAssetType == ASSET_IMAGE) {
return "IMAGE";
} else if (aAssetType == ASSET_GAME_MAP_SP) {
return "GAME_MAP_SP";
} else if (aAssetType == ASSET_COL_MAP_SP) {
return "COL_MAP_SP";
} else if (aAssetType == ASSET_COL_MAP_SP) {
return "COL_MAP_SP";
} else if (aAssetType == ASSET_UI_MAP) {
return "UI_MAP";
} else if (aAssetType == ASSET_DESTRUCTIBLE) {
return "DESTRUCTIBLE";
} else if (aAssetType == ASSET_MATERIAL) {
return "MATERIAL";
} else if (aAssetType == ASSET_PHYS_PRESET) {
return "PHYS_PRESET";
} else if (aAssetType == ASSET_COMPUTE_SHADER_SET) {
return "COMPUTE_SHADER_SET";
} else if (aAssetType == ASSET_STRUCTURED_TABLE) {
return "STRUCTURED_TABLE";
} else if (aAssetType == ASSET_LEADERBOARD_DEF) {
return "LEADERBOARD_DEF";
} else if (aAssetType == ASSET_DDL) {
return "DDL";
} else if (aAssetType == ASSET_SCRIPT_PARSE_TREE) {
return "SCRIPT_PARSE_TREE";
} else if (aAssetType == ASSET_KEY_VALUE_PAIRS) {
return "KEY_VALUE_PAIRS";
} else if (aAssetType == ASSET_SCRIPT_BUNDLE) {
return "SCRIPT_BUNDLE";
} else if (aAssetType == ASSET_SCRIPT_BUNDLE_LIST) {
return "SCRIPT_BUNDLE_LIST";
} else if (aAssetType == ASSET_LIGHT_DEF) {
return "LIGHT_DEF";
} else if (aAssetType == ASSET_BIT_FIELD) {
return "BIT_FIELD";
} else if (aAssetType == ASSET_MAP_TABLE) {
return "MAP_TABLE";
} else if (aAssetType == ASSET_MAP_TABLE_LOADING_IMAGES) {
return "MAP_TABLE_LOADING_IMAGES";
} else if (aAssetType == ASSET_SURFACE_SOUND_DEF) {
return "SURFACE_SOUND_DEF";
} else if (aAssetType == ASSET_SURFACE_FX_TABLE) {
return "SURFACE_FX_TABLE";
} else if (aAssetType == ASSET_RUMBLE) {
return "RUMBLE";
} else if (aAssetType == ASSET_AIM_TABLE) {
return "AIM_TABLE";
} else if (aAssetType == ASSET_MEDAL) {
return "MEDAL";
} else if (aAssetType == ASSET_MEDAL_TABLE) {
return "MEDAL_TABLE";
} else if (aAssetType == ASSET_OBJECTIVE) {
return "OBJECTIVE";
} else if (aAssetType == ASSET_OBJECTIVE_LIST) {
return "OBJECTIVE_LIST";
} else if (aAssetType == ASSET_LASER) {
return "LASER";
} else if (aAssetType == ASSET_BEAM) {
return "BEAM";
} else if (aAssetType == ASSET_STREAMER_HINT) {
return "STREAMER_HINT";
} else if (aAssetType == ASSET_ANIM_SELECTOR_TABLE) {
return "ANIM_SELECTOR_TABLE";
} else if (aAssetType == ASSET_ANIM_MAPPING_TABLE) {
return "ANIM_MAPPING_TABLE";
} else if (aAssetType == ASSET_ANIM_STATE_MACHINE) {
return "ANIM_STATE_MACHINE";
} else if (aAssetType == ASSET_BEHAVIOR_TREE) {
return "BEHAVIOR_TREE";
} else if (aAssetType == ASSET_BEHAVIOR_STATE_MACHINE) {
return "BEHAVIOR_STATE_MACHINE";
} else if (aAssetType == ASSET_FOOTSTEP_TABLE) {
return "FOOTSTEP_TABLE";
} else if (aAssetType == ASSET_ENTITY_FX_IMPACTS) {
return "ENTITY_FX_IMPACTS";
} else if (aAssetType == ASSET_ENTITY_SOUND_IMPACTS) {
return "ENTITY_SOUND_IMPACTS";
} else if (aAssetType == ASSET_VEHICLE_FX_DEF) {
return "VEHICLE_FX_DEF";
} else if (aAssetType == ASSET_VEHICLE_SOUND_DEF) {
return "VEHICLE_SOUND_DEF";
} else if (aAssetType == ASSET_VEHICLE) {
return "VEHICLE";
} else if (aAssetType == ASSET_VEHICLE_TRACER) {
return "VEHICLE_TRACER";
} else if (aAssetType == ASSET_PLAYER_SOUNDS_TABLE) {
return "PLAYER_SOUNDS_TABLE";
} else if (aAssetType == ASSET_PLAYER_FX_TABLE) {
return "PLAYER_FX_TABLE";
} else if (aAssetType == ASSET_SHARED_WEAPON_SOUNDS) {
return "SHARED_WEAPON_SOUNDS";
} else if (aAssetType == ASSET_ATTACHMENT) {
return "ATTACHMENT";
} else if (aAssetType == ASSET_ATTACHMENT_UNIQUE) {
return "ATTACHMENT_UNIQUE";
} else if (aAssetType == ASSET_WEAPON_CAMO) {
return "WEAPON_CAMO";
} else if (aAssetType == ASSET_CUSTOMIZATION_TABLE) {
return "CUSTOMIZATION_TABLE";
} else if (aAssetType == ASSET_CUSTOMIZATION_TABLE_FEIMAGES) {
return "CUSTOMIZATION_TABLE_FEIMAGES";
} else if (aAssetType == ASSET_CUSTOMIZATION_TABLE_COLOR) {
return "CUSTOMIZATION_TABLE_COLOR";
} else if (aAssetType == ASSET_PHYS_CONSTRAINTS) {
return "PHYS_CONSTRAINTS";
} else if (aAssetType == ASSET_DESTRUCTIBLE_DEF) {
return "DESTRUCTIBLE_DEF";
} else if (aAssetType == ASSET_MODEL_MESH) {
return "MODEL_MESH";
} else if (aAssetType == ASSET_S_ANIM) {
return "S_ANIM";
} else if (aAssetType == ASSET_SOUND) {
return "SOUND";
} else if (aAssetType == ASSET_FONT_ICON) {
return "FONT_ICON";
} else if (aAssetType == ASSET_SHOCK_FILE) {
return "SHOCK_FILE";
} else if (aAssetType == ASSET_FAST_FILE) {
return "FAST_FILE";
} else if (aAssetType == ASSET_ZONE_FILE) {
return "ZONE_FILE";
} else if (aAssetType == ASSET_SOUND_DRIVER_GLOBALS) {
return "SOUND_DRIVER_GLOBALS";
}
return "UNKNOWN";
}
QIcon ZoneFile::AssetTypeToIcon(const AssetType aAssetType) {
QString assetCode;
const QStringList parts = AssetEnumToStr(aAssetType).split('_');
foreach (const QString part, parts) {
assetCode.append(part[0]);
}
if (parts.size() == 1) {
assetCode.append(parts[0][1]);
}
return Utils::CreateAssetIcon(assetCode);
if (aAssetType == ASSET_NONE) {
return Utils::CreateAssetIcon("NO");
} else if (aAssetType == ASSET_RAW_FILE) {
return Utils::CreateAssetIcon("RAW");
} else if (aAssetType == ASSET_SCRIPT_PARSE_TREE) {
return Utils::CreateAssetIcon("PT");
} else if (aAssetType == ASSET_EFFECT) {
return Utils::CreateAssetIcon("EF");
} else if (aAssetType == ASSET_SOUND) {
return Utils::CreateAssetIcon("SN");
} else if (aAssetType == ASSET_ANIMATION) {
return Utils::CreateAssetIcon("AN");
} else if (aAssetType == ASSET_COLLISION_MAP) {
return Utils::CreateAssetIcon("CM");
} else if (aAssetType == ASSET_STRING_TABLE) {
return Utils::CreateAssetIcon("ST");
} else if (aAssetType == ASSET_MENU) {
return Utils::CreateAssetIcon("MN");
} else if (aAssetType == ASSET_TECH_SET) {
return Utils::CreateAssetIcon("TS");
} else if (aAssetType == ASSET_WEAPON) {
return Utils::CreateAssetIcon("WP");
} else if (aAssetType == ASSET_GFX_MAP) {
return Utils::CreateAssetIcon("GFM");
} else if (aAssetType == ASSET_LIGHT_DEF) {
return Utils::CreateAssetIcon("LDF");
} else if (aAssetType == ASSET_FONT) {
return Utils::CreateAssetIcon("FN");
} else if (aAssetType == ASSET_MODEL) {
return Utils::CreateAssetIcon("MD");
} else if (aAssetType == ASSET_D3DBSP) {
return Utils::CreateAssetIcon("BSP");
} else if (aAssetType == ASSET_IMAGE) {
return Utils::CreateAssetIcon("IM");
} else if (aAssetType == ASSET_GAME_MAP_SP) {
return Utils::CreateAssetIcon("GMS");
} else if (aAssetType == ASSET_COL_MAP_SP) {
return Utils::CreateAssetIcon("CMS");
} else if (aAssetType == ASSET_PHYS_PRESET) {
return Utils::CreateAssetIcon("PP");
} else if (aAssetType == ASSET_DESTRUCTIBLE) {
return Utils::CreateAssetIcon("DE");
} else if (aAssetType == ASSET_LOCAL_STRING) {
return Utils::CreateAssetIcon("LS");
} else if (aAssetType == ASSET_SHADER) {
return Utils::CreateAssetIcon("SH");
} else if (aAssetType == ASSET_MP_MAP) {
return Utils::CreateAssetIcon("MM");
} else if (aAssetType == ASSET_SP_MAP) {
return Utils::CreateAssetIcon("SM");
} else if (aAssetType == ASSET_UI_MAP) {
return Utils::CreateAssetIcon("UM");
} else if (aAssetType == ASSET_SND_DRIVER_GLOBALS) {
return Utils::CreateAssetIcon("DG");
} else if (aAssetType == ASSET_AI_TYPE) {
return Utils::CreateAssetIcon("AT");
} else if (aAssetType == ASSET_MATERIAL) {
return Utils::CreateAssetIcon("MT");
} else if (aAssetType == ASSET_COMPUTE_SHADER_SET) {
return Utils::CreateAssetIcon("CSH");
} else if (aAssetType == ASSET_LIGHT_DESCRIPTION) {
return Utils::CreateAssetIcon("LDS");
} else if (aAssetType == ASSET_BIT_FIELD) {
return Utils::CreateAssetIcon("BF");
} else if (aAssetType == ASSET_STRUCTURED_TABLE) {
return Utils::CreateAssetIcon("SDT");
} else if (aAssetType == ASSET_LEADERBOARD_DEF) {
return Utils::CreateAssetIcon("LBD");
} else if (aAssetType == ASSET_DDL) {
return Utils::CreateAssetIcon("DDL");
} else if (aAssetType == ASSET_KEY_VALUE_PAIRS) {
return Utils::CreateAssetIcon("KV");
} else if (aAssetType == ASSET_SCRIPT_BUNDLE) {
return Utils::CreateAssetIcon("SB");
} else if (aAssetType == ASSET_SCRIPT_BUNDLE_LIST) {
return Utils::CreateAssetIcon("SBL");
} else if (aAssetType == ASSET_MAP_TABLE) {
return Utils::CreateAssetIcon("MT");
} else if (aAssetType == ASSET_MAP_TABLE_LOADING_IMAGES) {
return Utils::CreateAssetIcon("LI");
} else if (aAssetType == ASSET_SURFACE_SOUND_DEF) {
return Utils::CreateAssetIcon("SSD");
} else if (aAssetType == ASSET_SURFACE_FX_TABLE) {
return Utils::CreateAssetIcon("FT");
} else if (aAssetType == ASSET_RUMBLE) {
return Utils::CreateAssetIcon("RM");
} else if (aAssetType == ASSET_AIM_TABLE) {
return Utils::CreateAssetIcon("AMT");
} else if (aAssetType == ASSET_MEDAL) {
return Utils::CreateAssetIcon("ME");
} else if (aAssetType == ASSET_MEDAL_TABLE) {
return Utils::CreateAssetIcon("MET");
} else if (aAssetType == ASSET_OBJECTIVE) {
return Utils::CreateAssetIcon("OB");
} else if (aAssetType == ASSET_OBJECTIVE_LIST) {
return Utils::CreateAssetIcon("OBL");
} else if (aAssetType == ASSET_LASER) {
return Utils::CreateAssetIcon("LS");
} else if (aAssetType == ASSET_BEAM) {
return Utils::CreateAssetIcon("BM");
} else if (aAssetType == ASSET_STREAMER_HINT) {
return Utils::CreateAssetIcon("SH");
} else if (aAssetType == ASSET_ANIM_SELECTOR_TABLE) {
return Utils::CreateAssetIcon("AST");
} else if (aAssetType == ASSET_ANIM_MAPPING_TABLE) {
return Utils::CreateAssetIcon("AMP");
} else if (aAssetType == ASSET_ANIM_STATE_MACHINE) {
return Utils::CreateAssetIcon("ASM");
} else if (aAssetType == ASSET_BEHAVIOR_TREE) {
return Utils::CreateAssetIcon("BT");
} else if (aAssetType == ASSET_BEHAVIOR_STATE_MACHINE) {
return Utils::CreateAssetIcon("BSM");
} else if (aAssetType == ASSET_FOOTSTEP_TABLE) {
return Utils::CreateAssetIcon("FT");
} else if (aAssetType == ASSET_ENTITY_FX_IMPACTS) {
return Utils::CreateAssetIcon("FI");
} else if (aAssetType == ASSET_ENTITY_SOUND_IMPACTS) {
return Utils::CreateAssetIcon("SI");
} else if (aAssetType == ASSET_VEHICLE_FX_DEF) {
return Utils::CreateAssetIcon("FD");
} else if (aAssetType == ASSET_VEHICLE_SOUND_DEF) {
return Utils::CreateAssetIcon("SDD");
} else if (aAssetType == ASSET_VEHICLE) {
return Utils::CreateAssetIcon("VE");
} else if (aAssetType == ASSET_VEHICLE_TRACER) {
return Utils::CreateAssetIcon("VT");
} else if (aAssetType == ASSET_PLAYER_SOUNDS_TABLE) {
return Utils::CreateAssetIcon("SDT");
} else if (aAssetType == ASSET_PLAYER_FX_TABLE) {
return Utils::CreateAssetIcon("FXT");
} else if (aAssetType == ASSET_SHARED_WEAPON_SOUNDS) {
return Utils::CreateAssetIcon("SWS");
} else if (aAssetType == ASSET_ATTACHMENT) {
return Utils::CreateAssetIcon("AT");
} else if (aAssetType == ASSET_ATTACHMENT_UNIQUE) {
return Utils::CreateAssetIcon("AU");
} else if (aAssetType == ASSET_WEAPON_CAMO) {
return Utils::CreateAssetIcon("WPC");
} else if (aAssetType == ASSET_CUSTOMIZATION_TABLE) {
return Utils::CreateAssetIcon("CT");
} else if (aAssetType == ASSET_CUSTOMIZATION_TABLE_FEIMAGES) {
return Utils::CreateAssetIcon("CI");
} else if (aAssetType == ASSET_CUSTOMIZATION_TABLE_COLOR) {
return Utils::CreateAssetIcon("CC");
} else if (aAssetType == ASSET_PHYS_CONSTRAINTS) {
return Utils::CreateAssetIcon("PC");
} else if (aAssetType == ASSET_DESTRUCTIBLE_DEF) {
return Utils::CreateAssetIcon("DD");
} else if (aAssetType == ASSET_MODEL_MESH) {
return Utils::CreateAssetIcon("MM");
} else if (aAssetType == ASSET_S_ANIM) {
return Utils::CreateAssetIcon("SA");
} else if (aAssetType == ASSET_FONT_ICON) {
return Utils::CreateAssetIcon("FI");
} else if (aAssetType == ASSET_CG_MEDIA_TABLE) {
return Utils::CreateAssetIcon("MT");
} else if (aAssetType == ASSET_SHOCK_FILE) {
return Utils::CreateAssetIcon("SF");
} else if (aAssetType == ASSET_FAST_FILE) {
return Utils::CreateAssetIcon("FF");
} else if (aAssetType == ASSET_ZONE_FILE) {
return Utils::CreateAssetIcon("ZF");
} else if (aAssetType == ASSET_SOUND_DRIVER_GLOBALS) {
return Utils::CreateAssetIcon("SDG");
}
return QIcon();
}
bool ZoneFile::SaveZoneFile(const QString aZoneFilePath) {
QFile zoneFile(aZoneFilePath);
if (!zoneFile.open(QIODevice::WriteOnly)) {
LogManager::instance().addEntry("Failed to write zone file! " + zoneFile.errorString());
return false;
}
zoneFile.write(GetBinaryData());
zoneFile.close();
return true;
}
QString ZoneFile::GetStem() {
return mStem;
}
QString ZoneFile::GetBaseStem() {
return mStem.split('.').first();
}
quint32 ZoneFile::GetSize() {
return mSize;
}
quint32 ZoneFile::GetTagCount() {
return mTagCount;
}
QStringList ZoneFile::GetTags() {
return mTags;
}
quint32 ZoneFile::GetRecordCount() {
return mRecordCount;
}
QStringList ZoneFile::GetRecords() {
return mRecords;
}
AssetMap ZoneFile::GetAssetMap() {
return mAssetMap;
}
void ZoneFile::SetStem(const QString aStem) {
mStem = aStem;
}
void ZoneFile::SetSize(quint32 aSize) {
mSize = aSize;
}
void ZoneFile::SetTagCount(quint32 aTagCount) {
mTagCount = aTagCount;
}
void ZoneFile::SetTags(const QStringList aTags) {
mTags = aTags;
}
void ZoneFile::SetRecordCount(quint32 aRecordCount) {
mRecordCount = aRecordCount;
}
void ZoneFile::SetRecords(const QStringList aRecords) {
mRecords = aRecords;
}
void ZoneFile::SetAssetMap(const AssetMap aAssetMap) {
mAssetMap = aAssetMap;
}