Exemplo n.º 1
0
        public OnlineVRController()
        {
            VRController original = GetComponent <VRController>();

            foreach (FieldInfo info in original.GetType().GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.NonPublic))
            {
                info.SetValue(this, info.GetValue(original));
            }

            _platformHelper  = original.GetPrivateField <VRPlatformHelper>("_vrPlatformHelper");
            _transformOffset = original.GetPrivateField <VRControllerTransformOffset>("_transformOffset");

            Destroy(original);
        }
Exemplo n.º 2
0
        static bool Prefix(VRController __instance)
        {
            if (!Plugin.IsEnabled)
            {
                return(true);
            }
            if (!ReferenceEquals(__instance, SaberGrip.LeftSaber) &&
                !ReferenceEquals(__instance, SaberGrip.RightSaber))
            {
                return(true);
            }

            Vector3 translation;
            Vector3 rotation;

            if (ReferenceEquals(__instance, SaberGrip.LeftSaber))
            {
                translation = Preferences.LeftTranslation;
                rotation    = Preferences.LeftRotation;
            }
            else
            {
                translation = Preferences.RightTranslation;
                rotation    = Preferences.RightRotation;
            }

            // Begin Default Behaviour

            var node = __instance.GetPrivateField <XRNode>("_node");
            var lastTrackedPosition = __instance.GetPrivateField <Vector3>("_lastTrackedPosition");

            var localPosition = InputTracking.GetLocalPosition(node);
            var localRotation = InputTracking.GetLocalRotation(node);

            if (localPosition == Vector3.zero)
            {
                if (lastTrackedPosition != Vector3.zero)
                {
                    localPosition = lastTrackedPosition;
                }
                else if (node == XRNode.LeftHand)
                {
                    localPosition = new Vector3(-0.2f, 0.05f, 0f);
                }
                else if (node == XRNode.RightHand)
                {
                    localPosition = new Vector3(0.2f, 0.05f, 0f);
                }
            }
            else
            {
                __instance.SetPrivateField("_lastTrackedPosition", localPosition);
            }

            __instance.transform.localPosition = localPosition;
            __instance.transform.localRotation = localRotation;

            // End Default Behaviour

            __instance.transform.Translate(translation);
            __instance.transform.Rotate(rotation);

            return(false);
        }