summaryrefslogtreecommitdiff
path: root/ZAPD/ZCollisionPoly.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ZAPD/ZCollisionPoly.cpp')
-rw-r--r--ZAPD/ZCollisionPoly.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/ZAPD/ZCollisionPoly.cpp b/ZAPD/ZCollisionPoly.cpp
new file mode 100644
index 0000000..eb2c14a
--- /dev/null
+++ b/ZAPD/ZCollisionPoly.cpp
@@ -0,0 +1,76 @@
+#include "ZCollisionPoly.h"
+
+#include "Globals.h"
+#include "Utils/BitConverter.h"
+#include "Utils/StringHelper.h"
+
+REGISTER_ZFILENODE(CollisionPoly, ZCollisionPoly);
+
+ZCollisionPoly::ZCollisionPoly(ZFile* nParent) : ZResource(nParent)
+{
+}
+
+ZCollisionPoly::~ZCollisionPoly()
+{
+}
+
+void ZCollisionPoly::ParseRawData()
+{
+ const auto& rawData = parent->GetRawData();
+ type = BitConverter::ToUInt16BE(rawData, rawDataIndex + 0);
+
+ vtxA = BitConverter::ToUInt16BE(rawData, rawDataIndex + 2);
+ vtxB = BitConverter::ToUInt16BE(rawData, rawDataIndex + 4);
+ vtxC = BitConverter::ToUInt16BE(rawData, rawDataIndex + 6);
+
+ normX = BitConverter::ToUInt16BE(rawData, rawDataIndex + 8);
+ normY = BitConverter::ToUInt16BE(rawData, rawDataIndex + 10);
+ normZ = BitConverter::ToUInt16BE(rawData, rawDataIndex + 12);
+
+ dist = BitConverter::ToUInt16BE(rawData, rawDataIndex + 14);
+}
+
+void ZCollisionPoly::DeclareReferences(const std::string& prefix)
+{
+ std::string declaration;
+ std::string auxName = name;
+
+ if (name == "")
+ auxName = GetDefaultName(prefix);
+
+ parent->AddDeclaration(rawDataIndex, DeclarationAlignment::Align4,GetRawDataSize(), GetSourceTypeName(), name.c_str(),GetBodySourceCode());
+}
+
+std::string ZCollisionPoly::GetBodySourceCode() const
+{
+ std::string declaration;
+
+ declaration += StringHelper::Sprintf("{0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X, 0x%04X}", type, vtxA, vtxB, vtxC, normX, normY, normZ, dist);
+ return declaration;
+}
+
+std::string ZCollisionPoly::GetDefaultName(const std::string& prefix) const
+{
+ return StringHelper::Sprintf("%sCollisionPoly_%06X", prefix.c_str(), rawDataIndex);
+}
+
+
+ZResourceType ZCollisionPoly::GetResourceType() const
+{
+ return ZResourceType::CollisionPoly;
+}
+
+size_t ZCollisionPoly::GetRawDataSize() const
+{
+ return 16;
+}
+
+std::string ZCollisionPoly::GetSourceTypeName() const
+{
+ return "CollisionPoly";
+}
+
+bool ZCollisionPoly::DoesSupportArray() const
+{
+ return true;
+} \ No newline at end of file