#include "nw4r/g3d.h" // IWYU pragma: export #include 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(&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