Skip to content

Commit c454675

Browse files
committed
Merge branch 'nilightcolorcontroller' into 'master'
Give NiLightColorController its own struct See merge request OpenMW/openmw!4472
2 parents 23a46a1 + a923e31 commit c454675

File tree

3 files changed

+37
-3
lines changed

3 files changed

+37
-3
lines changed

components/nif/controller.cpp

+21-1
Original file line numberDiff line numberDiff line change
@@ -231,12 +231,32 @@ namespace Nif
231231
mCollider.post(nif);
232232
}
233233

234+
void NiLightColorController::read(NIFStream* nif)
235+
{
236+
NiPoint3InterpController::read(nif);
237+
238+
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
239+
mMode = static_cast<Mode>(nif->get<uint16_t>());
240+
else
241+
mMode = static_cast<Mode>((mFlags >> 4) & 1);
242+
243+
if (nif->getVersion() <= NIFStream::generateVersion(10, 1, 0, 103))
244+
mData.read(nif);
245+
}
246+
247+
void NiLightColorController::post(Reader& nif)
248+
{
249+
NiPoint3InterpController::post(nif);
250+
251+
mData.post(nif);
252+
}
253+
234254
void NiMaterialColorController::read(NIFStream* nif)
235255
{
236256
NiPoint3InterpController::read(nif);
237257

238258
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
239-
mTargetColor = static_cast<TargetColor>(nif->get<uint16_t>() & 3);
259+
mTargetColor = static_cast<TargetColor>(nif->get<uint16_t>());
240260
else
241261
mTargetColor = static_cast<TargetColor>((mFlags >> 4) & 3);
242262

components/nif/controller.hpp

+15
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,21 @@ namespace Nif
161161
};
162162
using NiBSPArrayController = NiParticleSystemController;
163163

164+
struct NiLightColorController : public NiPoint3InterpController
165+
{
166+
enum class Mode
167+
{
168+
DiffuseSpecular = 0,
169+
Ambient = 1,
170+
};
171+
172+
NiPosDataPtr mData;
173+
Mode mMode = Mode::DiffuseSpecular;
174+
175+
void read(NIFStream* nif) override;
176+
void post(Reader& nif) override;
177+
};
178+
164179
struct NiMaterialColorController : public NiPoint3InterpController
165180
{
166181
enum class TargetColor

components/nif/niffile.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,7 @@ namespace Nif
112112
{ "NiGeomMorpherController", &construct<NiGeomMorpherController, RC_NiGeomMorpherController> },
113113
{ "NiKeyframeController", &construct<NiKeyframeController, RC_NiKeyframeController> },
114114
{ "NiLookAtController", &construct<NiLookAtController, RC_NiLookAtController> },
115-
// FIXME: NiLightColorController should have its own struct
116-
{ "NiLightColorController", &construct<NiMaterialColorController, RC_NiLightColorController> },
115+
{ "NiLightColorController", &construct<NiLightColorController, RC_NiLightColorController> },
117116
{ "NiMaterialColorController", &construct<NiMaterialColorController, RC_NiMaterialColorController> },
118117
{ "NiPathController", &construct<NiPathController, RC_NiPathController> },
119118
{ "NiRollController", &construct<NiRollController, RC_NiRollController> },

0 commit comments

Comments
 (0)