diff options
Diffstat (limited to 'ZAPD/ZRoom/Commands/SetObjectList.cpp')
| -rw-r--r-- | ZAPD/ZRoom/Commands/SetObjectList.cpp | 78 |
1 files changed, 38 insertions, 40 deletions
diff --git a/ZAPD/ZRoom/Commands/SetObjectList.cpp b/ZAPD/ZRoom/Commands/SetObjectList.cpp index c3c709b..d3184b4 100644 --- a/ZAPD/ZRoom/Commands/SetObjectList.cpp +++ b/ZAPD/ZRoom/Commands/SetObjectList.cpp @@ -1,62 +1,60 @@ #include "SetObjectList.h" -#include "../../BitConverter.h" -#include "../../Globals.h" -#include "../../StringHelper.h" -#include "../../ZFile.h" -#include "../ZNames.h" -#include "../ZRoom.h" -SetObjectList::SetObjectList(ZRoom* nZRoom, std::vector<uint8_t> rawData, uint32_t rawDataIndex) - : ZRoomCommand(nZRoom, rawData, rawDataIndex) +#include "BitConverter.h" +#include "Globals.h" +#include "StringHelper.h" +#include "ZFile.h" +#include "ZRoom/ZNames.h" +#include "ZRoom/ZRoom.h" + +SetObjectList::SetObjectList(ZFile* nParent) : ZRoomCommand(nParent) +{ +} + +void SetObjectList::ParseRawData() { - objects = std::vector<uint16_t>(); - uint8_t objectCnt = rawData[rawDataIndex + 1]; - segmentOffset = GETSEGOFFSET(BitConverter::ToInt32BE(rawData, rawDataIndex + 4)); + ZRoomCommand::ParseRawData(); + uint8_t objectCnt = parent->GetRawData().at(rawDataIndex + 1); uint32_t currentPtr = segmentOffset; for (uint8_t i = 0; i < objectCnt; i++) { - uint16_t objectIndex = BitConverter::ToInt16BE(rawData, currentPtr); + uint16_t objectIndex = BitConverter::ToInt16BE(parent->GetRawData(), currentPtr); objects.push_back(objectIndex); currentPtr += 2; } if (segmentOffset != 0) - zRoom->parent->AddDeclarationPlaceholder(segmentOffset); -} - -std::string SetObjectList::GenerateExterns() const -{ - return StringHelper::Sprintf("s16 %sObjectList0x%06X[];\n", zRoom->GetName().c_str(), - segmentOffset); + parent->AddDeclarationPlaceholder(segmentOffset); } -std::string SetObjectList::GenerateSourceCodePass1(std::string roomName, uint32_t baseAddress) +void SetObjectList::DeclareReferences(const std::string& prefix) { - std::string sourceOutput = ""; - - sourceOutput += - StringHelper::Sprintf("%s 0x%02X, (u32)%sObjectList0x%06X", - ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), - objects.size(), zRoom->GetName().c_str(), segmentOffset); + if (!objects.empty()) + { + std::string declaration = ""; - std::string declaration = ""; + for (size_t i = 0; i < objects.size(); i++) + { + uint16_t objectIndex = objects[i]; + declaration += + StringHelper::Sprintf(" %s,", ZNames::GetObjectName(objectIndex).c_str()); - for (size_t i = 0; i < objects.size(); i++) - { - uint16_t objectIndex = objects[i]; - declaration += StringHelper::Sprintf(" %s,", ZNames::GetObjectName(objectIndex).c_str()); + if (i < objects.size() - 1) + declaration += "\n"; + } - if (i < objects.size() - 1) - declaration += "\n"; + parent->AddDeclarationArray( + segmentOffset, DeclarationAlignment::None, objects.size() * 2, "s16", + StringHelper::Sprintf("%sObjectList_%06X", prefix.c_str(), segmentOffset), + objects.size(), declaration); } +} - zRoom->parent->AddDeclarationArray( - segmentOffset, DeclarationAlignment::None, objects.size() * 2, "s16", - StringHelper::Sprintf("%sObjectList0x%06X", zRoom->GetName().c_str(), segmentOffset), - objects.size(), declaration); - - return sourceOutput; +std::string SetObjectList::GetBodySourceCode() const +{ + std::string listName = parent->GetDeclarationPtrName(cmdArg2); + return StringHelper::Sprintf("SCENE_CMD_OBJECT_LIST(%i, %s)", objects.size(), listName.c_str()); } size_t SetObjectList::GetRawDataSize() const @@ -72,4 +70,4 @@ std::string SetObjectList::GetCommandCName() const RoomCommand SetObjectList::GetRoomCommand() const { return RoomCommand::SetObjectList; -}
\ No newline at end of file +} |
