brief lightObject cleanup

This commit is contained in:
elijah-thomas774
2025-03-30 15:26:26 -04:00
parent 5f8c997d9d
commit 0913f06054
2 changed files with 37 additions and 53 deletions
+4 -5
View File
@@ -125,12 +125,11 @@ public:
void UpdatePosAt(LightObject &other) {
SetPosAt(other.mPos, other.mAt);
}
const GXColor &GetBlack() const {
return mBlack;
}
private:
/* 0x04 */ u16 mIndex;
/* 0x06 */ u16 field_0x06;
@@ -145,9 +144,9 @@ private:
/* 0x3D */ u8 field_0x3D;
/* 0x3E */ u8 mSpotFn;
/* 0x3F */ u8 mDistAttnFn;
/* 0x40 */ f32 field_0x40;
/* 0x44 */ f32 field_0x44;
/* 0x48 */ f32 field_0x48;
/* 0x40 */ f32 mCutoff;
/* 0x44 */ f32 mRefDist;
/* 0x48 */ f32 mRefBrightness;
/* 0x4C */ nw4r::math::VEC3 field_0x4C;
/* 0x58 */ nw4r::math::VEC3 field_0x58;
/* 0x64 */ f32 mShininess;
+33 -48
View File
@@ -47,9 +47,9 @@ LightObject::LightObject()
field_0x3D(1),
mSpotFn(GX_SP_OFF),
mDistAttnFn(GX_DA_OFF),
field_0x40(90.0f),
field_0x44(0.5f),
field_0x48(0.5f),
mCutoff(90.0f),
mRefDist(0.5f),
mRefBrightness(0.5f),
mShininess(16.0f),
mFlags(0x661) {}
@@ -61,18 +61,16 @@ void LightObject::Reset() {
field_0x30 = 1.0;
field_0x3C = 0;
field_0x3D = 1;
field_0x40 = 90.0;
field_0x44 = 0.5;
field_0x48 = 0.5;
mCutoff = 90.0;
mRefDist = 0.5;
mRefBrightness = 0.5;
mSpotFn = GX_SP_OFF;
mDistAttnFn = GX_DA_OFF;
mShininess = 16.0;
field_0x58.x = 1.0;
field_0x4C.x = 1.0;
field_0x58.z = 0.0;
field_0x4C.z = 0.0;
field_0x58.y = 0.0;
field_0x4C.y = 0.0;
field_0x4C.x = field_0x58.x = 1.0f;
field_0x4C.z = field_0x58.z = 0.0f;
field_0x4C.y = field_0x58.y = 0.0f;
}
void LightObject::Calc() {
@@ -100,9 +98,7 @@ void LightObject::CalcView(nw4r::math::MTX34 const &viewMtx) {
field_0x94.y = mViewPos.y = 0.0f;
field_0x94.z = mViewPos.z = 1.0f;
mViewPos.z *= mDist;
mViewAt.z = 0.0f;
mViewAt.y = 0.0f;
mViewAt.x = 0.0f;
mViewAt.x = mViewAt.y = mViewAt.z = 0.0f;
break;
}
case 2:
@@ -121,8 +117,7 @@ void LightObject::CalcView(nw4r::math::MTX34 const &viewMtx) {
nw4r::math::VEC3Scale(&field_0x6C, &angle, -1.0f);
PSVECNormalize(field_0x6C, field_0x6C);
} else {
field_0x6C.y = 0.0f;
field_0x6C.x = 0.0f;
field_0x6C.x = field_0x6C.y = 0.0f;
field_0x6C.z = 1.0f;
}
}
@@ -172,13 +167,13 @@ void LightObject::InitGX(GXLightObj *obj) const {
if ((mFlags & 0x80) != 0) {
GXInitLightAttnA(obj, field_0x4C.x, field_0x4C.y, field_0x4C.z);
} else {
GXInitLightSpot(obj, field_0x40 > 0.0f ? field_0x40 : 0.0001f, getSpotFn());
GXInitLightSpot(obj, mCutoff > 0.0f ? mCutoff : 0.0001f, getSpotFn());
}
if ((mFlags & 0x100) != 0) {
GXInitLightAttnK(obj, field_0x58.x, field_0x58.y, field_0x58.z);
} else {
GXInitLightDistAttn(obj, field_0x44 * getDistance(), field_0x48, getDistAttnFn());
GXInitLightDistAttn(obj, mRefDist * getDistance(), mRefBrightness, getDistAttnFn());
}
if ((mFlags & 0x800) != 0) {
@@ -207,13 +202,13 @@ void LightObject::CopyToG3D_World(nw4r::g3d::LightObj &g3dObj) const {
if ((mFlags & 0x80) != 0) {
g3dObj.InitLightAttnA(field_0x4C.x, field_0x4C.y, field_0x4C.z);
} else {
g3dObj.InitLightSpot(field_0x40 > 0.0f ? field_0x40 : 0.0001f, getSpotFn());
g3dObj.InitLightSpot(mCutoff > 0.0f ? mCutoff : 0.0001f, getSpotFn());
}
if ((mFlags & 0x100) != 0) {
g3dObj.InitLightAttnK(field_0x58.x, field_0x58.y, field_0x58.z);
} else {
g3dObj.InitLightDistAttn(field_0x44 * getDistance(), field_0x48, getDistAttnFn());
g3dObj.InitLightDistAttn(mRefDist * getDistance(), mRefBrightness, getDistAttnFn());
}
if ((mFlags & 0x800) != 0) {
@@ -229,7 +224,6 @@ void LightObject::CopyToG3D_View(nw4r::g3d::LightObj &g3dObj, const nw4r::math::
return;
}
// TODO
if (!((mFlags >> 11) & 1)) {
nw4r::math::VEC3 dir;
nw4r::math::VEC3 pos;
@@ -237,16 +231,12 @@ void LightObject::CopyToG3D_View(nw4r::g3d::LightObj &g3dObj, const nw4r::math::
case 1: {
nw4r::math::VEC3TransformNormal(&dir, &viewMtx, &field_0x94);
nw4r::math::VEC3Scale(&pos, &dir, -1e10f);
dir.z = 0.0f;
dir.y = 0.0f;
dir.x = 0.0f;
dir.x = dir.y = dir.z = 0.0f;
break;
}
case 0: {
PSMTXMultVec(viewMtx, mViewPos, pos);
dir.z = 0.0f;
dir.y = 0.0f;
dir.x = 0.0f;
dir.x = dir.y = dir.z = 0.0f;
break;
}
case 2: {
@@ -275,7 +265,6 @@ void LightObject::CopyFromG3D(
optObj->mFlags |= 2;
}
} else {
// TODO
ClearFlag2();
if (optObj != nullptr) {
optObj->ClearFlag2();
@@ -287,19 +276,17 @@ void LightObject::CopyFromG3D(
void LightObject::ApplyAnmResultInner(const nw4r::g3d::LightAnmResult &res) {
// TODO
mFlags = mFlags & 0xF07E;
field_0x40 = 90.0f;
field_0x44 = 0.5f;
field_0x48 = 0.5f;
mCutoff = 90.0f;
mRefDist = 0.5f;
mRefBrightness = 0.5f;
mSpotFn = GX_SP_OFF;
mDistAttnFn = GX_DA_OFF;
mShininess = 16.0f;
// ...
field_0x58.x = 1.0f;
field_0x4C.x = 1.0f;
field_0x58.z = 0.0f;
field_0x4C.z = 0.0f;
field_0x58.y = 0.0f;
field_0x4C.y = 0.0f;
field_0x4C.x = field_0x58.x = 1.0f;
field_0x4C.z = field_0x58.z = 0.0f;
field_0x4C.y = field_0x58.y = 0.0f;
if ((res.flags & nw4r::g3d::LightAnmResult::FLAG_COLOR_ENABLE) != 0) {
mFlags |= 0x200;
}
@@ -318,10 +305,10 @@ void LightObject::ApplyAnmResultA(const nw4r::g3d::LightAnmResult &res) {
field_0x3D = 0;
mWhite = res.color;
SetPosAt(res.pos, res.pos);
field_0x40 = 0.0f;
mCutoff = 0.0f;
mSpotFn = GX_SP_OFF;
field_0x44 = res.refDistance;
field_0x48 = res.refBrightness;
mRefDist = res.refDistance;
mRefBrightness = res.refBrightness;
mDistAttnFn = res.distFunc;
break;
}
@@ -338,10 +325,10 @@ void LightObject::ApplyAnmResultA(const nw4r::g3d::LightAnmResult &res) {
mWhite = res.color;
SetPosAt(res.pos, res.aim);
mSpotFn = res.spotFunc;
field_0x40 = res.cutoff;
mCutoff = res.cutoff;
mDistAttnFn = res.distFunc;
field_0x44 = res.refDistance;
field_0x48 = res.refBrightness;
mRefDist = res.refDistance;
mRefBrightness = res.refBrightness;
break;
}
}
@@ -370,9 +357,7 @@ void LightObject::CalcDirDist() {
if (mDist > 0.0f) {
nw4r::math::VEC3Scale(&mDir, &mDir, 1.0f / nw4r::math::FSqrt(mDist));
} else {
mDir.z = 0.0f;
mDir.y = 0.0f;
mDir.x = 0.0f;
mDir.x = mDir.y = mDir.z = 0.0f;
}
}