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(); } } }
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; }
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(); }