Esempio n. 1
0
        void EmitEvents(MasterHandModel master, ProxyHandHandler handler, bool wasPinching, bool wasGrasping)
        {
            if (master.index.isPinching != wasPinching)
            {
                if (master.index.isPinching)
                {
                    handler.onIndexPinch.Invoke();
                }
                else
                {
                    handler.onIndexUnpinch.Invoke();
                }
            }

            if (master.isGrasping != wasGrasping)
            {
                if (master.isGrasping)
                {
                    handler.onGrasp.Invoke();
                }
                else
                {
                    handler.onUngrasp.Invoke();
                }
            }
        }
Esempio n. 2
0
    void SetupProxyHandModule()
    {
        // CustomHand > [Modules] > ProxyHandModule
        GameObject proxyHandModule = Instantiate(proxyHandModulePrefab, modules.transform.position, modules.transform.rotation);

        proxyHandModule.transform.parent = modules.transform;
        proxyHandModule.transform.name   = "ProxyHandModule." + handType.ToString();

        phModel = proxyHandModule.GetComponentInChildren <ProxyHandModel>();

        // CustomHand > [Modules] > ProxyHandModule > ProxyHandModel > Master
        GameObject masterHandModelObj = BasicHelpers.InstantiateEmptyChild(phModel.gameObject);

        masterHandModelObj.name = "Master." + handType.ToString();
        masterHandModel         = masterHandModelObj.AddComponent <MasterHandModel>();

        // CustomHand > [Modules] > ProxyHandModule > ProxyHandModel > Slave
        GameObject slaveHandModelObj = BasicHelpers.InstantiateEmptyChild(phModel.gameObject);

        slaveHandModelObj.name = "Slave." + handType.ToString();
        slaveHandModel         = slaveHandModelObj.AddComponent <SlaveHandModel>();

        // CustomHand > [Modules] > ProxyHandModule > ProxyHandModel > Ghost
        GameObject ghostHandModelObj = BasicHelpers.InstantiateEmptyChild(phModel.gameObject);

        ghostHandModelObj.name = "Ghost." + handType.ToString();
        ghostHandModel         = ghostHandModelObj.AddComponent <HandModel>();

        // Make HandModels accessible from ProxyHandModel
        phModel.master = masterHandModel;
        phModel.slave  = slaveHandModel;
        phModel.ghost  = ghostHandModel;

        // Make ProxyHandModel accessible from HandModel
        masterHandModel.proxyHand = phModel;
        slaveHandModel.proxyHand  = phModel;
        ghostHandModel.proxyHand  = phModel;
    }
Esempio n. 3
0
    void SetupMasterHandModel(MasterHandModel handModel, Transform masterWrist, Transform masterWristOffset)
    {
        // CustomHand > [Modules] > ProxyHandModule > ProxyHandModel > Master > Wrist
        GameObject wristBoneModelObj = BasicHelpers.InstantiateEmptyChild(handModel.gameObject);

        wristBoneModelObj.name = "Wrist";

        MasterBoneModel wristBone = wristBoneModelObj.AddComponent <MasterBoneModel>();

        wristBone.transformRef = masterWrist;
        handModel.wrist        = wristBone;

        /* SLAVE BONE MODEL SPECIFIC
         */

        wristBone.offset = masterWristOffset;

        /*
         */

        // Set SkinnedMR
        handModel.skinnedMR = masterWrist.GetComponent <SkinnedMeshRenderer>();

        List <FingerModel> fingers = new List <FingerModel>();

        for (int f = 0; f < masterWristOffset.childCount; f++)
        {
            // If childCount is 0, then it's not a finger
            if (masterWristOffset.GetChild(f).childCount == 0)
            {
                continue;
            }

            // CustomHand > [Modules] > ProxyHandModule > ProxyHandModel > Master > Finger
            GameObject fingerModelObj = BasicHelpers.InstantiateEmptyChild(handModel.gameObject);
            fingerModelObj.name = "Finger" + f;

            FingerModel fingerModel = fingerModelObj.AddComponent <FingerModel>();

            List <BoneModel> bones = new List <BoneModel>();

            Transform[] fingerTransforms = GetFingerTransforms(masterWristOffset.GetChild(f));
            for (int b = 0; b < fingerTransforms.Length; b++)
            {
                // If childCount is 0, then it's a fingerTip
                if (fingerTransforms[b].childCount == 0)
                {
                    fingerModel.fingerTip = fingerTransforms[b];
                    continue;
                }

                // CustomHand > [Modules] > ProxyHandModule > ProxyHandModel > Master > Finger > Bone

                GameObject boneModelObj = BasicHelpers.InstantiateEmptyChild(fingerModelObj);
                boneModelObj.transform.name = "Bone" + b;

                MasterBoneModel masterBone = boneModelObj.AddComponent <MasterBoneModel>();
                masterBone.transformRef = fingerTransforms[b];

                bones.Add(masterBone);
            }

            fingerModel.fingerBase = bones[0].transformRef;
            fingerModel.distal     = bones[bones.Count - 1];

            fingerModel.bones = bones.ToArray();

            /* SLAVE BONE MODEL SPECIFIC
             */

            /*
             */

            fingers.Add(fingerModel);

            if (f == indexSiblingIndex)
            {
                fingerModel.name = "Index";
                handModel.index  = fingerModel;
            }

            if (f == thumbSiblingIndex)
            {
                fingerModel.name = "Thumb";
                handModel.thumb  = fingerModel;
            }
        }

        handModel.fingers = fingers.ToArray();
    }