Skip to content
Snippets Groups Projects
Commit 2c36c4e6 authored by Shon Ferguson's avatar Shon Ferguson
Browse files

Fixed NiPSysEmitterCtlrData and added NiVectorExtraData and NiBinaryExtraData.

parent 9488f294
No related branches found
No related tags found
No related merge requests found
...@@ -3337,6 +3337,83 @@ string AKeyframeData::asString() const { ...@@ -3337,6 +3337,83 @@ string AKeyframeData::asString() const {
return out.str(); return out.str();
} }
/***********************************************************
* NiPSysEmitterCtlrData methods
**********************************************************/
void NiPSysEmitterCtlrData::Read( istream& file, unsigned int version ) {
//--Float Keys--//
uint numKeys = ReadUInt( file );
if (numKeys > 0) {
NifStream( f_key_type, file );
float_keys.resize( numKeys );
for ( uint i = 0; i < float_keys.size(); ++i ) {
NifStream( float_keys[i], file, f_key_type );
}
}
//--Byte Keys--//
numKeys = ReadUInt( file );
byte_keys.resize( numKeys );
for ( uint i = 0; i < byte_keys.size(); ++i ) {
NifStream( byte_keys[i], file, LINEAR_KEY );
}
}
void NiPSysEmitterCtlrData::Write( ostream& file, unsigned int version ) const {
//--Float Keys--//
WriteUInt( uint(float_keys.size()), file );
if (float_keys.size() > 0) {
NifStream( f_key_type, file );
for ( uint i = 0; i < float_keys.size(); ++i ) {
NifStream( float_keys[i], file, f_key_type );
}
}
//--Byte Keys--//
WriteUInt( uint(byte_keys.size()), file );
for ( uint i = 0; i < byte_keys.size(); ++i ) {
NifStream( byte_keys[i], file, LINEAR_KEY );
}
}
string NiPSysEmitterCtlrData::asString() const {
stringstream out;
out.setf(ios::fixed, ios::floatfield);
out << setprecision(1);
out << "Float Key Count: " << uint(float_keys.size()) << endl
<< "Float Key Type: " << f_key_type << endl;
if (verbose) {
vector< Key<float> >::const_iterator it;
for ( it = float_keys.begin(); it != float_keys.end(); ++it ) {
out << "Key Time: " << it->time << " Float Value: " << it->data << endl;
}
} else {
out << "<<Data Not Shown>>" << endl;
}
out << "Byte Key Count: " << uint(byte_keys.size()) << endl;
if (verbose) {
vector< Key<byte> >::const_iterator it;
for ( it = byte_keys.begin(); it != byte_keys.end(); ++it ) {
out << "Key Time: " << it->time << " Float Value: " << it->data << endl;
}
} else {
out << "<<Data Not Shown>>" << endl;
}
return out.str();
}
/*********************************************************** /***********************************************************
* NiBoolData methods * NiBoolData methods
**********************************************************/ **********************************************************/
......
...@@ -727,27 +727,6 @@ private: ...@@ -727,27 +727,6 @@ private:
uint unkInt2; uint unkInt2;
}; };
/**
* NiPSysEmitterCtlrData
*/
class NiPSysEmitterCtlrData : public AData {
public:
NiPSysEmitterCtlrData() {
AddAttr( attr_int, "Unknown Int 1" );
AddAttr( attr_int, "Unknown Int 2" );
AddAttr( attr_int, "Unknown Int 3" );
AddAttr( attr_float, "Unknown Float 1" );
AddAttr( attr_int, "Unknown Int 4" );
AddAttr( attr_int, "Unknown Int 5" );
AddAttr( attr_byte, "Unknown Byte 1" );
AddAttr( attr_float, "Unknown Float 2" );
AddAttr( attr_byte, "Unknown Byte 2" );
}
~NiPSysEmitterCtlrData() {}
string GetBlockType() const { return "NiPSysEmitterCtlrData"; }
};
/** /**
* NiMaterialProperty - material properties * NiMaterialProperty - material properties
*/ */
...@@ -1750,6 +1729,24 @@ public: ...@@ -1750,6 +1729,24 @@ public:
string GetBlockType() const { return "NiPSysSphereEmitter"; } string GetBlockType() const { return "NiPSysSphereEmitter"; }
}; };
/**
* NiPSysEmitterCtlrData
*/
class NiPSysEmitterCtlrData : public AData {
public:
NiPSysEmitterCtlrData() {}
~NiPSysEmitterCtlrData() {}
string GetBlockType() const { return "NiPSysEmitterCtlrData"; }
void Read( istream& in, unsigned int version );
void Write( ostream& out, unsigned int version ) const;
string asString() const;
private:
KeyType f_key_type;
vector< Key<float> > float_keys;
vector< Key<byte> > byte_keys;
};
/** /**
* AKeyframeData - * AKeyframeData -
*/ */
...@@ -2281,6 +2278,79 @@ public: ...@@ -2281,6 +2278,79 @@ public:
}; };
class NiBinaryExtraData : public AExtraData {
public:
NiBinaryExtraData() {}
~NiBinaryExtraData() {}
string GetBlockType() const { return "NiBinaryExtraData"; };
void Read( istream& in, unsigned int version ) {
AExtraData::Read( in, version );
uint numBytes = ReadUInt( in );
binData.resize( numBytes );
NifStream( binData, in );
}
void Write( ostream& out, unsigned int version ) const {
AExtraData::Write( out, version );
WriteUInt( uint(binData.size()), out );
NifStream( binData, out );
}
string asString() const {
stringstream out;
out.setf(ios::fixed, ios::floatfield);
out << setprecision(1);
out << AExtraData::asString()
<< "Binary Data (" << uint(binData.size()) << " bytes):" << endl;
for ( uint i = 0; i < binData.size(); ++i ) {
out << " " << i << ": " << binData[i] << endl;
}
return out.str();
}
private:
vector<byte> binData;
};
class NiVectorExtraData : public AExtraData {
public:
NiVectorExtraData() {
AddAttr( attr_vector3, "Vector Data" );
AddAttr( attr_float, "Unknown Float" );
}
~NiVectorExtraData() {}
string GetBlockType() const { return "NiVectorExtraData"; };
void Read( istream& in, unsigned int version ) {
AExtraData::Read( in, version );
GetAttr("Vector Data")->Read( in, version );
GetAttr("Unknown Float")->Read( in, version );
}
void Write( ostream& out, unsigned int version ) const {
GetAttr("Vector Data")->Write( out, version );
GetAttr("Unknown Float")->Write( out, version );
}
string asString() const {
stringstream out;
out.setf(ios::fixed, ios::floatfield);
out << setprecision(1);
out << AExtraData::asString()
<< "Vector Data: " << GetAttr("Vector Data")->asString() << endl
<< "Unknown Float: " << GetAttr("Unknown Float")->asString() << endl;
return out.str();
}
};
class NiColorExtraData : public AExtraData { class NiColorExtraData : public AExtraData {
public: public:
NiColorExtraData() {} NiColorExtraData() {}
......
...@@ -863,6 +863,10 @@ IBlock * CreateNiBillboardNode() { ...@@ -863,6 +863,10 @@ IBlock * CreateNiBillboardNode() {
return new NiBillboardNode; return new NiBillboardNode;
} }
IBlock * CreateNiBinaryExtraData() {
return new NiBinaryExtraData;
}
IBlock * CreateNiBoneLODController() { IBlock * CreateNiBoneLODController() {
return new NiBoneLODController; return new NiBoneLODController;
} }
...@@ -1315,6 +1319,10 @@ IBlock * CreateNiUVData() { ...@@ -1315,6 +1319,10 @@ IBlock * CreateNiUVData() {
return new NiUVData; return new NiUVData;
} }
IBlock * CreateNiVectorExtraData() {
return new NiVectorExtraData;
}
IBlock * CreateNiVertexColorProperty() { IBlock * CreateNiVertexColorProperty() {
return new NiVertexColorProperty; return new NiVertexColorProperty;
} }
...@@ -1355,6 +1363,7 @@ void RegisterBlockFactories () { ...@@ -1355,6 +1363,7 @@ void RegisterBlockFactories () {
global_block_map["NiAutoNormalParticles"] = CreateNiAutoNormalParticles; global_block_map["NiAutoNormalParticles"] = CreateNiAutoNormalParticles;
global_block_map["NiAutoNormalParticlesData"] = CreateNiAutoNormalParticlesData; global_block_map["NiAutoNormalParticlesData"] = CreateNiAutoNormalParticlesData;
global_block_map["NiBillboardNode"] = CreateNiBillboardNode; global_block_map["NiBillboardNode"] = CreateNiBillboardNode;
global_block_map["NiBinaryExtraData"] = CreateNiBinaryExtraData;
global_block_map["NiBoneLODController"] = CreateNiBoneLODController; global_block_map["NiBoneLODController"] = CreateNiBoneLODController;
global_block_map["NiBoolData"] = CreateNiBoolData; global_block_map["NiBoolData"] = CreateNiBoolData;
global_block_map["NiBooleanExtraData"] = CreateNiBooleanExtraData; global_block_map["NiBooleanExtraData"] = CreateNiBooleanExtraData;
...@@ -1468,6 +1477,7 @@ void RegisterBlockFactories () { ...@@ -1468,6 +1477,7 @@ void RegisterBlockFactories () {
global_block_map["NiTriStripsData"] = CreateNiTriStripsData; global_block_map["NiTriStripsData"] = CreateNiTriStripsData;
global_block_map["NiUVController"] = CreateNiUVController; global_block_map["NiUVController"] = CreateNiUVController;
global_block_map["NiUVData"] = CreateNiUVData; global_block_map["NiUVData"] = CreateNiUVData;
global_block_map["NiVectorExtraData"] = CreateNiVectorExtraData;
global_block_map["NiVertexColorProperty"] = CreateNiVertexColorProperty; global_block_map["NiVertexColorProperty"] = CreateNiVertexColorProperty;
global_block_map["NiVertWeightsExtraData"] = CreateNiVertWeightsExtraData; global_block_map["NiVertWeightsExtraData"] = CreateNiVertWeightsExtraData;
global_block_map["NiVisController"] = CreateNiVisController; global_block_map["NiVisController"] = CreateNiVisController;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment