Files
Petari/source/Game/LiveActor/ClippingActorInfo.cpp

109 lines
2.4 KiB
C++

#include "Game/LiveActor/ClippingActorInfo.hpp"
#include "Game/LiveActor/ClippingJudge.hpp"
#include "Game/LiveActor/LiveActor.hpp"
#include "Game/Util.hpp"
ClippingActorInfo::ClippingActorInfo(LiveActor *pActor) {
mActor = pActor;
_4 = 0;
_8 = 0.0f;
mInfo = 0;
mFarClipLevel = 6;
_12 = -1;
_14 = 0;
setTypeToSphere(300.0f, 0);
}
void ClippingActorInfo::judgeClipping() {
if (isJudgedToClip()) {
if (!MR::isClipped(mActor)) {
mActor->startClipped();
}
}
else {
if (MR::isClipped(mActor)) {
mActor->endClipped();
}
}
}
/*
bool ClippingActorInfo::isJudgedToClip() const {
s32 farClipLevel = mFarClipLevel;
if (*_14 == 1) {
farClipLevel = 0;
}
f32 val = _8;
ClippingJudge* judge = MR::getClippingJudge();
return judge->isJudgedToClipFrustum(*_4, val, farClipLevel);
}
*/
bool ClippingActorInfo::isGroupClipping() const {
return mInfo;
}
void ClippingActorInfo::setTypeToSphere(f32 a1, const TVec3f *a2) {
_8 = a1;
if (!a2) {
_4 = &mActor->mPosition;
}
else {
_4 = a2;
}
}
#ifdef NON_MATCHING
void ClippingActorInfo::setGroupClippingNo(const JMapInfoIter &rIter) {
JMapIdInfo* id_info = new JMapIdInfo();
*id_info = MR::createJMapIdInfoFromClippingGroupId(rIter);
mInfo = id_info;
}
#endif
ClippingActorInfoList::ClippingActorInfoList(int a1) {
_0 = a1;
_4 = 0;
mClippingActorList = 0;
mClippingActorList = new ClippingActorInfo*[a1];
for (s32 i = 0; i < _0; i++) {
mClippingActorList[i] = 0;
}
}
void ClippingActorInfoList::add(ClippingActorInfo *pInfo) {
mClippingActorList[_4] = pInfo;
_4++;
}
ClippingActorInfo* ClippingActorInfoList::find(const LiveActor *pActor, s32 *pIndex) const {
for (s32 i = 0; i < _4; i++) {
ClippingActorInfo* inf = mClippingActorList[i];
if (inf->mActor == pActor) {
if (pIndex) {
*pIndex = i;
}
return mClippingActorList[i];
}
}
return mClippingActorList[0];
}
// ClippingActorInfoList::findOrNone
bool ClippingActorInfoList::isInList(const LiveActor *pActor) const {
for (s32 i = 0; i < _4; i++) {
ClippingActorInfo* inf = mClippingActorList[i];
if (inf->mActor == pActor) {
return true;
}
}
return false;
}