From eca08d6c90e7dc6244009ebad5b29fc6c7cd8cac Mon Sep 17 00:00:00 2001
From: Tazpn <tazpn@users.sourceforge.net>
Date: Sun, 25 Jun 2006 23:24:40 +0000
Subject: [PATCH] Merge in gundalf's changes to bhkNiTriStripsShape and others.

---
 gen/obj_defines.h           |  8 +++---
 gen/obj_impl.cpp            | 52 ++++++++-----------------------------
 obj/NiAVObject.cpp          |  5 ++++
 obj/NiAVObject.h            |  2 ++
 obj/NiCollisionObject.cpp   | 10 +++++++
 obj/NiCollisionObject.h     |  3 +++
 obj/NiExtraData.cpp         |  2 +-
 obj/NiExtraData.h           |  2 +-
 obj/NiObjectNET.cpp         |  2 +-
 obj/NiObjectNET.h           |  2 +-
 obj/bhkCollisionObject.cpp  |  5 +++-
 obj/bhkEntity.cpp           |  9 +++++++
 obj/bhkEntity.h             |  3 +++
 obj/bhkNiTriStripsShape.cpp | 11 ++++++++
 obj/bhkNiTriStripsShape.h   |  3 +++
 obj/bhkRigidBody.cpp        | 15 +++++++++++
 obj/bhkRigidBody.h          |  4 +++
 obj/bhkSphereRepShape.cpp   |  4 +++
 obj/bhkSphereRepShape.h     |  2 ++
 19 files changed, 94 insertions(+), 50 deletions(-)

diff --git a/gen/obj_defines.h b/gen/obj_defines.h
index 362452b3..30fbc1c8 100644
--- a/gen/obj_defines.h
+++ b/gen/obj_defines.h
@@ -1248,9 +1248,9 @@ InternalFixLinks( objects, link_stack, version, user_version ); \
 return InternalGetRefs(); \
 
 #define BHK_NI_TRI_STRIPS_SHAPE_MEMBERS \
-array<float,2> unknownFloats1; \
-array<uint,5> unknownInts1; \
-array<float,3> unknownFloats2; \
+float unknownFloat1; \
+uint unknownInt1; \
+Vector3 scale; \
 uint unknownInt2; \
 mutable uint numStripsData; \
 vector<Ref<NiTriStripsData > > stripsData; \
@@ -1262,7 +1262,7 @@ vector<uint > unknownInts3; \
 #define BHK_NI_TRI_STRIPS_SHAPE_PARENT bhkSphereRepShape \
 
 #define BHK_NI_TRI_STRIPS_SHAPE_CONSTRUCT \
- : unknownInt2((uint)0), numStripsData((uint)0), numUnknownInts3((uint)0) \
+ : unknownFloat1(0.1f), unknownInt1((uint)0x004ABE60), scale(1.0f, 1.0f, 1.0f), unknownInt2((uint)0), numStripsData((uint)0), numUnknownInts3((uint)0) \
 
 #define BHK_NI_TRI_STRIPS_SHAPE_READ \
 InternalRead( in, link_stack, version, user_version ); \
