mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2024-12-28 00:15:06 +00:00
f2fb3d6de8
NIFFile might not always be created from a file or stream containing NIF data. Basically there are 2 different responsibilities for this class: 1. Read NIF file 2. Provide input for nifosg and bulletnifloader. Remove no longer needed NIFFileMock since the state of NIFFfile can be initialized independently from reading NIF file.
87 lines
2.2 KiB
C++
87 lines
2.2 KiB
C++
#include "effect.hpp"
|
|
|
|
#include "controlled.hpp"
|
|
#include "node.hpp"
|
|
|
|
namespace Nif
|
|
{
|
|
|
|
void NiDynamicEffect::read(NIFStream* nif)
|
|
{
|
|
Node::read(nif);
|
|
if (nif->getVersion() >= nif->generateVersion(10, 1, 0, 106)
|
|
&& nif->getBethVersion() < NIFFile::BethVersion::BETHVER_FO4)
|
|
nif->getBoolean(); // Switch state
|
|
unsigned int numAffectedNodes = nif->getUInt();
|
|
for (unsigned int i = 0; i < numAffectedNodes; ++i)
|
|
nif->getUInt(); // ref to another Node
|
|
}
|
|
|
|
void NiLight::read(NIFStream* nif)
|
|
{
|
|
NiDynamicEffect::read(nif);
|
|
|
|
dimmer = nif->getFloat();
|
|
ambient = nif->getVector3();
|
|
diffuse = nif->getVector3();
|
|
specular = nif->getVector3();
|
|
}
|
|
|
|
void NiTextureEffect::read(NIFStream* nif)
|
|
{
|
|
NiDynamicEffect::read(nif);
|
|
|
|
// Model Projection Matrix
|
|
nif->skip(3 * 3 * sizeof(float));
|
|
|
|
// Model Projection Transform
|
|
nif->skip(3 * sizeof(float));
|
|
|
|
// Texture Filtering
|
|
nif->skip(4);
|
|
|
|
// Max anisotropy samples
|
|
if (nif->getVersion() >= NIFStream::generateVersion(20, 5, 0, 4))
|
|
nif->skip(2);
|
|
|
|
clamp = nif->getUInt();
|
|
|
|
textureType = (TextureType)nif->getUInt();
|
|
|
|
coordGenType = (CoordGenType)nif->getUInt();
|
|
|
|
texture.read(nif);
|
|
|
|
nif->skip(1); // Use clipping plane
|
|
nif->skip(16); // Clipping plane dimensions vector
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 2, 0, 0))
|
|
nif->skip(4); // PS2-specific shorts
|
|
if (nif->getVersion() <= NIFStream::generateVersion(4, 1, 0, 12))
|
|
nif->skip(2); // Unknown short
|
|
}
|
|
|
|
void NiTextureEffect::post(Reader& nif)
|
|
{
|
|
NiDynamicEffect::post(nif);
|
|
texture.post(nif);
|
|
}
|
|
|
|
void NiPointLight::read(NIFStream* nif)
|
|
{
|
|
NiLight::read(nif);
|
|
|
|
constantAttenuation = nif->getFloat();
|
|
linearAttenuation = nif->getFloat();
|
|
quadraticAttenuation = nif->getFloat();
|
|
}
|
|
|
|
void NiSpotLight::read(NIFStream* nif)
|
|
{
|
|
NiPointLight::read(nif);
|
|
|
|
cutoff = nif->getFloat();
|
|
exponent = nif->getFloat();
|
|
}
|
|
|
|
}
|