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);
            }
        }
    }
Beispiel #2
0
    //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();
    }