Ejemplo n.º 1
0
        public override void ControllerStart()
        {
            base.ControllerStart();

            // Set default configuration if needed
            if (model.configuration == null)
            {
                model.configuration = BasicHelpers.FindScriptableObject <GestureDetectionConfiguration>(HPTK.core.defaultConfAssets);
            }

            if (model.configuration == null)
            {
                Debug.LogError("Any GestureDetectionConfiguration found in GestureDetectionModel or HPTK.core.defaultConfAssets. The module cannot continue");
                gameObject.SetActive(false);
                return;
            }

            // Init gestures
            InitHandGesture(model.grasp);
            InitHandGesture(model.fist);
            model.extra.ForEach(g => InitHandGesture(g));

            InitFingerGestureGroup(model.thumb, model.hand.thumb);
            InitFingerGestureGroup(model.index, model.hand.index);
            InitFingerGestureGroup(model.middle, model.hand.middle);
            InitFingerGestureGroup(model.ring, model.hand.ring);
            InitFingerGestureGroup(model.pinky, model.hand.pinky);
        }
Ejemplo n.º 2
0
        public override sealed void ControllerStart()
        {
            base.ControllerStart();

            // Set default configuration if needed
            if (model.configuration == null)
            {
                model.configuration = BasicHelpers.FindScriptableObject <PuppetConfiguration>(HPTK.core.defaultConfAssets);
            }

            if (model.configuration == null)
            {
                Debug.LogError("Any PuppetConfiguration found in PuppetModel or HPTK.core.defaultConfAssets. The module cannot continue");
                return;
            }

            // Start parts and bones recursively
            PartStart(model.part);

            // Start bones
            model.bones.ForEach(b => BoneStart(b, model.part.root));
            model.bones.ForEach(b => LateBoneStart(b));

            model.view.onPhysicsReady.Invoke();

            model.ready = true;
        }
Ejemplo n.º 3
0
        private void Start()
        {
            model.proxyHand.relatedHandlers.Add(this);

            slaveBones = AvatarHelpers.GetSlaveHandBones(model.proxyHand.slave);

            // Set default configuration if needed
            if (model.asset == null)
            {
                model.asset = BasicHelpers.FindScriptableObject <HandPhysicsConfigurationAsset>(core.model.defaultConfAssets);
            }

            // Make configuration editable
            model.configuration = new HandPhysicsConfiguration(model.asset.configuration);

            for (int i = 0; i < slaveBones.Length; i++)
            {
                if (slaveBones[i].colliderRef)
                {
                    // Ignore palm-finger collisions
                    Physics.IgnoreCollision((model.proxyHand.slave.wrist as SlaveBoneModel).colliderRef, slaveBones[i].colliderRef, true);
                }

                if (slaveBones[i].jointRef)
                {
                    // Get initial connected body local rotations and conn anchors
                    if (slaveBones[i].jointRef.connectedBody != null)
                    {
                        slaveBones[i].initialConnectedBodyLocalRotation     = slaveBones[i].jointRef.connectedBody.transform.localRotation;
                        slaveBones[i].initialConnectedAnchor                = slaveBones[i].jointRef.connectedAnchor;
                        slaveBones[i].jointRef.autoConfigureConnectedAnchor = false;
                    }
                    else
                    {
                        slaveBones[i].initialConnectedBodyLocalRotation = slaveBones[i].jointRef.transform.rotation;
                    }

                    // Set initial joint configurations
                    if (slaveBones[i] == model.proxyHand.slave.wrist)
                    {
                        PhysHelpers.SetSlaveBoneConfiguration(slaveBones[i].jointRef, model.configuration.wrist);
                    }
                    else if (slaveBones[i].isSpecial)
                    {
                        PhysHelpers.SetSlaveBoneConfiguration(slaveBones[i].jointRef, model.configuration.specials);
                    }
                    else
                    {
                        PhysHelpers.SetSlaveBoneConfiguration(slaveBones[i].jointRef, model.configuration.fingers);
                    }

                    // Initial built-in velocity clamps
                    slaveBones[i].rigidbodyRef.maxDepenetrationVelocity = model.configuration.fingers.maxLinearVelocity;
                    slaveBones[i].rigidbodyRef.maxAngularVelocity       = model.configuration.fingers.maxAngularVelocity;
                }
            }
        }
