diff options
author | Sergeanur <s.anureev@yandex.ua> | 2020-11-14 21:13:32 +0100 |
---|---|---|
committer | Sergeanur <s.anureev@yandex.ua> | 2020-11-15 18:51:35 +0100 |
commit | a6f5f4634c63a515196a0f650682953356cb8e18 (patch) | |
tree | 806ca1627dbab6626634822037688aff376038c2 /src/collision/CompressedVector.h | |
parent | Merge pull request #797 from theR4K/master (diff) | |
download | re3-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.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 |