mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-10 03:05:19 -04:00
c_bg_w 99%
This commit is contained in:
@@ -19,6 +19,7 @@ public:
|
||||
f32 GetNowY() const { return mNowY; }
|
||||
void SetNowY(f32 y) { mNowY = y; }
|
||||
cXyz* GetPointP() { return &m_pos; }
|
||||
u32 GetGndPrecheck() const { return mGndPrecheck; }
|
||||
u32 GetWallPrecheck() const { return mWallPrecheck; }
|
||||
void OffWall() { mFlag &= ~2; }
|
||||
|
||||
|
||||
@@ -139,6 +139,7 @@ class cBgW : public cBgW_BgId {
|
||||
public:
|
||||
enum Flags_e {
|
||||
MOVE_BG_e = 0x1,
|
||||
NO_CALC_VTX_e = 0x2,
|
||||
NO_VTX_TBL_e = 0x10,
|
||||
GLOBAL_e = 0x20,
|
||||
UNK40_e = 0x40,
|
||||
@@ -198,19 +199,14 @@ public:
|
||||
|
||||
void SetPriority(PRIORITY priority) { mWallCorrectPriority = priority; }
|
||||
void SetLock() { mFlags |= LOCK_e; }
|
||||
|
||||
void ChkFlush() {}
|
||||
void ChkGroundRegist() {}
|
||||
void ChkLock() {}
|
||||
bool ChkLock() { return mFlags & LOCK_e; }
|
||||
bool ChkMoveBg() { return mFlags & MOVE_BG_e; }
|
||||
void ChkNoCalcVtx() {}
|
||||
void SetNoCalcVtx() { mFlags |= NO_CALC_VTX_e; }
|
||||
void ClrNoCalcVtx() { mFlags &= ~NO_CALC_VTX_e; }
|
||||
bool ChkNoCalcVtx() { return mFlags & NO_CALC_VTX_e; }
|
||||
BOOL ChkPriority(int prio) { return mWallCorrectPriority == prio; }
|
||||
void ChkRoofRegist() {}
|
||||
void ChkThrough() {}
|
||||
void ChkWallRegist() {}
|
||||
void ClrNoCalcVtx() {}
|
||||
void GetBaseMtxP() {}
|
||||
void GetOldInvMtx(float(*)[4]) const {}
|
||||
|
||||
Mtx* GetBaseMtxP() { return pm_base; }
|
||||
u32 GetPolyInfId(int poly_index) const {
|
||||
JUT_ASSERT(0x2f1, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
|
||||
return pm_bgd->m_t_tbl[poly_index].id;
|
||||
@@ -231,15 +227,27 @@ public:
|
||||
JUT_ASSERT(0x307, 0 <= id && id < pm_bgd->m_ti_num);
|
||||
return pm_bgd->m_ti_tbl[id].mPolyInf3;
|
||||
}
|
||||
void GetVtxNum() const {}
|
||||
void GetVtxTbl() const {}
|
||||
void GroundCross(cBgS_GndChk*) {}
|
||||
void LineCheck(cBgS_LinChk*) {}
|
||||
int GetVtxNum() const { return pm_bgd->m_v_num; }
|
||||
Vec* GetVtxTbl() const { return pm_vtx_tbl; }
|
||||
bool GroundCross(cBgS_GndChk* chk) {
|
||||
return GroundCrossGrpRp(chk, m_rootGrpIdx, 1);
|
||||
}
|
||||
bool LineCheck(cBgS_LinChk* chk) {
|
||||
return LineCheckGrpRp(chk, m_rootGrpIdx, 1);
|
||||
}
|
||||
|
||||
void GetOldInvMtx(float(*)[4]) const {}
|
||||
bool ChkFlush() { return mIgnorePlaneType & 8; }
|
||||
void ChkGroundRegist() {}
|
||||
void ChkRoofRegist() {}
|
||||
void ChkThrough() {}
|
||||
void ChkWallRegist() {}
|
||||
void OffRoofRegist() {}
|
||||
void SetBaseMtxP(float(*)[3][4]) {}
|
||||
void SetNoCalcVtx() {}
|
||||
void SetVtxTbl(Vec*) {}
|
||||
void ShdwDraw(cBgS_ShdwDraw*) {}
|
||||
void SetBaseMtxP(Mtx* mtx_p) { pm_base = mtx_p; }
|
||||
void SetVtxTbl(Vec* v) { pm_vtx_tbl = v; }
|
||||
void ShdwDraw(cBgS_ShdwDraw* shdw) {
|
||||
ShdwDrawGrpRp(shdw, m_rootGrpIdx);
|
||||
}
|
||||
|
||||
virtual ~cBgW();
|
||||
virtual u32 GetGrpToRoomIndex(int) const;
|
||||
@@ -270,8 +278,8 @@ public:
|
||||
/* 0xA4 */ int m_rootGrpIdx;
|
||||
};
|
||||
|
||||
bool cBgW_CheckBGround(f32 a1);
|
||||
bool cBgW_CheckBRoof(f32 a1);
|
||||
bool cBgW_CheckBWall(f32 a1);
|
||||
bool cBgW_CheckBGround(f32 ny);
|
||||
bool cBgW_CheckBRoof(f32 ny);
|
||||
bool cBgW_CheckBWall(f32 ny);
|
||||
|
||||
#endif /* C_BG_W_H */
|
||||
|
||||
@@ -56,6 +56,19 @@ public:
|
||||
mMax.y = -1000000000.0f;
|
||||
mMax.x = -1000000000.0f;
|
||||
}
|
||||
bool CrossY(const cXyz* v) const {
|
||||
if (mMin.x > v->x || mMax.x < v->x || mMin.z > v->z || mMax.z < v->z) {
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
bool UnderPlaneYUnder(f32 y) const {
|
||||
return mMin.y < y;
|
||||
}
|
||||
bool TopPlaneYUnder(f32 y) const {
|
||||
return mMax.y < y;
|
||||
}
|
||||
}; // Size = 0x1C
|
||||
|
||||
STATIC_ASSERT(0x1C == sizeof(cM3dGAab));
|
||||
|
||||
@@ -113,9 +113,9 @@ bool cBgS::LineCross(cBgS_LinChk* chk) {
|
||||
chk->ClrHit();
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
cBgS_ChkElm* elm = &m_chk_element[bg_index];
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
chk->PreCalc();
|
||||
if (elm->m_bgw_base_ptr->LineCheckGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
|
||||
if (elm->m_bgw_base_ptr->LineCheck(chk)) {
|
||||
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
|
||||
ret = true;
|
||||
}
|
||||
@@ -134,8 +134,8 @@ f32 cBgS::GroundCross(cBgS_GndChk* chk) {
|
||||
chk->mGndPrecheck = (chk->mFlag & 0x01);
|
||||
cBgS_ChkElm* elm = m_chk_element;
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++, elm++) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
if (elm->m_bgw_base_ptr->GroundCrossGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
if (elm->m_bgw_base_ptr->GroundCross(chk)) {
|
||||
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
|
||||
}
|
||||
}
|
||||
@@ -258,7 +258,7 @@ void cBgS::Move() {
|
||||
void cBgS::ShdwDraw(cBgS_ShdwDraw* shdw) {
|
||||
for (s32 i = 0; i < (s32)ARRAY_SIZE(m_chk_element); i++)
|
||||
if (m_chk_element[i].ChkUsed())
|
||||
m_chk_element[i].m_bgw_base_ptr->ShdwDrawGrpRp(shdw, m_chk_element[i].m_bgw_base_ptr->m_rootGrpIdx);
|
||||
m_chk_element[i].m_bgw_base_ptr->ShdwDraw(shdw);
|
||||
}
|
||||
|
||||
/* 802471E8-80247304 .text GetGrpInf__4cBgSCFR13cBgS_PolyInfoi */
|
||||
|
||||
@@ -77,7 +77,7 @@ bool cBgW::SetVtx() {
|
||||
if (mFlags & NO_VTX_TBL_e) {
|
||||
pm_vtx_tbl = NULL;
|
||||
} else {
|
||||
if (mFlags & MOVE_BG_e) {
|
||||
if (ChkMoveBg()) {
|
||||
pm_vtx_tbl = new Vec[pm_bgd->m_v_num];
|
||||
if (pm_vtx_tbl == NULL)
|
||||
return true;
|
||||
@@ -138,9 +138,16 @@ void cBgW::BlckConnect(u16* rwg, int* prev, int i_no) {
|
||||
pm_rwg[*prev].next = -1;
|
||||
}
|
||||
|
||||
inline bool cBgW_CheckBGround(f32 ny) {
|
||||
return ny >= 0.5f;
|
||||
}
|
||||
|
||||
inline bool cBgW_CheckBRoof(f32 ny) {
|
||||
return ny < (-4.0f / 5.0f);
|
||||
}
|
||||
|
||||
/* 80247A24-80247BF8 .text ClassifyPlane__4cBgWFv */
|
||||
void cBgW::ClassifyPlane() {
|
||||
/* Nonmatching */
|
||||
if (pm_vtx_tbl == NULL)
|
||||
return;
|
||||
|
||||
@@ -150,7 +157,11 @@ void cBgW::ClassifyPlane() {
|
||||
int roof, wall, ground;
|
||||
for (; i < pm_bgd->m_b_num; i++) {
|
||||
s32 startTri = pm_bgd->m_b_tbl[i].startTri;
|
||||
s32 lastTri = (i != pm_bgd->m_b_num - 1) ? pm_bgd->m_b_tbl[i + 1].startTri - 1 : pm_bgd->m_t_num - 1;
|
||||
s32 lastTri;
|
||||
if (i != pm_bgd->m_b_num - 1)
|
||||
lastTri = pm_bgd->m_b_tbl[i + 1].startTri - 1;
|
||||
else
|
||||
lastTri = pm_bgd->m_t_num - 1;
|
||||
|
||||
pm_blk[i].roof = 0xFFFF;
|
||||
pm_blk[i].wall = 0xFFFF;
|
||||
@@ -163,19 +174,20 @@ void cBgW::ClassifyPlane() {
|
||||
for (s32 j = startTri; j <= lastTri; j++) {
|
||||
cBgW_TriElm* tri_elm = &pm_tri[j];
|
||||
|
||||
/* cM3d_isZero */
|
||||
f32 ny = tri_elm->m_plane.mNormal.y;
|
||||
if (fabsf(tri_elm->m_plane.mNormal.x) < eps && fabsf(tri_elm->m_plane.mNormal.y) < eps && fabsf(tri_elm->m_plane.mNormal.z) < eps)
|
||||
continue;
|
||||
|
||||
if (ny >= 0.5f) {
|
||||
if (cBgW_CheckBGround(ny)) {
|
||||
if (!(mIgnorePlaneType & 1))
|
||||
BlckConnect(&pm_blk[i].ground, &ground, i);
|
||||
} else if (ny < -0.8f) {
|
||||
BlckConnect(&pm_blk[i].ground, &ground, j);
|
||||
} else if (cBgW_CheckBRoof(ny)) {
|
||||
if (!(mIgnorePlaneType & 4))
|
||||
BlckConnect(&pm_blk[i].roof, &roof, i);
|
||||
BlckConnect(&pm_blk[i].roof, &roof, j);
|
||||
} else {
|
||||
if (!(mIgnorePlaneType & 2))
|
||||
BlckConnect(&pm_blk[i].wall, &wall, i);
|
||||
BlckConnect(&pm_blk[i].wall, &wall, j);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -400,9 +412,9 @@ static void dummy() {
|
||||
|
||||
/* 802485FC-80248868 .text LineCheckRp__4cBgWFP11cBgS_LinChki */
|
||||
bool cBgW::LineCheckRp(cBgS_LinChk* chk, int i) {
|
||||
/* Nonmatching */
|
||||
|
||||
if (!pm_node_tree[i].Cross(chk->GetLinP()))
|
||||
cBgW_NodeTree* node = &pm_node_tree[i];
|
||||
// node->Cross(chk->GetLinP());
|
||||
if (!cM3d_Cross_MinMaxBoxLine(node->GetMinP(), node->GetMaxP(), chk->GetLinP()->GetStartP(), chk->GetLinP()->GetEndP()))
|
||||
return false;
|
||||
|
||||
cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i];
|
||||
@@ -416,6 +428,7 @@ bool cBgW::LineCheckRp(cBgS_LinChk* chk, int i) {
|
||||
ret = true;
|
||||
return ret;
|
||||
} else {
|
||||
// was this manually unrolled?
|
||||
if (tree->mChild[0] != 0xFFFF && LineCheckRp(chk, tree->mChild[0]))
|
||||
ret = true;
|
||||
if (tree->mChild[1] != 0xFFFF && LineCheckRp(chk, tree->mChild[1]))
|
||||
@@ -438,7 +451,6 @@ bool cBgW::LineCheckRp(cBgS_LinChk* chk, int i) {
|
||||
|
||||
/* 80248868-8024898C .text LineCheckGrpRp__4cBgWFP11cBgS_LinChkii */
|
||||
bool cBgW::LineCheckGrpRp(cBgS_LinChk* chk, int grp_id, int depth) {
|
||||
/* Nonmatching */
|
||||
if (ChkGrpThrough(grp_id, chk->GetGrpPassChk(), depth))
|
||||
return false;
|
||||
|
||||
@@ -508,27 +520,76 @@ bool cBgW::RwgGroundCheckWall(u16 poly_index, cBgS_GndChk* chk) {
|
||||
}
|
||||
|
||||
/* 80248C38-802491F4 .text GroundCrossRp__4cBgWFP11cBgS_GndChki */
|
||||
bool cBgW::GroundCrossRp(cBgS_GndChk*, int) {
|
||||
/* Nonmatching */
|
||||
bool cBgW::GroundCrossRp(cBgS_GndChk* chk, int i) {
|
||||
bool ret = false;
|
||||
cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i];
|
||||
if (tree->mFlag & 1) {
|
||||
if (chk->GetGndPrecheck() && pm_blk[tree->mBlock].ground != 0xFFFF && RwgGroundCheckGnd(pm_blk[tree->mBlock].ground, chk))
|
||||
ret = true;
|
||||
if (chk->GetWallPrecheck() && pm_blk[tree->mBlock].wall != 0xFFFF && RwgGroundCheckWall(pm_blk[tree->mBlock].wall, chk))
|
||||
ret = true;
|
||||
return ret;
|
||||
} else {
|
||||
if (tree->mChild[2] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[2]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[2]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (tree->mChild[3] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[3]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[3]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (tree->mChild[6] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[6]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[6]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (tree->mChild[7] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[7]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[7]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (tree->mChild[0] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[0]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[0]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (tree->mChild[1] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[1]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[1]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (tree->mChild[4] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[4]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[4]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
if (tree->mChild[5] != 0xFFFF) {
|
||||
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[5]];
|
||||
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[5]))
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
/* 802491F4-80249368 .text GroundCrossGrpRp__4cBgWFP11cBgS_GndChkii */
|
||||
bool cBgW::GroundCrossGrpRp(cBgS_GndChk* chk, int grp_id, int depth) {
|
||||
/* Nonmatching */
|
||||
if (ChkGrpThrough(grp_id, chk->GetGrpPassChk(), depth))
|
||||
return false;
|
||||
|
||||
bool insideXZ;
|
||||
cBgW_GrpElm* grp = &pm_grp[grp_id];
|
||||
|
||||
// is this an inline? also seems to be used in GroundCrossGrp
|
||||
if (grp->aab.mMin.x > chk->GetPointP()->x || grp->aab.mMax.x < chk->GetPointP()->x ||
|
||||
grp->aab.mMin.z > chk->GetPointP()->z || grp->aab.mMax.z < chk->GetPointP()->z)
|
||||
insideXZ = false;
|
||||
else
|
||||
insideXZ = true;
|
||||
|
||||
if (!insideXZ || (grp->aab.mMin.y > chk->GetPointP()->y || grp->aab.mMax.y < chk->GetNowY()))
|
||||
if (!grp->aab.CrossY(chk->GetPointP()) || !grp->aab.UnderPlaneYUnder(chk->GetPointP()->y) || grp->aab.TopPlaneYUnder(chk->mNowY))
|
||||
return false;
|
||||
|
||||
bool ret = false;
|
||||
@@ -559,6 +620,38 @@ void cBgW::CopyOldMtx() {
|
||||
/* 802493B4-80249584 .text Move__4cBgWFv */
|
||||
void cBgW::Move() {
|
||||
/* Nonmatching */
|
||||
if (!ChkLock() && ChkMoveBg()) {
|
||||
if (!ChkNoCalcVtx()) {
|
||||
if (mMoveCounter >= 0xFF ||
|
||||
mCurMtx[0][0] != (*pm_base)[0][0] || mCurMtx[0][1] != (*pm_base)[0][1] || mCurMtx[0][2] != (*pm_base)[0][2] ||
|
||||
mCurMtx[1][0] != (*pm_base)[1][0] || mCurMtx[1][1] != (*pm_base)[1][1] || mCurMtx[1][2] != (*pm_base)[1][2] ||
|
||||
mCurMtx[2][0] != (*pm_base)[2][0] || mCurMtx[2][1] != (*pm_base)[2][1] || mCurMtx[2][2] != (*pm_base)[2][2]) {
|
||||
mbNeedsFullTransform = true;
|
||||
} else if (mCurMtx[0][3] == (*pm_base)[0][3] && mCurMtx[1][3] == (*pm_base)[1][3] && mCurMtx[2][3] == (*pm_base)[2][3]) {
|
||||
mDoMtx_copy(*pm_base, mOldMtx);
|
||||
if (!ChkFlush())
|
||||
return;
|
||||
} else {
|
||||
mTransVel.x = mCurMtx[0][3] - (*pm_base)[0][3];
|
||||
mTransVel.y = mCurMtx[1][3] - (*pm_base)[1][3];
|
||||
mTransVel.z = mCurMtx[2][3] - (*pm_base)[2][3];
|
||||
mbNeedsFullTransform = false;
|
||||
}
|
||||
|
||||
if (mMoveCounter >= 0xFF) {
|
||||
mMoveCounter = 0;
|
||||
} else {
|
||||
mMoveCounter++;
|
||||
}
|
||||
|
||||
GlobalVtx();
|
||||
}
|
||||
|
||||
CopyOldMtx();
|
||||
CalcPlane();
|
||||
ClassifyPlane();
|
||||
MakeNodeTree();
|
||||
}
|
||||
}
|
||||
|
||||
/* 80249584-80249698 .text RwgShdwDraw__4cBgWFiP13cBgS_ShdwDraw */
|
||||
|
||||
+11
-11
@@ -53,7 +53,7 @@ bool dBgS::Regist(cBgW* bgw, fopAc_ac_c* ac) {
|
||||
if (bgw == NULL)
|
||||
return true;
|
||||
|
||||
if (ac != NULL && !!(bgw->mFlags & cBgW::MOVE_BG_e)) {
|
||||
if (ac != NULL && bgw->ChkMoveBg()) {
|
||||
dBgW* bgwp = (dBgW*)bgw;
|
||||
bgwp->mOldRotY = ac->shape_angle.y;
|
||||
bgwp->mRoomNo = fopAcM_GetRoomNo(ac);
|
||||
@@ -66,9 +66,9 @@ bool dBgS::Regist(cBgW* bgw, fopAc_ac_c* ac) {
|
||||
bool dBgS::ChkMoveBG(cBgS_PolyInfo& polyInfo) {
|
||||
dBgW* bgwp = (dBgW*)dComIfG_Bgsp()->GetBgWPointer(polyInfo);
|
||||
if (bgwp != NULL) {
|
||||
if (bgwp->mFlags & cBgW::LOCK_e)
|
||||
if (bgwp->ChkLock())
|
||||
return false;
|
||||
if (bgwp->mFlags & cBgW::MOVE_BG_e)
|
||||
if (bgwp->ChkMoveBg())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -78,7 +78,7 @@ bool dBgS::ChkMoveBG(cBgS_PolyInfo& polyInfo) {
|
||||
bool dBgS::ChkMoveBG_NoDABg(cBgS_PolyInfo& polyInfo) {
|
||||
dBgW* bgwp = (dBgW*)dComIfG_Bgsp()->GetBgWPointer(polyInfo);
|
||||
if (bgwp != NULL) {
|
||||
if (bgwp->mFlags & cBgW::MOVE_BG_e)
|
||||
if (bgwp->ChkMoveBg())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -316,7 +316,7 @@ bool dBgS::LineCrossNonMoveBG(cBgS_LinChk* chk) {
|
||||
chk->ClrHit();
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
cBgS_ChkElm* elm = &m_chk_element[bg_index];
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id) && !elm->m_bgw_base_ptr->ChkMoveBg()) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id) && !elm->m_bgw_base_ptr->ChkMoveBg()) {
|
||||
chk->PreCalc();
|
||||
if (elm->m_bgw_base_ptr->LineCheckGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
|
||||
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
|
||||
@@ -340,7 +340,7 @@ void dBgS::WallCorrect(dBgS_Acch* acch) {
|
||||
for (s32 prio = 0; prio < 3; prio++) {
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
elm = &m_chk_element[bg_index];
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL) {
|
||||
acch->SetNowActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
|
||||
if (!acch->ChkSameActorPid(elm->m_actor_id)) {
|
||||
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
|
||||
@@ -359,7 +359,7 @@ f32 dBgS::RoofChk(dBgS_RoofChk* chk) {
|
||||
cBgS_ChkElm* elm;
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
elm = &m_chk_element[bg_index];
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
|
||||
if (bgwp->RoofChkGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
|
||||
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
|
||||
@@ -375,7 +375,7 @@ bool dBgS::SplGrpChk(dBgS_SplGrpChk* chk) {
|
||||
chk->Init();
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
cBgS_ChkElm* elm = &m_chk_element[bg_index];
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
|
||||
if (bgwp->SplGrpChkGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
|
||||
ret = true;
|
||||
@@ -394,7 +394,7 @@ bool dBgS::SphChk(dBgS_SphChk* chk, void* user) {
|
||||
chk->Init();
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
elm = &m_chk_element[bg_index];
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
|
||||
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
|
||||
if (bgwp->SphChkGrpRp(chk, user, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
|
||||
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
|
||||
@@ -417,7 +417,7 @@ bool dBgS::WallCrrPos(dBgS_CrrPos* crr) {
|
||||
for (s32 prio = 0; prio < 3; prio++) {
|
||||
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
|
||||
elm = &m_chk_element[bg_index];
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL) {
|
||||
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL) {
|
||||
if (crr->ChkSameActorPid(elm->m_actor_id))
|
||||
continue;
|
||||
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
|
||||
@@ -489,7 +489,7 @@ void dBgS_MoveBGProc_Typical(dBgW* pbgw, void* user, cBgS_PolyInfo& polyInfo, bo
|
||||
if (MTXInverse(pbgw->mOldMtx, inv)) {
|
||||
cXyz local, newPos;
|
||||
MTXMultVec(inv, pos, &local);
|
||||
MTXMultVec(*pbgw->pm_base, &local, &newPos);
|
||||
MTXMultVec(*pbgw->GetBaseMtxP(), &local, &newPos);
|
||||
*pos = newPos;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user