mirror of
https://github.com/encounter/Petari.git
synced 2026-03-30 11:34:15 -07:00
56 lines
1.1 KiB
C++
56 lines
1.1 KiB
C++
#include "Game/AreaObj/CameraRepulsiveArea.hpp"
|
|
|
|
CameraRepulsiveArea::~CameraRepulsiveArea() {
|
|
|
|
}
|
|
|
|
CameraRepulsiveSphere::~CameraRepulsiveSphere() {
|
|
|
|
}
|
|
|
|
CameraRepulsiveCylinder::~CameraRepulsiveCylinder() {
|
|
|
|
}
|
|
|
|
TVec3f CameraRepulsiveSphere::getRepulsion(const TVec3f &rRep) {
|
|
TVec3f ret;
|
|
ret.x = 0.0f;
|
|
ret.y = 0.0f;
|
|
ret.z = 0.0f;
|
|
return ret;
|
|
}
|
|
|
|
TVec3f CameraRepulsiveCylinder::getRepulsion(const TVec3f &rRep) {
|
|
TVec3f position;
|
|
MR::calcCylinderPos(&position, this);
|
|
TVec3f upVec;
|
|
MR::calcCylinderUpVec(&upVec, this);
|
|
|
|
TVec3f ret(rRep);
|
|
ret -= position;
|
|
f32 dot = ret.dot(upVec);
|
|
TVec3f _14;
|
|
TVec3f _8(upVec);
|
|
_8.scale(dot);
|
|
ret -= _8;
|
|
|
|
PSVECCrossProduct(ret.toVec(), upVec.toVec(), _14.toVec());
|
|
f32 mag = PSVECMag(_14.toVec());
|
|
f32 radius = MR::getCylinderRadius(this);
|
|
|
|
f32 scale = (2.0f * mag) / radius;
|
|
|
|
// denom = scale^3
|
|
f32 denom = scale;
|
|
|
|
for (int i = 0; i < 2; i++) {
|
|
denom *= scale;
|
|
}
|
|
|
|
ret.scale(1.0f / denom);
|
|
return ret;
|
|
}
|
|
|
|
const char* CameraRepulsiveArea::getManagerName() const {
|
|
return "CameraRepulsiveArea";
|
|
} |