2023-12-13 00:40:16 -05:00
|
|
|
#include "Game/Map/OceanRing.hpp"
|
2022-11-17 03:47:16 -05:00
|
|
|
|
|
|
|
|
void OceanRing::initAfterPlacement() {
|
|
|
|
|
for (s32 i = 0; i < mWaterPointNum; i++) {
|
|
|
|
|
mWaterPoints[i]->initAfterPlacement();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool OceanRing::isInWater(const TVec3f &rVec) const {
|
|
|
|
|
if (!mClippingBox.intersectsPoint(rVec)) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TVec3f nearPos;
|
2023-02-13 03:33:10 -05:00
|
|
|
f32 pos = calcNearestPos(rVec, &nearPos, nullptr, nullptr);
|
2022-11-17 03:47:16 -05:00
|
|
|
f32 w = (mWidthMax * calcCurrentWidthRate(pos));
|
|
|
|
|
|
|
|
|
|
if (PSVECDistance(nearPos.toCVec(), rVec.toCVec()) > w) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TVec3f stack_14(rVec);
|
|
|
|
|
stack_14.subtract(nearPos);
|
|
|
|
|
TVec3f gravVec;
|
2023-02-13 03:33:10 -05:00
|
|
|
MR::calcGravityVector(this, rVec, &gravVec, nullptr, 0);
|
2022-11-17 03:47:16 -05:00
|
|
|
return !(stack_14.dot(gravVec) < 0.0f);
|
|
|
|
|
}
|