public void ConvertToIKLimb(RoboticLimbMirror mirrorLimb) { // Debug.Log("create ik leg"); var servosMirror = servos; servosIK = new List <RoboticServoIK>(); var newServos = new List <RoboticServo>(); //Convert the mirror servos to Ik servos foreach (var servo in servosMirror) { var newServoIK = servo.gameObject.AddComponent(typeof(RoboticServoIK)) as RoboticServoIK; servo.Clone(newServoIK); servosIK.Add(newServoIK); newServos.Add(newServoIK); } for (int i = 0; i < servosMirror.Length; i++) { if (servosMirror[i].servoParent) { servosIK[i].servoParent = servosMirror[i].servoParent.gameObject.GetComponent <RoboticServoIK>(); } if (servosMirror[i].servoChild) { servosIK[i].servoChild = servosMirror[i].servoChild.gameObject.GetComponent <RoboticServoIK>(); } } foreach (var servo in servosMirror) { Destroy(servo); } //Link the RoboticServoMirror and RoboticServoIk components foreach (var servo in servosIK) { var mirrorPart = mirrorLimb.FindServo(servo.hostPart.ID); servo.SetMirrorServo(mirrorPart.GetComponent <RoboticServoMirror>()); } servosMirror = new List <RoboticServoMirror>().ToArray(); servos = newServos.ToArray(); DisableParts(); var children = GetComponentsInChildren <Transform>(); foreach (var child in children) { if (child.name.Contains("True End Point ")) { trueLimbEnd = child; limbEnd = trueLimbEnd; // trueLimbEnd.name = "Collision Point"; // DebugVector.DrawVector(trueLimbEnd, DebugVector.Direction.all, 5f, .1f, Color.red, Color.white, Color.blue); } } }
//Creates RoboticLimb components for the mirror and IK leg, adds them to limb base servo base, then aranges the hiarchy void CreateRoboticLegs(List <RoboticServoMirror> servosMirror) { //Set up mirrorLimb component on the base part base baseMirror = servoBase.servoBase.transform; limbMirror = baseMirror.gameObject.AddComponent(typeof(RoboticLimbMirror)) as RoboticLimbMirror; limbMirror.CustomStart(this); limbMirror.servosMirror = servosMirror; limbMirror.SetLimbReference(); limbMirror.FindEndPoint(); //Move the Limb controller component Object into place transform.SetParent(baseMirror); transform.localPosition = Vector3.zero; transform.LookAt(baseMirror.up);//,vesselControl.mirrorVessel.transform.up); transform.rotation = Quaternion.LookRotation(baseMirror.up, vesselControl.adjustedGimbal.up); // transform.rotation = vesselControl.mirrorVessel.transform.rotation; transform.SetParent(baseMirror.parent); baseMirror.SetParent(transform); //get mirror limb groups before generating IK limb limbMirror.CalculateGroups(); baseIK = Instantiate(baseMirror).transform; baseMirror.name += "Mirror Arm"; baseIK.name += "IK Arm"; baseIK.SetParent(transform); baseIK.rotation = limbMirror.transform.rotation; baseIK.localPosition = Vector3.zero; ////Mirror leg and limb controller are in place, set reference for IK limb that was generated, then build the leg var mirrorLimb = baseIK.gameObject.GetComponent <RoboticLimbMirror>(); limbIK = baseIK.gameObject.AddComponent <RoboticLimbIK>(); limbIK.CustomStart(this); // limbIK.servoWrist = mirrorLimb.servoWrist; // limbIK.servoBase = mirrorLimb.servoBase; //limbIK.limbController = mirrorLimb.limbController; // limbIK.limbEnd = mirrorLimb.limbEnd; Destroy(mirrorLimb); limbIK.ConvertToIKLimb(limbMirror); limbIK.SetLimbReference(); // limbIK.FindEndPoint(false, "ik"); limbIK.StoreGroupedServos(); }
public void ConvertToIKLimb(RoboticLimbMirror mirrorLimb) { // Debug.Log("create ik leg"); var servosMirror = servos; servosIK = new List <RoboticServoIK>(); var newServos = new List <RoboticServo>(); //Convert the mirror servos to Ik servos foreach (var servo in servosMirror) { var newServoIK = servo.gameObject.AddComponent(typeof(RoboticServoIK)) as RoboticServoIK; servo.Clone(newServoIK); servosIK.Add(newServoIK); newServos.Add(newServoIK); } for (int i = 0; i < servosMirror.Length; i++) { if (servosMirror[i].servoParent) { servosIK[i].servoParent = servosMirror[i].servoParent.gameObject.GetComponent <RoboticServoIK>(); } if (servosMirror[i].servoChild) { servosIK[i].servoChild = servosMirror[i].servoChild.gameObject.GetComponent <RoboticServoIK>(); } } foreach (var servo in servosMirror) { Destroy(servo); } //Link the RoboticServoMirror and RoboticServoIk components foreach (var servo in servosIK) { var mirrorPart = mirrorLimb.FindServo(servo.hostPart.ID); servo.SetMirrorServo(mirrorPart.GetComponent <RoboticServoMirror>()); } servosMirror = new List <RoboticServoMirror>().ToArray(); servos = newServos.ToArray(); DisableParts(); }