summaryrefslogtreecommitdiff
path: root/ZAPD/ZRoom/Commands/SetLightingSettings.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ZAPD/ZRoom/Commands/SetLightingSettings.cpp')
-rw-r--r--ZAPD/ZRoom/Commands/SetLightingSettings.cpp142
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;
}