From 769f5702a422d14bfb0a60a39319da4b4bf9ec1f Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Mon, 10 May 2021 12:25:39 -0400 Subject: ZRoom refactor (#124) * Remove redundant methods * first pass os cleaning * More cleaning * Fix compilation errors * Fix dumb crashes * Fix dumb issues * Removing most uses of GenerateSourceCodePass1 * more cleanup * Move segmentOffset to ZRoomCommand * Half of ParseRawData * somehow broken... * fix broken stuff * This may or may not be broken * More cleaning * Remove GenerateSourceCodePass2 * More cleanup and pointer removal * Use PolygonType2 in SetMesh * another small cleanup * Merge PolygonDlist and PolygonDlist2 * More code merging * GetDeclarationPtrName * Remove most repeated externs and a bit of redundant code * Dumb MM fixes * small fix (cherry picked from commit 0813fd69538491c5aceb00d79d19bf59fd082ca7) * Another dumb fix * Remove GenerateExterns * Change DeclareReferences signature * Refactor SetAnimatedTextureList * const std::vector& * another small bunch of changes * last parserawdata and declarereferences separation probably * Move parserawdata * Remove GenerateSourceCodePass1 * Use macros for commands * Make ZRoomCommand inherit ZResource * shrink scenes tluts * ProcessTextureIntersections * small output improvements * Small changes * run format * SCENE_CMD -> SCENECMD * fix merge errors * run format * fix some warnings * update macros names * Add again different commands for each game ni SCENE_CMD_ROOM_BEHAVIOR * macro update * More booleans * Move declaration to its own file * minor changes * Update according to latest reviews in oot * run format * Yet another cutscene change * Remove special scene/room segment code * This is crashing and I don't know why * remove includeFilePrefix * fix merge issues * always pass a parent to zresource * move path to its own zclass and properly implement parserawdata in commands * Fix GetDeclarationPtrName uses * Some ZPath fixes (still broken tho) * Fix ZPath declarations * Fix weird problem * Add `Path` to the docs * run format * clean syotes code * A bunch of changes for MM * run format --- ZAPD/ZRoom/Commands/SetTransitionActorList.cpp | 95 +++++++++++--------------- 1 file changed, 41 insertions(+), 54 deletions(-) (limited to 'ZAPD/ZRoom/Commands/SetTransitionActorList.cpp') diff --git a/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp b/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp index 431c1a2..9d70e6d 100644 --- a/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp +++ b/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp @@ -1,75 +1,59 @@ #include "SetTransitionActorList.h" -#include "../../BitConverter.h" -#include "../../Globals.h" -#include "../../StringHelper.h" -#include "../../ZFile.h" -#include "../ZNames.h" -#include "../ZRoom.h" - -SetTransitionActorList::SetTransitionActorList(ZRoom* nZRoom, std::vector rawData, - uint32_t rawDataIndex) - : ZRoomCommand(nZRoom, rawData, rawDataIndex) -{ - int32_t numActors = rawData[rawDataIndex + 1]; - segmentOffset = BitConverter::ToInt32BE(rawData, rawDataIndex + 4) & 0x00FFFFFF; - transitionActors = std::vector(); +#include "BitConverter.h" +#include "Globals.h" +#include "StringHelper.h" +#include "ZFile.h" +#include "ZRoom/ZNames.h" +#include "ZRoom/ZRoom.h" +SetTransitionActorList::SetTransitionActorList(ZFile* nParent) : ZRoomCommand(nParent) +{ +} + +void SetTransitionActorList::ParseRawData() +{ + ZRoomCommand::ParseRawData(); + int numActors = cmdArg1; uint32_t currentPtr = segmentOffset; for (int32_t i = 0; i < numActors; i++) { - TransitionActorEntry* entry = new TransitionActorEntry(rawData, currentPtr); + TransitionActorEntry entry(parent->GetRawData(), currentPtr); transitionActors.push_back(entry); currentPtr += 16; } } -SetTransitionActorList::~SetTransitionActorList() -{ - for (TransitionActorEntry* actor : transitionActors) - delete actor; -} - -std::string SetTransitionActorList::GetSourceOutputCode(std::string prefix) -{ - return ""; -} - -std::string SetTransitionActorList::GenerateSourceCodePass1(std::string roomName, - uint32_t baseAddress) +void SetTransitionActorList::DeclareReferences(const std::string& prefix) { - std::string sourceOutput = - StringHelper::Sprintf("%s 0x%02X, (u32)%sTransitionActorList0x%06X", - ZRoomCommand::GenerateSourceCodePass1(roomName, baseAddress).c_str(), - transitionActors.size(), roomName.c_str(), segmentOffset); std::string declaration = ""; - for (TransitionActorEntry* entry : transitionActors) + size_t index = 0; + for (const auto& entry : transitionActors) { - std::string actorStr = ZNames::GetActorName(entry->actorNum); + declaration += StringHelper::Sprintf(" { %s },", entry.GetBodySourceCode().c_str()); + if (index + 1 < transitionActors.size()) + { + declaration += "\n"; + } - declaration += StringHelper::Sprintf( - " { %i, %i, %i, %i, %s, %i, %i, %i, %i, 0x%04X }, \n", entry->frontObjectRoom, - entry->frontTransitionReaction, entry->backObjectRoom, entry->backTransitionReaction, - actorStr.c_str(), entry->posX, entry->posY, entry->posZ, entry->rotY, - (uint16_t)entry->initVar); + index++; } - zRoom->parent->AddDeclarationArray( + parent->AddDeclarationArray( segmentOffset, DeclarationAlignment::None, transitionActors.size() * 16, "TransitionActorEntry", - StringHelper::Sprintf("%sTransitionActorList0x%06X", roomName.c_str(), segmentOffset), 0, + StringHelper::Sprintf("%sTransitionActorList_%06X", prefix.c_str(), segmentOffset), 0, declaration); - - return sourceOutput; } -std::string SetTransitionActorList::GenerateSourceCodePass2(std::string roomName, - uint32_t baseAddress) +std::string SetTransitionActorList::GetBodySourceCode() const { - return ""; + std::string listName = parent->GetDeclarationPtrName(cmdArg2); + return StringHelper::Sprintf("SCENE_CMD_TRANSITION_ACTOR_LIST(%i, %s)", transitionActors.size(), + listName.c_str()); } size_t SetTransitionActorList::GetRawDataSize() const @@ -77,12 +61,6 @@ size_t SetTransitionActorList::GetRawDataSize() const return ZRoomCommand::GetRawDataSize() + (transitionActors.size() * 16); } -std::string SetTransitionActorList::GenerateExterns() const -{ - return StringHelper::Sprintf("extern TransitionActorEntry %sTransitionActorList0x%06X[];\n", - zRoom->GetName().c_str(), segmentOffset); -} - std::string SetTransitionActorList::GetCommandCName() const { return "SCmdTransiActorList"; @@ -93,7 +71,7 @@ RoomCommand SetTransitionActorList::GetRoomCommand() const return RoomCommand::SetTransitionActorList; } -TransitionActorEntry::TransitionActorEntry(std::vector rawData, uint32_t rawDataIndex) +TransitionActorEntry::TransitionActorEntry(const std::vector& rawData, int rawDataIndex) { frontObjectRoom = rawData[rawDataIndex + 0]; frontTransitionReaction = rawData[rawDataIndex + 1]; @@ -105,4 +83,13 @@ TransitionActorEntry::TransitionActorEntry(std::vector rawData, uint32_ posZ = BitConverter::ToInt16BE(rawData, rawDataIndex + 10); rotY = BitConverter::ToInt16BE(rawData, rawDataIndex + 12); initVar = BitConverter::ToInt16BE(rawData, rawDataIndex + 14); -} \ No newline at end of file +} + +std::string TransitionActorEntry::GetBodySourceCode() const +{ + std::string actorStr = ZNames::GetActorName(actorNum); + + return StringHelper::Sprintf("%i, %i, %i, %i, %s, %i, %i, %i, %i, 0x%04X", frontObjectRoom, + frontTransitionReaction, backObjectRoom, backTransitionReaction, + actorStr.c_str(), posX, posY, posZ, rotY, initVar); +} -- cgit v1.2.3