Files
ss/src/nw4r/g3d/g3d_anmscn.cpp
T
Elijah Thomas cec09ad023 g3d initial pullover (#115)
* g3d Headers

* initial g3d source files -- NOT YET FIXED

* change ResFile static_cast to explicit ctor
2025-02-09 12:40:41 -05:00

70 lines
2.1 KiB
C++

#include <nw4r/g3d.h>
#include <algorithm>
namespace nw4r {
namespace g3d {
void AnmScn::GetLightSetting(LightSetting* pSetting) {
const u32 numLightSet = GetLightSetMaxRefNumber();
const u32 numAmbLight = GetAmbLightMaxRefNumber();
const u32 numDiffLight = GetDiffuseLightMaxRefNumber();
if (numLightSet > 0) {
const u32 numLightSetObj = pSetting->GetNumLightSet();
const u32 numLoadableSet = std::min(numLightSet, numLightSetObj);
for (u32 i = 0; i < numLoadableSet; i++) {
LightSet set = pSetting->GetLightSet(i);
GetLightSet(set, i);
}
}
if (numAmbLight > 0) {
AmbLightObj* pAmbObjArray = pSetting->GetAmbLightObjArray();
const u32 numAmbObj = pSetting->GetNumLightObj();
const u32 numLoadableAmb = std::min(numAmbLight, numAmbObj);
for (u32 i = 0; i < numLoadableAmb; i++) {
AmbLightObj* pAmbObj = &pAmbObjArray[i];
*reinterpret_cast<u32*>(&pAmbObj->r) = GetAmbLightColor(i);
}
}
if (numDiffLight > 0) {
LightObj* pLightObjArray = pSetting->GetLightObjArray();
const u32 numLightObj = pSetting->GetNumLightObj();
const u32 numSpecLight = GetNumSpecularLight();
const u32 numLight = numDiffLight + numSpecLight;
const u32 numLoadableDiffLight = std::min(numDiffLight, numLightObj);
const u32 numLoadableLight = std::min(numLight, numLightObj);
for (u32 i = 0; i < numLoadableDiffLight; i++) {
LightObj* pObj = &pLightObjArray[i];
pObj->Disable();
}
for (u32 i = 0; i < numLoadableDiffLight; i++) {
LightObj* pDiffObj = &pLightObjArray[i];
LightObj* pSpecObj = NULL;
if (pDiffObj->IsEnable()) {
continue;
}
if (HasSpecularLight(i)) {
const u32 specId = GetSpecularLightID(i);
if (specId < numLoadableLight) {
pSpecObj = &pLightObjArray[specId];
}
}
GetLight(pDiffObj, pSpecObj, i);
}
}
}
} // namespace g3d
} // namespace nw4r