mirror of
https://gitlab.com/OpenMW/openmw.git
synced 2025-01-04 02:41:19 +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.
141 lines
3.6 KiB
C++
141 lines
3.6 KiB
C++
#include "controlled.hpp"
|
|
|
|
#include "data.hpp"
|
|
|
|
namespace Nif
|
|
{
|
|
|
|
void NiSourceTexture::read(NIFStream* nif)
|
|
{
|
|
Named::read(nif);
|
|
|
|
external = nif->getChar() != 0;
|
|
bool internal = false;
|
|
if (external)
|
|
filename = nif->getString();
|
|
else
|
|
{
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 0, 1, 3))
|
|
internal = nif->getChar();
|
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 0))
|
|
filename = nif->getString(); // Original file path of the internal texture
|
|
}
|
|
if (nif->getVersion() <= NIFStream::generateVersion(10, 0, 1, 3))
|
|
{
|
|
if (!external && internal)
|
|
data.read(nif);
|
|
}
|
|
else
|
|
{
|
|
data.read(nif);
|
|
}
|
|
|
|
pixel = nif->getUInt();
|
|
mipmap = nif->getUInt();
|
|
alpha = nif->getUInt();
|
|
|
|
// Renderer hints, typically of no use for us
|
|
/* bool mIsStatic = */ nif->getChar();
|
|
if (nif->getVersion() >= NIFStream::generateVersion(10, 1, 0, 103))
|
|
/* bool mDirectRendering = */ nif->getBoolean();
|
|
if (nif->getVersion() >= NIFStream::generateVersion(20, 2, 0, 4))
|
|
/* bool mPersistRenderData = */ nif->getBoolean();
|
|
}
|
|
|
|
void NiSourceTexture::post(Reader& nif)
|
|
{
|
|
Named::post(nif);
|
|
data.post(nif);
|
|
}
|
|
|
|
void BSShaderTextureSet::read(NIFStream* nif)
|
|
{
|
|
nif->getSizedStrings(textures, nif->getUInt());
|
|
}
|
|
|
|
void NiParticleModifier::read(NIFStream* nif)
|
|
{
|
|
next.read(nif);
|
|
controller.read(nif);
|
|
}
|
|
|
|
void NiParticleModifier::post(Reader& nif)
|
|
{
|
|
next.post(nif);
|
|
controller.post(nif);
|
|
}
|
|
|
|
void NiParticleGrowFade::read(NIFStream* nif)
|
|
{
|
|
NiParticleModifier::read(nif);
|
|
growTime = nif->getFloat();
|
|
fadeTime = nif->getFloat();
|
|
}
|
|
|
|
void NiParticleColorModifier::read(NIFStream* nif)
|
|
{
|
|
NiParticleModifier::read(nif);
|
|
data.read(nif);
|
|
}
|
|
|
|
void NiParticleColorModifier::post(Reader& nif)
|
|
{
|
|
NiParticleModifier::post(nif);
|
|
data.post(nif);
|
|
}
|
|
|
|
void NiGravity::read(NIFStream* nif)
|
|
{
|
|
NiParticleModifier::read(nif);
|
|
|
|
mDecay = nif->getFloat();
|
|
mForce = nif->getFloat();
|
|
mType = nif->getUInt();
|
|
mPosition = nif->getVector3();
|
|
mDirection = nif->getVector3();
|
|
}
|
|
|
|
void NiParticleCollider::read(NIFStream* nif)
|
|
{
|
|
NiParticleModifier::read(nif);
|
|
|
|
mBounceFactor = nif->getFloat();
|
|
if (nif->getVersion() >= NIFStream::generateVersion(4, 2, 0, 2))
|
|
{
|
|
// Unused in NifSkope. Need to figure out what these do.
|
|
/*bool mSpawnOnCollision = */ nif->getBoolean();
|
|
/*bool mDieOnCollision = */ nif->getBoolean();
|
|
}
|
|
}
|
|
|
|
void NiPlanarCollider::read(NIFStream* nif)
|
|
{
|
|
NiParticleCollider::read(nif);
|
|
|
|
mExtents = nif->getVector2();
|
|
mPosition = nif->getVector3();
|
|
mXVector = nif->getVector3();
|
|
mYVector = nif->getVector3();
|
|
mPlaneNormal = nif->getVector3();
|
|
mPlaneDistance = nif->getFloat();
|
|
}
|
|
|
|
void NiParticleRotation::read(NIFStream* nif)
|
|
{
|
|
NiParticleModifier::read(nif);
|
|
|
|
/* bool mRandomInitialAxis = */ nif->getChar();
|
|
/* osg::Vec3f mInitialAxis = */ nif->getVector3();
|
|
/* float mRotationSpeed = */ nif->getFloat();
|
|
}
|
|
|
|
void NiSphericalCollider::read(NIFStream* nif)
|
|
{
|
|
NiParticleCollider::read(nif);
|
|
|
|
mRadius = nif->getFloat();
|
|
mCenter = nif->getVector3();
|
|
}
|
|
|
|
}
|