diff options
Diffstat (limited to 'ZAPD/ZRoom/Commands/SetLightingSettings.cpp')
| -rw-r--r-- | ZAPD/ZRoom/Commands/SetLightingSettings.cpp | 142 |
1 files changed, 67 insertions, 75 deletions
diff --git a/ZAPD/ZRoom/Commands/SetLightingSettings.cpp b/ZAPD/ZRoom/Commands/SetLightingSettings.cpp index 53b4711..e677738 100644 --- a/ZAPD/ZRoom/Commands/SetLightingSettings.cpp +++ b/ZAPD/ZRoom/Commands/SetLightingSettings.cpp @@ -1,65 +1,50 @@ #include "SetLightingSettings.h" -#include "../../BitConverter.h" -#include "../../StringHelper.h" -#include "../../ZFile.h" -#include "../ZRoom.h" - -SetLightingSettings::SetLightingSettings(ZRoom* nZRoom, std::vector<uint8_t> rawData, - uint32_t rawDataIndex) - : ZRoomCommand(nZRoom, rawData, rawDataIndex) +#include "BitConverter.h" +#include "StringHelper.h" +#include "ZFile.h" +#include "ZRoom/ZRoom.h" + +SetLightingSettings::SetLightingSettings(ZFile* nParent) : ZRoomCommand(nParent) +{ +} + +void SetLightingSettings::ParseRawData() { - uint8_t numLights = rawData[rawDataIndex + 1]; - segmentOffset = GETSEGOFFSET(BitConverter::ToInt32BE(rawData, rawDataIndex + 4)); + ZRoomCommand::ParseRawData(); + uint8_t numLights = cmdArg1; - for (int32_t i = 0; i < numLights; i++) - settings.push_back(new LightingSettings(rawData, segmentOffset + (i * 22))); + for (int i = 0; i < numLights; i++) + settings.push_back(LightingSettings(parent->GetRawData(), segmentOffset + (i * 22))); +} - if (numLights > 0) +void SetLightingSettings::DeclareReferences(const std::string& prefix) +{ + if (settings.size() > 0) { std::string declaration = ""; - for (int32_t i = 0; i < numLights; i++) + for (size_t i = 0; i < settings.size(); i++) { - declaration += StringHelper::Sprintf( - "\t{ 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, " - "0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%04X, " - "0x%04X }, // 0x%06X", - settings[i]->ambientClrR, settings[i]->ambientClrG, settings[i]->ambientClrB, - settings[i]->diffuseClrA_R, settings[i]->diffuseClrA_G, settings[i]->diffuseClrA_B, - settings[i]->diffuseDirA_X, settings[i]->diffuseDirA_Y, settings[i]->diffuseDirA_Z, - settings[i]->diffuseClrB_R, settings[i]->diffuseClrB_G, settings[i]->diffuseClrB_B, - settings[i]->diffuseDirB_X, settings[i]->diffuseDirB_Y, settings[i]->diffuseDirB_Z, - settings[i]->fogClrR, settings[i]->fogClrG, settings[i]->fogClrB, settings[i]->unk, - settings[i]->drawDistance, segmentOffset + (i * 22)); - if (i + 1 < numLights) + declaration += StringHelper::Sprintf("\t{ %s }, // 0x%06X", + settings.at(i).GetBodySourceCode().c_str(), + segmentOffset + (i * 22)); + if (i + 1 < settings.size()) declaration += "\n"; } - zRoom->parent->AddDeclarationArray( - segmentOffset, DeclarationAlignment::None, DeclarationPadding::None, numLights * 22, - "LightSettings", - StringHelper::Sprintf("%sLightSettings_%06X", zRoom->GetName().c_str(), segmentOffset), - numLights, declaration); + parent->AddDeclarationArray( + segmentOffset, DeclarationAlignment::Align4, + settings.size() * settings.front().GetRawDataSize(), "LightSettings", + StringHelper::Sprintf("%sLightSettings0x%06X", prefix.c_str(), segmentOffset), + settings.size(), declaration); } } -SetLightingSettings::~SetLightingSettings() -{ - for (LightingSettings* setting : settings) - delete setting; -} - -std::string SetLightingSettings::GenerateSourceCodePass1(std::string roomName, uint32_t baseAddress) -{ - return StringHelper::Sprintf( - "%s %i, (u32)&%sLightSettings_%06X", - ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), settings.size(), - zRoom->GetName().c_str(), segmentOffset); -} - -std::string SetLightingSettings::GenerateSourceCodePass2(std::string roomName, uint32_t baseAddress) +std::string SetLightingSettings::GetBodySourceCode() const { - return ""; + std::string listName = parent->GetDeclarationPtrName(cmdArg2); + return StringHelper::Sprintf("SCENE_CMD_ENV_LIGHT_SETTINGS(%i, %s)", settings.size(), + listName.c_str()); } std::string SetLightingSettings::GetCommandCName() const @@ -67,45 +52,52 @@ std::string SetLightingSettings::GetCommandCName() const return "SCmdLightSettingList"; } -std::string SetLightingSettings::GenerateExterns() const -{ - return StringHelper::Sprintf("extern LightSettings %sLightSettings_%06X[];\n", - zRoom->GetName().c_str(), segmentOffset); -} - RoomCommand SetLightingSettings::GetRoomCommand() const { return RoomCommand::SetLightingSettings; } -LightingSettings::LightingSettings(std::vector<uint8_t> rawData, uint32_t rawDataIndex) +LightingSettings::LightingSettings(const std::vector<uint8_t>& rawData, uint32_t rawDataIndex) { - const uint8_t* data = rawData.data(); + ambientClrR = rawData.at(rawDataIndex + 0); + ambientClrG = rawData.at(rawDataIndex + 1); + ambientClrB = rawData.at(rawDataIndex + 2); - ambientClrR = data[rawDataIndex + 0]; - ambientClrG = data[rawDataIndex + 1]; - ambientClrB = data[rawDataIndex + 2]; + diffuseClrA_R = rawData.at(rawDataIndex + 3); + diffuseClrA_G = rawData.at(rawDataIndex + 4); + diffuseClrA_B = rawData.at(rawDataIndex + 5); - diffuseClrA_R = data[rawDataIndex + 3]; - diffuseClrA_G = data[rawDataIndex + 4]; - diffuseClrA_B = data[rawDataIndex + 5]; + diffuseDirA_X = rawData.at(rawDataIndex + 6); + diffuseDirA_Y = rawData.at(rawDataIndex + 7); + diffuseDirA_Z = rawData.at(rawDataIndex + 8); - diffuseDirA_X = data[rawDataIndex + 6]; - diffuseDirA_Y = data[rawDataIndex + 7]; - diffuseDirA_Z = data[rawDataIndex + 8]; + diffuseClrB_R = rawData.at(rawDataIndex + 9); + diffuseClrB_G = rawData.at(rawDataIndex + 10); + diffuseClrB_B = rawData.at(rawDataIndex + 11); - diffuseClrB_R = data[rawDataIndex + 9]; - diffuseClrB_G = data[rawDataIndex + 10]; - diffuseClrB_B = data[rawDataIndex + 11]; + diffuseDirB_X = rawData.at(rawDataIndex + 12); + diffuseDirB_Y = rawData.at(rawDataIndex + 13); + diffuseDirB_Z = rawData.at(rawDataIndex + 14); - diffuseDirB_X = data[rawDataIndex + 12]; - diffuseDirB_Y = data[rawDataIndex + 13]; - diffuseDirB_Z = data[rawDataIndex + 14]; + fogClrR = rawData.at(rawDataIndex + 15); + fogClrG = rawData.at(rawDataIndex + 16); + fogClrB = rawData.at(rawDataIndex + 17); - fogClrR = data[rawDataIndex + 15]; - fogClrG = data[rawDataIndex + 16]; - fogClrB = data[rawDataIndex + 17]; + unk = BitConverter::ToInt16BE(rawData, rawDataIndex + 18); + drawDistance = BitConverter::ToInt16BE(rawData, rawDataIndex + 20); +} - unk = BitConverter::ToInt16BE(data, rawDataIndex + 18); - drawDistance = BitConverter::ToInt16BE(data, rawDataIndex + 20); +std::string LightingSettings::GetBodySourceCode() const +{ + return StringHelper::Sprintf( + "0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, " + "0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%02X, 0x%04X, 0x%04X", + ambientClrR, ambientClrG, ambientClrB, diffuseClrA_R, diffuseClrA_G, diffuseClrA_B, + diffuseDirA_X, diffuseDirA_Y, diffuseDirA_Z, diffuseClrB_R, diffuseClrB_G, diffuseClrB_B, + diffuseDirB_X, diffuseDirB_Y, diffuseDirB_Z, fogClrR, fogClrG, fogClrB, unk, drawDistance); +} + +size_t LightingSettings::GetRawDataSize() const +{ + return 0x16; } |
