diff options
author | Sergeanur <s.anureev@yandex.ua> | 2020-11-14 21:13:32 +0100 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2020-11-15 23:36:54 +0100 |
commit | 9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c (patch) | |
tree | 3dcbab653ba34fa1fdc273887bd377603c4ff4f2 /src/collision/CompressedVector.h | |
parent | car AI revision (diff) | |
download | re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.gz re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.bz2 re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.lz re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.xz re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.tar.zst re3-9bb8ebaa1011dc1dc70e3d5bf70c9a55c44b976c.zip |
Diffstat (limited to '')
-rw-r--r-- | src/collision/CompressedVector.h | 36 |
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 |