mirror of
https://github.com/TES3MP/openmw-tes3mp.git
synced 2025-03-28 20:36:42 +00:00
Merge branch 'nifgobrrrr' into 'master'
More NIF stuff See merge request OpenMW/openmw!324
This commit is contained in:
commit
ee22081ae1
10 changed files with 127 additions and 46 deletions
|
@ -170,25 +170,13 @@ namespace Nif
|
||||||
data.post(nif);
|
data.post(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NiAlphaController::read(NIFStream *nif)
|
void NiFloatInterpController::read(NIFStream *nif)
|
||||||
{
|
{
|
||||||
Controller::read(nif);
|
Controller::read(nif);
|
||||||
data.read(nif);
|
data.read(nif);
|
||||||
}
|
}
|
||||||
|
|
||||||
void NiAlphaController::post(NIFFile *nif)
|
void NiFloatInterpController::post(NIFFile *nif)
|
||||||
{
|
|
||||||
Controller::post(nif);
|
|
||||||
data.post(nif);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiRollController::read(NIFStream *nif)
|
|
||||||
{
|
|
||||||
Controller::read(nif);
|
|
||||||
data.read(nif);
|
|
||||||
}
|
|
||||||
|
|
||||||
void NiRollController::post(NIFFile *nif)
|
|
||||||
{
|
{
|
||||||
Controller::post(nif);
|
Controller::post(nif);
|
||||||
data.post(nif);
|
data.post(nif);
|
||||||
|
|
|
@ -143,23 +143,16 @@ public:
|
||||||
void post(NIFFile *nif);
|
void post(NIFFile *nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NiAlphaController : public Controller
|
struct NiFloatInterpController : public Controller
|
||||||
{
|
{
|
||||||
public:
|
|
||||||
NiFloatDataPtr data;
|
NiFloatDataPtr data;
|
||||||
|
|
||||||
void read(NIFStream *nif);
|
void read(NIFStream *nif);
|
||||||
void post(NIFFile *nif);
|
void post(NIFFile *nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
class NiRollController : public Controller
|
class NiAlphaController : public NiFloatInterpController { };
|
||||||
{
|
class NiRollController : public NiFloatInterpController { };
|
||||||
public:
|
|
||||||
NiFloatDataPtr data;
|
|
||||||
|
|
||||||
void read(NIFStream *nif);
|
|
||||||
void post(NIFFile *nif);
|
|
||||||
};
|
|
||||||
|
|
||||||
class NiGeomMorpherController : public Controller
|
class NiGeomMorpherController : public Controller
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,8 +75,6 @@ class NiAutoNormalParticlesData : public NiGeometryData
|
||||||
public:
|
public:
|
||||||
int numParticles{0};
|
int numParticles{0};
|
||||||
|
|
||||||
float particleRadius;
|
|
||||||
|
|
||||||
int activeCount;
|
int activeCount;
|
||||||
|
|
||||||
std::vector<float> particleRadii, sizes, rotationAngles;
|
std::vector<float> particleRadii, sizes, rotationAngles;
|
||||||
|
|
|
@ -29,6 +29,56 @@ void NiVertWeightsExtraData::read(NIFStream *nif)
|
||||||
nif->skip(nif->getUShort() * sizeof(float)); // vertex weights I guess
|
nif->skip(nif->getUShort() * sizeof(float)); // vertex weights I guess
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NiIntegerExtraData::read(NIFStream *nif)
|
||||||
|
{
|
||||||
|
Extra::read(nif);
|
||||||
|
|
||||||
|
data = nif->getUInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiIntegersExtraData::read(NIFStream *nif)
|
||||||
|
{
|
||||||
|
Extra::read(nif);
|
||||||
|
|
||||||
|
unsigned int num = nif->getUInt();
|
||||||
|
if (num)
|
||||||
|
nif->getUInts(data, num);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiBinaryExtraData::read(NIFStream *nif)
|
||||||
|
{
|
||||||
|
Extra::read(nif);
|
||||||
|
unsigned int size = nif->getUInt();
|
||||||
|
if (size)
|
||||||
|
nif->getChars(data, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiBooleanExtraData::read(NIFStream *nif)
|
||||||
|
{
|
||||||
|
Extra::read(nif);
|
||||||
|
data = nif->getBoolean();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiVectorExtraData::read(NIFStream *nif)
|
||||||
|
{
|
||||||
|
Extra::read(nif);
|
||||||
|
data = nif->getVector4();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiFloatExtraData::read(NIFStream *nif)
|
||||||
|
{
|
||||||
|
Extra::read(nif);
|
||||||
|
|
||||||
|
data = nif->getFloat();
|
||||||
|
}
|
||||||
|
|
||||||
|
void NiFloatsExtraData::read(NIFStream *nif)
|
||||||
|
{
|
||||||
|
Extra::read(nif);
|
||||||
|
unsigned int num = nif->getUInt();
|
||||||
|
if (num)
|
||||||
|
nif->getFloats(data, num);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,5 +60,54 @@ public:
|
||||||
void read(NIFStream *nif);
|
void read(NIFStream *nif);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct NiIntegerExtraData : public Extra
|
||||||
|
{
|
||||||
|
unsigned int data;
|
||||||
|
|
||||||
|
void read(NIFStream *nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiIntegersExtraData : public Extra
|
||||||
|
{
|
||||||
|
std::vector<unsigned int> data;
|
||||||
|
|
||||||
|
void read(NIFStream *nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiBinaryExtraData : public Extra
|
||||||
|
{
|
||||||
|
std::vector<char> data;
|
||||||
|
|
||||||
|
void read(NIFStream *nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiBooleanExtraData : public Extra
|
||||||
|
{
|
||||||
|
bool data;
|
||||||
|
|
||||||
|
void read(NIFStream *nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiVectorExtraData : public Extra
|
||||||
|
{
|
||||||
|
osg::Vec4f data;
|
||||||
|
|
||||||
|
void read(NIFStream *nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiFloatExtraData : public Extra
|
||||||
|
{
|
||||||
|
float data;
|
||||||
|
|
||||||
|
void read(NIFStream *nif);
|
||||||
|
};
|
||||||
|
|
||||||
|
struct NiFloatsExtraData : public Extra
|
||||||
|
{
|
||||||
|
std::vector<float> data;
|
||||||
|
|
||||||
|
void read(NIFStream *nif);
|
||||||
|
};
|
||||||
|
|
||||||
} // Namespace
|
} // Namespace
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -105,10 +105,17 @@ static std::map<std::string,RecordFactoryEntry> makeFactory()
|
||||||
factory["NiSkinInstance"] = {&construct <NiSkinInstance> , RC_NiSkinInstance };
|
factory["NiSkinInstance"] = {&construct <NiSkinInstance> , RC_NiSkinInstance };
|
||||||
factory["NiLookAtController"] = {&construct <NiLookAtController> , RC_NiLookAtController };
|
factory["NiLookAtController"] = {&construct <NiLookAtController> , RC_NiLookAtController };
|
||||||
factory["NiPalette"] = {&construct <NiPalette> , RC_NiPalette };
|
factory["NiPalette"] = {&construct <NiPalette> , RC_NiPalette };
|
||||||
|
factory["NiIntegerExtraData"] = {&construct <NiIntegerExtraData> , RC_NiIntegerExtraData };
|
||||||
|
factory["NiIntegersExtraData"] = {&construct <NiIntegersExtraData> , RC_NiIntegersExtraData };
|
||||||
|
factory["NiBinaryExtraData"] = {&construct <NiBinaryExtraData> , RC_NiBinaryExtraData };
|
||||||
|
factory["NiBooleanExtraData"] = {&construct <NiBooleanExtraData> , RC_NiBooleanExtraData };
|
||||||
|
factory["NiVectorExtraData"] = {&construct <NiVectorExtraData> , RC_NiVectorExtraData };
|
||||||
|
factory["NiColorExtraData"] = {&construct <NiVectorExtraData> , RC_NiColorExtraData };
|
||||||
|
factory["NiFloatExtraData"] = {&construct <NiFloatExtraData> , RC_NiFloatExtraData };
|
||||||
|
factory["NiFloatsExtraData"] = {&construct <NiFloatsExtraData> , RC_NiFloatsExtraData };
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
///Make the factory map used for parsing the file
|
///Make the factory map used for parsing the file
|
||||||
static const std::map<std::string,RecordFactoryEntry> factories = makeFactory();
|
static const std::map<std::string,RecordFactoryEntry> factories = makeFactory();
|
||||||
|
|
||||||
|
|
|
@ -162,7 +162,6 @@ struct NiWireframeProperty : public Property
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// The rest are all struct-based
|
// The rest are all struct-based
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct StructPropT : Property
|
struct StructPropT : Property
|
||||||
|
|
|
@ -101,7 +101,15 @@ enum RecordType
|
||||||
RC_RootCollisionNode,
|
RC_RootCollisionNode,
|
||||||
RC_NiSphericalCollider,
|
RC_NiSphericalCollider,
|
||||||
RC_NiLookAtController,
|
RC_NiLookAtController,
|
||||||
RC_NiPalette
|
RC_NiPalette,
|
||||||
|
RC_NiIntegerExtraData,
|
||||||
|
RC_NiIntegersExtraData,
|
||||||
|
RC_NiBinaryExtraData,
|
||||||
|
RC_NiBooleanExtraData,
|
||||||
|
RC_NiVectorExtraData,
|
||||||
|
RC_NiColorExtraData,
|
||||||
|
RC_NiFloatExtraData,
|
||||||
|
RC_NiFloatsExtraData
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Base class for all records
|
/// Base class for all records
|
||||||
|
|
|
@ -310,11 +310,6 @@ void VisController::operator() (osg::Node* node, osg::NodeVisitor* nv)
|
||||||
|
|
||||||
RollController::RollController(const Nif::NiFloatData *data)
|
RollController::RollController(const Nif::NiFloatData *data)
|
||||||
: mData(data->mKeyList, 1.f)
|
: mData(data->mKeyList, 1.f)
|
||||||
, mStartingTime(0)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
RollController::RollController() : mStartingTime(0)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,7 +317,7 @@ RollController::RollController(const RollController ©, const osg::CopyOp &co
|
||||||
: osg::NodeCallback(copy, copyop)
|
: osg::NodeCallback(copy, copyop)
|
||||||
, Controller(copy)
|
, Controller(copy)
|
||||||
, mData(copy.mData)
|
, mData(copy.mData)
|
||||||
, mStartingTime(0)
|
, mStartingTime(copy.mStartingTime)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -462,12 +457,6 @@ FlipController::FlipController(int texSlot, float delta, const std::vector<osg::
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
FlipController::FlipController()
|
|
||||||
: mTexSlot(0)
|
|
||||||
, mDelta(0.f)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
FlipController::FlipController(const FlipController ©, const osg::CopyOp ©op)
|
FlipController::FlipController(const FlipController ©, const osg::CopyOp ©op)
|
||||||
: StateSetUpdater(copy, copyop)
|
: StateSetUpdater(copy, copyop)
|
||||||
, Controller(copy)
|
, Controller(copy)
|
||||||
|
|
|
@ -268,11 +268,11 @@ namespace NifOsg
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
FloatInterpolator mData;
|
FloatInterpolator mData;
|
||||||
double mStartingTime;
|
double mStartingTime{0};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
RollController(const Nif::NiFloatData *data);
|
RollController(const Nif::NiFloatData *data);
|
||||||
RollController();
|
RollController() = default;
|
||||||
RollController(const RollController& copy, const osg::CopyOp& copyop);
|
RollController(const RollController& copy, const osg::CopyOp& copyop);
|
||||||
|
|
||||||
virtual void operator() (osg::Node* node, osg::NodeVisitor* nv);
|
virtual void operator() (osg::Node* node, osg::NodeVisitor* nv);
|
||||||
|
@ -326,14 +326,14 @@ namespace NifOsg
|
||||||
class FlipController : public SceneUtil::StateSetUpdater, public SceneUtil::Controller
|
class FlipController : public SceneUtil::StateSetUpdater, public SceneUtil::Controller
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
int mTexSlot;
|
int mTexSlot{0};
|
||||||
float mDelta;
|
float mDelta{0.f};
|
||||||
std::vector<osg::ref_ptr<osg::Texture2D> > mTextures;
|
std::vector<osg::ref_ptr<osg::Texture2D> > mTextures;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FlipController(const Nif::NiFlipController* ctrl, const std::vector<osg::ref_ptr<osg::Texture2D> >& textures);
|
FlipController(const Nif::NiFlipController* ctrl, const std::vector<osg::ref_ptr<osg::Texture2D> >& textures);
|
||||||
FlipController(int texSlot, float delta, const std::vector<osg::ref_ptr<osg::Texture2D> >& textures);
|
FlipController(int texSlot, float delta, const std::vector<osg::ref_ptr<osg::Texture2D> >& textures);
|
||||||
FlipController();
|
FlipController() = default;
|
||||||
FlipController(const FlipController& copy, const osg::CopyOp& copyop);
|
FlipController(const FlipController& copy, const osg::CopyOp& copyop);
|
||||||
|
|
||||||
META_Object(NifOsg, FlipController)
|
META_Object(NifOsg, FlipController)
|
||||||
|
|
Loading…
Reference in a new issue