summaryrefslogtreecommitdiff
path: root/ZAPD/ZRoom/Commands/SetTransitionActorList.cpp
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2021-05-10 12:25:39 -0400
committerGitHub <noreply@github.com>2021-05-10 12:25:39 -0400
commit769f5702a422d14bfb0a60a39319da4b4bf9ec1f (patch)
tree11e12a20fb2880792722babdee0b5222ea86504f /ZAPD/ZRoom/Commands/SetTransitionActorList.cpp
parenta357277e412b5e8f0f2f0578c7d7d213e8744c8d (diff)
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<uint8_t>& * 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
Diffstat (limited to 'ZAPD/ZRoom/Commands/SetTransitionActorList.cpp')
-rw-r--r--ZAPD/ZRoom/Commands/SetTransitionActorList.cpp95
1 files changed, 41 insertions, 54 deletions
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<uint8_t> rawData,
- uint32_t rawDataIndex)
- : ZRoomCommand(nZRoom, rawData, rawDataIndex)
-{
- int32_t numActors = rawData[rawDataIndex + 1];
- segmentOffset = BitConverter::ToInt32BE(rawData, rawDataIndex + 4) & 0x00FFFFFF;
- transitionActors = std::vector<TransitionActorEntry*>();
+#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<uint8_t> rawData, uint32_t rawDataIndex)
+TransitionActorEntry::TransitionActorEntry(const std::vector<uint8_t>& rawData, int rawDataIndex)
{
frontObjectRoom = rawData[rawDataIndex + 0];
frontTransitionReaction = rawData[rawDataIndex + 1];
@@ -105,4 +83,13 @@ TransitionActorEntry::TransitionActorEntry(std::vector<uint8_t> 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);
+}