- //Set old position to current position
- if (muscleview == 2)
- for (int i = 0; i < num_joints; i++) {
- joints[i].oldposition = joints[i].position;
- }
- glDepthMask(1);
-}
-
-/* EFFECT
- *
- * USES:
- * NONE
- */
-void Skeleton::AddJoint(float x, float y, float z, int which)
-{
- if (num_joints < max_joints - 1) {
- joints[num_joints].velocity = 0;
- joints[num_joints].position.x = x;
- joints[num_joints].position.y = y;
- joints[num_joints].position.z = z;
- joints[num_joints].mass = 1;
- joints[num_joints].locked = 0;
-
- joints[num_joints].hasparent = 0;
- num_joints++;
- if (which < num_joints && which >= 0)
- AddMuscle(num_joints - 1, which, 0, 10, boneconnect);
- }
-}
-
-/* EFFECT
- *
- * USES:
- * NONE
- */
-void Skeleton::DeleteJoint(int whichjoint)
-{
- if (whichjoint < num_joints && whichjoint >= 0) {
- joints[whichjoint].velocity = joints[num_joints - 1].velocity;
- joints[whichjoint].position = joints[num_joints - 1].position;
- joints[whichjoint].oldposition = joints[num_joints - 1].oldposition;
- joints[whichjoint].hasparent = joints[num_joints - 1].hasparent;
- joints[whichjoint].parent = joints[num_joints - 1].parent;
- joints[whichjoint].length = joints[num_joints - 1].length;
- joints[whichjoint].locked = joints[num_joints - 1].locked;
- joints[whichjoint].modelnum = joints[num_joints - 1].modelnum;
- joints[whichjoint].visible = joints[num_joints - 1].visible;
-
- for (int i = 0; i < num_muscles; i++) {
- while (muscles[i].parent1 == &joints[whichjoint] && i < num_muscles)DeleteMuscle(i);
- while (muscles[i].parent2 == &joints[whichjoint] && i < num_muscles)DeleteMuscle(i);
- }
- for (int i = 0; i < num_muscles; i++) {
- while (muscles[i].parent1 == &joints[num_joints - 1] && i < num_muscles)muscles[i].parent1 = &joints[whichjoint];
- while (muscles[i].parent2 == &joints[num_joints - 1] && i < num_muscles)muscles[i].parent2 = &joints[whichjoint];
- }
- for (int i = 0; i < num_joints; i++) {
- if (joints[i].parent == &joints[whichjoint])
- joints[i].hasparent = 0;
- }
- for (int i = 0; i < num_joints; i++) {
- if (joints[i].parent == &joints[num_joints - 1])
- joints[i].parent = &joints[whichjoint];
- }
-
- num_joints--;
- }
-}
-
-/* EFFECT
- *
- * USES:
- * Skeleton::DeleteJoint - UNUSED
- */
-void Skeleton::DeleteMuscle(int whichmuscle)
-{
- if (whichmuscle < num_muscles) {
- muscles[whichmuscle].minlength = muscles[num_muscles - 1].minlength;
- muscles[whichmuscle].maxlength = muscles[num_muscles - 1].maxlength;
- muscles[whichmuscle].strength = muscles[num_muscles - 1].strength;
- muscles[whichmuscle].parent1 = muscles[num_muscles - 1].parent1;
- muscles[whichmuscle].parent2 = muscles[num_muscles - 1].parent2;
- muscles[whichmuscle].length = muscles[num_muscles - 1].length;
- muscles[whichmuscle].visible = muscles[num_muscles - 1].visible;
- muscles[whichmuscle].type = muscles[num_muscles - 1].type;
- muscles[whichmuscle].targetlength = muscles[num_muscles - 1].targetlength;
-
- num_muscles--;
- }
-}
-
-/* EFFECT
- *
- * USES:
- * NONE
- */
-void Skeleton::SetJoint(float x, float y, float z, int which, int whichjoint)
-{
- if (whichjoint < num_joints) {
- joints[whichjoint].velocity = 0;
- joints[whichjoint].position.x = x;
- joints[whichjoint].position.y = y;
- joints[whichjoint].position.z = z;
-
- if (which >= num_joints || which < 0)
- joints[whichjoint].hasparent = 0;
- if (which < num_joints && which >= 0) {
- joints[whichjoint].parent = &joints[which];
- joints[whichjoint].hasparent = 1;
- joints[whichjoint].length = findDistance(&joints[whichjoint].position, &joints[whichjoint].parent->position);
- }
- }
-}
-
-/* EFFECT
- *
- * USES:
- * Skeleton::AddJoint - UNUSED
- */
-void Skeleton::AddMuscle(int attach1, int attach2, float minlength, float maxlength, int type)
-{
- const int max_muscles = 100; // FIXME: Probably can be dropped
- if (num_muscles < max_muscles - 1 && attach1 < num_joints && attach1 >= 0 && attach2 < num_joints && attach2 >= 0 && attach1 != attach2) {
- muscles[num_muscles].parent1 = &joints[attach1];
- muscles[num_muscles].parent2 = &joints[attach2];
- muscles[num_muscles].length = findDistance(&muscles[num_muscles].parent1->position, &muscles[num_muscles].parent2->position);
- muscles[num_muscles].targetlength = findDistance(&muscles[num_muscles].parent1->position, &muscles[num_muscles].parent2->position);
- muscles[num_muscles].strength = .7;
- muscles[num_muscles].type = type;
- muscles[num_muscles].minlength = minlength;
- muscles[num_muscles].maxlength = maxlength;
-
- num_muscles++;
- }
-}
-
-/* EFFECT
- *
- * USES:
- * NONE
- */
-void Skeleton::MusclesSet()
-{
- for (int i = 0; i < num_muscles; i++) {
- muscles[i].length = findDistance(&muscles[i].parent1->position, &muscles[i].parent2->position);
- }
-}
-
-/* EFFECT
- *
- * USES:
- * NONE
- */
-void Skeleton::DoBalance()
-{
- /*XYZ newpoint;
- newpoint=joints[0].position;
- newpoint.x=(joints[2].position.x+joints[4].position.x)/2;
- newpoint.z=(joints[2].position.z+joints[4].position.z)/2;
- joints[0].velocity=joints[0].velocity+(newpoint-joints[0].position);
- //Move child point to within certain distance of parent point
- joints[0].position=newpoint;
-
- MusclesSet();*/