summaryrefslogtreecommitdiffstats
path: root/src/collision/CompressedVector.h
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2020-11-14 21:13:32 +0100
committerSergeanur <s.anureev@yandex.ua>2020-11-15 18:51:35 +0100
commita6f5f4634c63a515196a0f650682953356cb8e18 (patch)
tree806ca1627dbab6626634822037688aff376038c2 /src/collision/CompressedVector.h
parentMerge pull request #797 from theR4K/master (diff)
downloadre3-a6f5f4634c63a515196a0f650682953356cb8e18.tar
re3-a6f5f4634c63a515196a0f650682953356cb8e18.tar.gz
re3-a6f5f4634c63a515196a0f650682953356cb8e18.tar.bz2
re3-a6f5f4634c63a515196a0f650682953356cb8e18.tar.lz
re3-a6f5f4634c63a515196a0f650682953356cb8e18.tar.xz
re3-a6f5f4634c63a515196a0f650682953356cb8e18.tar.zst
re3-a6f5f4634c63a515196a0f650682953356cb8e18.zip
Diffstat (limited to 'src/collision/CompressedVector.h')
-rw-r--r--src/collision/CompressedVector.h36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/collision/CompressedVector.h b/src/collision/CompressedVector.h
new file mode 100644
index 00000000..d54e49b1
--- /dev/null
+++ b/src/collision/CompressedVector.h
@@ -0,0 +1,36 @@
+#pragma once
+
+struct CompressedVector
+{
+#ifdef COMPRESSED_COL_VECTORS
+ int16 x, y, z;
+ CVector Get(void) const { return CVector(x, y, z)/128.0f; };
+ void Set(float x, float y, float z) { this->x = x*128.0f; this->y = y*128.0f; this->z = z*128.0f; };
+#ifdef GTA_PS2
+ void Unpack(uint128 &qword) const {
+ __asm__ volatile (
+ "lh $8, 0(%1)\n"
+ "lh $9, 2(%1)\n"
+ "lh $10, 4(%1)\n"
+ "pextlw $10, $8\n"
+ "pextlw $2, $9, $10\n"
+ "sq $2, %0\n"
+ : "=m" (qword)
+ : "r" (this)
+ : "$8", "$9", "$10", "$2"
+ );
+ }
+#else
+ void Unpack(int32 *qword) const {
+ qword[0] = x;
+ qword[1] = y;
+ qword[2] = z;
+ qword[3] = 0; // junk
+ }
+#endif
+#else
+ float x, y, z;
+ CVector Get(void) const { return CVector(x, y, z); };
+ void Set(float x, float y, float z) { this->x = x; this->y = y; this->z = z; };
+#endif
+}; \ No newline at end of file