#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(); } }