mirror of
https://github.com/zeldaret/ss
synced 2026-06-30 03:18:55 -04:00
cec09ad023
* g3d Headers * initial g3d source files -- NOT YET FIXED * change ResFile static_cast to explicit ctor
70 lines
2.1 KiB
C++
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
|