1
0
Fork 1
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:
psi29a 2020-10-07 10:22:56 +00:00
commit ee22081ae1
10 changed files with 127 additions and 46 deletions

View file

@ -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);

View file

@ -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
{ {

View file

@ -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;

View file

@ -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);
}
} }

View file

@ -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

View file

@ -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();

View file

@ -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

View file

@ -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

View file

@ -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 &copy, 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 &copy, const osg::CopyOp &copyop) FlipController::FlipController(const FlipController &copy, const osg::CopyOp &copyop)
: StateSetUpdater(copy, copyop) : StateSetUpdater(copy, copyop)
, Controller(copy) , Controller(copy)

View file

@ -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)