diff --git a/gen/obj_impl.cpp b/gen/obj_impl.cpp
index 924551eb..e475cf93 100644
--- a/gen/obj_impl.cpp
+++ b/gen/obj_impl.cpp
@@ -2809,15 +2809,9 @@ std::list<NiObjectRef> bhkMultiSphereShape::InternalGetRefs() const {
 void bhkNiTriStripsShape::InternalRead( istream& in, list<uint> & link_stack, unsigned int version, unsigned int user_version ) {
 	uint block_num;
 	bhkSphereRepShape::Read( in, link_stack, version, user_version );
-	for (uint i1 = 0; i1 < 2; i1++) {
-		NifStream( unknownFloats1[i1], in, version );
-	};
-	for (uint i1 = 0; i1 < 5; i1++) {
-		NifStream( unknownInts1[i1], in, version );
-	};
-	for (uint i1 = 0; i1 < 3; i1++) {
-		NifStream( unknownFloats2[i1], in, version );
-	};
+	NifStream( unknownFloat1, in, version );
+	NifStream( unknownInt1, in, version );
+	NifStream( scale, in, version );
 	NifStream( unknownInt2, in, version );
 	NifStream( numStripsData, in, version );
 	stripsData.resize(numStripsData);
@@ -2836,15 +2830,9 @@ void bhkNiTriStripsShape::InternalWrite( ostream& out, map<NiObjectRef,uint> lin
 	bhkSphereRepShape::Write( out, link_map, version, user_version );
 	numUnknownInts3 = uint(unknownInts3.size());
 	numStripsData = uint(stripsData.size());
-	for (uint i1 = 0; i1 < 2; i1++) {
-		NifStream( unknownFloats1[i1], out, version );
-	};
-	for (uint i1 = 0; i1 < 5; i1++) {
-		NifStream( unknownInts1[i1], out, version );
-	};
-	for (uint i1 = 0; i1 < 3; i1++) {
-		NifStream( unknownFloats2[i1], out, version );
-	};
+	NifStream( unknownFloat1, out, version );
+	NifStream( unknownInt1, out, version );
+	NifStream( scale, out, version );
 	NifStream( unknownInt2, out, version );
 	NifStream( numStripsData, out, version );
 	for (uint i1 = 0; i1 < stripsData.size(); i1++) {
@@ -2864,27 +2852,9 @@ std::string bhkNiTriStripsShape::InternalAsString( bool verbose ) const {
 	out << bhkSphereRepShape::asString();
 	numUnknownInts3 = uint(unknownInts3.size());
 	numStripsData = uint(stripsData.size());
-	for (uint i1 = 0; i1 < 2; i1++) {
-		if ( !verbose && ( i1 > MAXARRAYDUMP ) ) {
-			out << "<Data Truncated. Use verbose mode to see complete listing.>" << endl;
-			break;
-		};
-		out << "    Unknown Floats 1[" << i1 << "]:  " << unknownFloats1[i1] << endl;
-	};
-	for (uint i1 = 0; i1 < 5; i1++) {
-		if ( !verbose && ( i1 > MAXARRAYDUMP ) ) {
-			out << "<Data Truncated. Use verbose mode to see complete listing.>" << endl;
-			break;
-		};
-		out << "    Unknown Ints 1[" << i1 << "]:  " << unknownInts1[i1] << endl;
-	};
-	for (uint i1 = 0; i1 < 3; i1++) {
-		if ( !verbose && ( i1 > MAXARRAYDUMP ) ) {
-			out << "<Data Truncated. Use verbose mode to see complete listing.>" << endl;
-			break;
-		};
-		out << "    Unknown Floats 2[" << i1 << "]:  " << unknownFloats2[i1] << endl;
-	};
+	out << "  Unknown Float 1:  " << unknownFloat1 << endl;
+	out << "  Unknown Int 1:  " << unknownInt1 << endl;
+	out << "  Scale:  " << scale << endl;
 	out << "  Unknown Int 2:  " << unknownInt2 << endl;
 	out << "  Num Strips Data:  " << numStripsData << endl;
 	for (uint i1 = 0; i1 < stripsData.size(); i1++) {
@@ -10792,7 +10762,7 @@ void NiSkinPartition::InternalWrite( ostream& out, map<NiObjectRef,uint> link_ma
 		skinPartitionBlocks[i1].numWeightsPerVertex = ushort((skinPartitionBlocks[i1].vertexWeights.size() > 0) ? skinPartitionBlocks[i1].vertexWeights[0].size() : 0);
 		skinPartitionBlocks[i1].numStrips = ushort(skinPartitionBlocks[i1].stripLengths.size());
 		skinPartitionBlocks[i1].numBones = ushort(skinPartitionBlocks[i1].bones.size());
-		skinPartitionBlocks[i1].numTriangles = ushort(skinPartitionBlocks[i1].triangles.size());
+		skinPartitionBlocks[i1].numTriangles = skinPartitionBlocks[i1].CalcNumTriangles();
 		skinPartitionBlocks[i1].numVertices = ushort(skinPartitionBlocks[i1].vertexMap.size());
 		NifStream( skinPartitionBlocks[i1].numVertices, out, version );
 		NifStream( skinPartitionBlocks[i1].numTriangles, out, version );
@@ -10883,7 +10853,7 @@ std::string NiSkinPartition::InternalAsString( bool verbose ) const {
 		skinPartitionBlocks[i1].numWeightsPerVertex = ushort((skinPartitionBlocks[i1].vertexWeights.size() > 0) ? skinPartitionBlocks[i1].vertexWeights[0].size() : 0);
 		skinPartitionBlocks[i1].numStrips = ushort(skinPartitionBlocks[i1].stripLengths.size());
 		skinPartitionBlocks[i1].numBones = ushort(skinPartitionBlocks[i1].bones.size());
-		skinPartitionBlocks[i1].numTriangles = ushort(skinPartitionBlocks[i1].triangles.size());
+		skinPartitionBlocks[i1].numTriangles = skinPartitionBlocks[i1].CalcNumTriangles();
 		skinPartitionBlocks[i1].numVertices = ushort(skinPartitionBlocks[i1].vertexMap.size());
 		out << "    Num Vertices:  " << skinPartitionBlocks[i1].numVertices << endl;
 		out << "    Num Triangles:  " << skinPartitionBlocks[i1].numTriangles << endl;
diff --git a/obj/NiAVObject.cpp b/obj/NiAVObject.cpp
index b5df531f..a4e31db5 100644
--- a/obj/NiAVObject.cpp
+++ b/obj/NiAVObject.cpp
@@ -145,3 +145,8 @@ Vector3 NiAVObject::GetVelocity() const {
 void NiAVObject::SetVelocity( const Vector3 & n ) {
 	velocity = n;
 }
+
+void NiAVObject::SetCollisionObject(Ref<NiCollisionObject> &obj)
+{
+	collisionObject = obj;
+}
\ No newline at end of file
diff --git a/obj/NiAVObject.h b/obj/NiAVObject.h
index 1849750e..884406bd 100644
--- a/obj/NiAVObject.h
+++ b/obj/NiAVObject.h
@@ -82,6 +82,8 @@ public:
 	Vector3 GetVelocity() const;
 	void SetVelocity( const Vector3 & n );
 
+	void SetCollisionObject(Ref<NiCollisionObject> &);
+
 protected:
 	NiNode * parent;
 	NI_A_V_OBJECT_MEMBERS
diff --git a/obj/NiCollisionObject.cpp b/obj/NiCollisionObject.cpp
index 814b4c52..a925bc79 100644
--- a/obj/NiCollisionObject.cpp
+++ b/obj/NiCollisionObject.cpp
@@ -33,6 +33,16 @@ list<NiObjectRef> NiCollisionObject::GetRefs() const {
 	NI_COLLISION_OBJECT_GETREFS
 }
 
+void NiCollisionObject::SetParent(NiAVObject *obj)
+{
+	parent = obj;
+}
+
+void NiCollisionObject::SetBody(const Ref<NiObject> &obj)
+{
+	body = obj;
+}
+
 const Type & NiCollisionObject::GetType() const {
 	return TYPE;
 };
diff --git a/obj/NiCollisionObject.h b/obj/NiCollisionObject.h
index 9332ea9d..5fcbeab6 100644
--- a/obj/NiCollisionObject.h
+++ b/obj/NiCollisionObject.h
@@ -39,6 +39,9 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void 	SetParent(NiAVObject *);
+	void 	SetBody(const Ref<NiObject> &);
+
 protected:
 	NiAVObject * NiCollisionObject::Parent() const;
 	NI_COLLISION_OBJECT_MEMBERS
diff --git a/obj/NiExtraData.cpp b/obj/NiExtraData.cpp
index e1c68a80..9ba79c20 100644
--- a/obj/NiExtraData.cpp
+++ b/obj/NiExtraData.cpp
@@ -39,7 +39,7 @@ string NiExtraData::GetName() {
 	return name;
 }
 
-void NiExtraData::SetName( string & new_name ) {
+void NiExtraData::SetName( const string & new_name ) {
 	name = new_name;
 }
 
diff --git a/obj/NiExtraData.h b/obj/NiExtraData.h
index 4728763a..1c26ea78 100644
--- a/obj/NiExtraData.h
+++ b/obj/NiExtraData.h
@@ -60,7 +60,7 @@ public:
 	 * version NIF files.
 	 * \param new_name The new name for this NiExtraData object.
 	 */
-	void SetName( string & new_name );
+	void SetName( const string & new_name );
 
 	/*!
 	 * Formats a human readable string that includes the type of the object
diff --git a/obj/NiObjectNET.cpp b/obj/NiObjectNET.cpp
index 2d7a504a..183cd57a 100644
--- a/obj/NiObjectNET.cpp
+++ b/obj/NiObjectNET.cpp
@@ -41,7 +41,7 @@ string NiObjectNET::GetName() {
 	return name;
 }
 
-void NiObjectNET::SetName( string & new_name ) {
+void NiObjectNET::SetName( const string & new_name ) {
 	name = new_name;
 }
 
diff --git a/obj/NiObjectNET.h b/obj/NiObjectNET.h
index 268db450..b1e2e5d3 100644
--- a/obj/NiObjectNET.h
+++ b/obj/NiObjectNET.h
@@ -41,7 +41,7 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 
 	string GetName();
-	void SetName( string & new_name );
+	void SetName( const string & new_name );
 	/*!
 	 * Formats a human readable string that includes the type of the object
 	 * \return A string in the form:  address(type) {name}
diff --git a/obj/bhkCollisionObject.cpp b/obj/bhkCollisionObject.cpp
index 73f35d53..a4babe10 100644
--- a/obj/bhkCollisionObject.cpp
+++ b/obj/bhkCollisionObject.cpp
@@ -28,7 +28,10 @@ void bhkCollisionObject::FixLinks( const vector<NiObjectRef> & objects, list<uin
 }
 
 list<NiObjectRef> bhkCollisionObject::GetRefs() const {
-	BHK_COLLISION_OBJECT_GETREFS
+//	BHK_COLLISION_OBJECT_GETREFS
+	list<NiObjectRef> refs =  InternalGetRefs();
+	refs.reverse();
+	return refs;
 }
 
 const Type & bhkCollisionObject::GetType() const {
diff --git a/obj/bhkEntity.cpp b/obj/bhkEntity.cpp
index b2463e4a..3f6740f7 100644
--- a/obj/bhkEntity.cpp
+++ b/obj/bhkEntity.cpp
@@ -36,3 +36,12 @@ const Type & bhkEntity::GetType() const {
 	return TYPE;
 };
 
+void bhkEntity::SetShape(const Ref<bhkShape> &s)
+{
+	shape = s;
+}
+
+void bhkEntity::SetLayer(int l)
+{
+	layer = l;
+}
diff --git a/obj/bhkEntity.h b/obj/bhkEntity.h
index 339d31d6..b672b7f5 100644
--- a/obj/bhkEntity.h
+++ b/obj/bhkEntity.h
@@ -38,6 +38,9 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void SetShape(const Ref<bhkShape> &);
+	void SetLayer(int layer);
+
 protected:
 	BHK_ENTITY_MEMBERS
 	STANDARD_INTERNAL_METHODS
diff --git a/obj/bhkNiTriStripsShape.cpp b/obj/bhkNiTriStripsShape.cpp
index ece80031..6077a69f 100644
--- a/obj/bhkNiTriStripsShape.cpp
+++ b/obj/bhkNiTriStripsShape.cpp
@@ -36,3 +36,14 @@ const Type & bhkNiTriStripsShape::GetType() const {
 	return TYPE;
 };
 
+void bhkNiTriStripsShape::SetNumStripsData(int n)
+{
+	numStripsData = n;
+	stripsData.resize(n);
+}
+
+void bhkNiTriStripsShape::SetStripsData(int i, Ref<NiTriStripsData> &strips)
+{
+	stripsData[i] = strips;
+}
+
diff --git a/obj/bhkNiTriStripsShape.h b/obj/bhkNiTriStripsShape.h
index f718e884..00a8dbb7 100644
--- a/obj/bhkNiTriStripsShape.h
+++ b/obj/bhkNiTriStripsShape.h
@@ -38,6 +38,9 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void	SetNumStripsData(int i);
+	void	SetStripsData(int i, Ref<NiTriStripsData> &);
+
 protected:
 	BHK_NI_TRI_STRIPS_SHAPE_MEMBERS
 	STANDARD_INTERNAL_METHODS
diff --git a/obj/bhkRigidBody.cpp b/obj/bhkRigidBody.cpp
index 21037095..5f879081 100644
--- a/obj/bhkRigidBody.cpp
+++ b/obj/bhkRigidBody.cpp
@@ -37,3 +37,18 @@ const Type & bhkRigidBody::GetType() const {
 	return TYPE;
 };
 
+void bhkRigidBody::SetTranslation(const Vector3 &v)
+{
+	translation = v;
+}
+
+void bhkRigidBody::SetRotation(const QuaternionXYZW &q)
+{
+	rotation = q;
+}
+
+void bhkRigidBody::SetLayerCopy(int l)
+{
+	layerCopy_ = l;
+}
+
diff --git a/obj/bhkRigidBody.h b/obj/bhkRigidBody.h
index c04a41e1..96977efd 100644
--- a/obj/bhkRigidBody.h
+++ b/obj/bhkRigidBody.h
@@ -39,6 +39,10 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void SetTranslation(const Vector3 &v);
+	void SetRotation(const QuaternionXYZW &q);
+	void SetLayerCopy(int l);
+
 protected:
 	BHK_RIGID_BODY_MEMBERS
 	STANDARD_INTERNAL_METHODS
diff --git a/obj/bhkSphereRepShape.cpp b/obj/bhkSphereRepShape.cpp
index 43c8c4ad..d6353be7 100644
--- a/obj/bhkSphereRepShape.cpp
+++ b/obj/bhkSphereRepShape.cpp
@@ -35,3 +35,7 @@ const Type & bhkSphereRepShape::GetType() const {
 	return TYPE;
 };
 
+void bhkSphereRepShape::SetMaterial(int m)
+{
+	material = m;
+}
diff --git a/obj/bhkSphereRepShape.h b/obj/bhkSphereRepShape.h
index 4536c968..5ccfdfc0 100644
--- a/obj/bhkSphereRepShape.h
+++ b/obj/bhkSphereRepShape.h
@@ -34,6 +34,8 @@ public:
 	virtual list<NiObjectRef> GetRefs() const;
 	virtual const Type & GetType() const;
 
+	void SetMaterial(int m);
+
 protected:
 	BHK_SPHERE_REP_SHAPE_MEMBERS
 	STANDARD_INTERNAL_METHODS
-- 
GitLab