Ejemplo n.º 4
0
        private void Start()
        {
            // Module registry
            model.proxyHand.relatedHandlers.Add(this);

            // Set default configuration if needed
            if (model.configuration == null)
            {
                model.configuration = BasicHelpers.FindScriptableObject <InputConfiguration>(core.model.defaultConfAssets);
            }
            conf = model.configuration;

            // Input data for finger tips can be ignored as it will depend on the master hand model
            // This array MUST match model.inputDataProvider.bones[]
            model.bonesToUpdate = new MasterBoneModel[19]
            {
                model.wrist,
                model.forearm,
                model.thumb0,
                model.thumb1,
                model.thumb2,
                model.thumb3,
                model.index1,
                model.index2,
                model.index3,
                model.middle1,
                model.middle2,
                model.middle3,
                model.ring1,
                model.ring2,
                model.ring3,
                model.pinky0,
                model.pinky1,
                model.pinky2,
                model.pinky3
            };

            if (model.inputDataProvider)
            {
                model.inputDataProvider.InitData();
                initialized = true;
            }
            else
            {
                Debug.LogError("InputModel.InputDataProvider is required!");
            }

            // Initialize recording arrays
            model.boneRecords = new AbstractTsf[model.bonesToUpdate.Length][];
            for (int i = 0; i < model.boneRecords.Length; i++)
            {
                model.boneRecords[i] = new AbstractTsf[model.configuration.windowSize];

                for (int j = 0; j < model.boneRecords[i].Length; j++)
                {
                    // Initial state of records is the same as in IDP
                    model.boneRecords[i][j] = new AbstractTsf(model.inputDataProvider.bones[i]);
                }
            }

            // Get weights for noise reduction (WMA)
            model.wmaWeights = GetLinearWeights(model.configuration.windowSize);
        }
Ejemplo n.º 5
0
        public override void ControllerStart()
        {
            base.ControllerStart();

            if (model.autoRigMappingOnStart)
            {
                AutomaticRigMapping();
            }

            // Set default configuration if needed
            if (model.configuration == null)
            {
                model.configuration = BasicHelpers.FindScriptableObject <InputConfiguration>(HPTK.core.defaultConfAssets);
            }

            if (model.configuration == null)
            {
                Debug.LogError("Any InputConfiguration found in InputModel or HPTK.core.defaultConfAssets. The module cannot continue");
                gameObject.SetActive(false);
                return;
            }

            // Input data for finger tips can be ignored as it will depend on the master hand model
            // This array MUST match model.inputDataProvider.bones[]
            model.bonesToUpdate = new BoneModel[19]
            {
                model.rigMap.wrist,
                model.rigMap.forearm,
                model.rigMap.thumb0,
                model.rigMap.thumb1,
                model.rigMap.thumb2,
                model.rigMap.thumb3,
                model.rigMap.index1,
                model.rigMap.index2,
                model.rigMap.index3,
                model.rigMap.middle1,
                model.rigMap.middle2,
                model.rigMap.middle3,
                model.rigMap.ring1,
                model.rigMap.ring2,
                model.rigMap.ring3,
                model.rigMap.pinky0,
                model.rigMap.pinky1,
                model.rigMap.pinky2,
                model.rigMap.pinky3
            };

            if (!model.inputDataProvider)
            {
                model.inputDataProvider = HPTK.core.GetDefaultIdp(model.hand.side);
            }

            if (model.inputDataProvider) // Force/Trigger set function from property
            {
                model.view.inputDataProvider = model.inputDataProvider;
            }
            else
            {
                Debug.LogWarning("InputModel.InputDataProvider is not assigned on Start");
            }

            // Get weights for noise reduction (WMA)
            model.wmaWeights = InputHelpers.GetLinearWeights(model.configuration.windowSize);

            // Conf shortcut
            conf = model.configuration;
        }