SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
KCollisionPlus.cpp
1#include "Game/Map/KCollision.hpp"
2
3/*bool KCollisionServer::isInsideMinMaxInLocalSpace(const V3u &point) const {
4 bool inside = false;
5 bool bVar1 = false;
6
7 if ((point.x & mFile->mXMask) == 0 && (point.y & mFile->mYMask) == 0) {
8 bVar1 = true;
9 }
10
11 if (!bVar1) {
12 return inside;
13 }
14
15 if ((point.z & mFile->mZMask) != 0) {
16 return inside;
17 }
18
19 return true;
20}*/
21
22bool KCollisionServer::outCheck(const TVec3f *pPosA, const TVec3f *pPosB, V3u *pPointA, V3u *pPointB) const {
23 objectSpaceToLocalSpace(pPointA, *pPosA);
24 objectSpaceToLocalSpace(pPointB, *pPosB);
25
26 if (pPointA->x < 0) {
27 pPointA->x = 0;
28 }
29
30 if (pPointA->y < 0) {
31 pPointA->y = 0;
32 }
33
34 if (pPointA->z < 0) {
35 pPointA->z = 0;
36 }
37
38 s32 invertedXMask = ~mFile->mXMask;
39
40 if (invertedXMask < pPointB->x) {
41 pPointB->x = invertedXMask;
42 }
43
44 s32 invertedYMask = ~mFile->mYMask;
45
46 if (invertedYMask < pPointB->y) {
47 pPointB->y = invertedYMask;
48 }
49
50 s32 invertedZMask = ~mFile->mZMask;
51
52 if (invertedZMask < pPointB->z) {
53 pPointB->z = invertedZMask;
54 }
55
56 if (pPointB->x < pPointA->x || pPointB->y < pPointA->y || pPointB->z < pPointA->z) {
57 return false;
58 }
59
60 return true;
61}
62
63void KCollisionServer::objectSpaceToLocalSpace(V3u *pPoint, const TVec3f &rPos) const {
64 pPoint->x = static_cast<s32>(rPos.x - mFile->mMin.x);
65 pPoint->y = static_cast<s32>(rPos.y - mFile->mMin.y);
66 pPoint->z = static_cast<s32>(rPos.z - mFile->mMin.z);
67}