Exemple #1
0
    public virtual void OnBeginDrag(PointerEventData eventData)
    {
        var hitDistance = 0f;

        switch (eventData.button)
        {
        case PointerEventData.InputButton.Middle:
        case PointerEventData.InputButton.Right:
            hitDistance = Mathf.Min(eventData.pointerPressRaycast.distance, m_initGrabDistance);
            break;

        case PointerEventData.InputButton.Left:
            hitDistance = eventData.pointerPressRaycast.distance;
            break;

        default:
            return;
        }

        var grabber = Grabber.Get(eventData);

        grabber.grabber2hit = new RigidPose(new Vector3(0f, 0f, hitDistance), Quaternion.identity);
        grabber.hit2pivot   = RigidPose.FromToPose(grabber.grabberOrigin * grabber.grabber2hit, new RigidPose(transform));

        if (m_eventGrabberSet == null)
        {
            m_eventGrabberSet = new IndexedTable <PointerEventData, Grabber>();
        }
        m_eventGrabberSet.Add(eventData, grabber);

        AddGrabber(grabber);
    }
 public Grabber(IColliderEventCaster eventCaster, GameObject obj)
 {
     Debug.Log(3);
     this.eventCaster = eventCaster;
     this.grabbingObj = obj;
     this.grabOffset  = RigidPose.FromToPose(new RigidPose(eventCaster.transform), new RigidPose(obj.transform));
 }
        public virtual void OnColliderEventDragStart(ColliderButtonEventData eventData)
        {
            if (eventData.button != m_grabButton)
            {
                return;
            }

            var casterPose = GetEventPose(eventData);
            var offsetPose = RigidPose.FromToPose(casterPose, new RigidPose(transform));

            if (alignPosition)
            {
                offsetPose.pos = Vector3.zero;
            }
            if (alignRotation)
            {
                offsetPose.rot = Quaternion.identity;
            }

            if (eventData != grabbedEvent && beforeRelease != null)
            {
                beforeRelease.Invoke(this);
            }

            eventList.AddUniqueKey(eventData, offsetPose);

            if (afterGrabbed != null)
            {
                afterGrabbed.Invoke(this);
            }
        }
        public virtual void OnColliderEventDragStart(ColliderButtonEventData eventData)
        {
            if (eventData.button != m_grabButton)
            {
                return;
            }

            if (!m_allowMultipleGrabbers)
            {
                ClearGrabbers(false);
                ClearEventGrabberSet();
            }

            var grabber = Grabber.Get(eventData);
            var offset  = RigidPose.FromToPose(grabber.grabberOrigin, new RigidPose(transform));

            if (alignPosition)
            {
                offset.pos = alignPositionOffset;
            }
            if (alignRotation)
            {
                offset.rot = Quaternion.Euler(alignRotationOffset);
            }
            grabber.grabOffset = offset;

            if (m_eventGrabberSet == null)
            {
                m_eventGrabberSet = new IndexedTable <ColliderButtonEventData, Grabber>();
            }
            m_eventGrabberSet.Add(eventData, grabber);

            AddGrabber(grabber);
        }
Exemple #5
0
    public virtual void OnColliderEventDragStart(ColliderButtonEventData eventData)
    {
        if (!IsValidGrabButton(eventData))
        {
            return;
        }

        if (!m_allowMultipleGrabbers)
        {
            ClearGrabbers(false);
            ClearEventGrabberSet();
        }

        var grabber = BasicGrabbable.Grabber.Get(eventData);
        var offset  = RigidPose.FromToPose(grabber.grabberOrigin, new RigidPose(transform));

        grabber.grabOffset = offset;

        if (m_eventGrabberSet == null)
        {
            m_eventGrabberSet = new IndexedTable <ColliderButtonEventData, BasicGrabbable.Grabber>();
        }
        m_eventGrabberSet.Add(eventData, grabber);

        AddGrabber(grabber);
        Vector3 deltaVec          = grabber.grabberOrigin.pos - transform.position;
        Vector3 deltaVecProjected = Vector3.ProjectOnPlane(deltaVec, transform.up).normalized;

        initialDeltaDegrees = Vector3.SignedAngle(transform.forward, deltaVecProjected, transform.up);
    }
Exemple #6
0
    protected override Grabber CreateGrabber(PointerEventData eventData)
    {
        var   hitResult = eventData.pointerPressRaycast;
        float distance;

        switch (eventData.button)
        {
        case PointerEventData.InputButton.Middle:
        case PointerEventData.InputButton.Right:
            distance = Mathf.Min(hitResult.distance, initGrabDistance);
            break;

        case PointerEventData.InputButton.Left:
            distance = hitResult.distance;
            break;

        default:
            return(null);
        }

        var grabber = Grabber.Get(eventData);

        grabber.grabber2hit = new RigidPose(new Vector3(0f, 0f, distance), Quaternion.identity);
        grabber.hit2pivot   = RigidPose.FromToPose(new RigidPose(hitResult.worldPosition, hitResult.module.eventCamera.transform.rotation), new RigidPose(transform));
        return(grabber);
    }
        public virtual void OnColliderEventPressDown(ColliderButtonEventData eventData)
        {
            if (eventData.button != m_grabButton || eventList.ContainsKey(eventData) || eventData == m_bannedEventData)
            {
                return;
            }

            var casterPose = GetEventPose(eventData);
            var offsetPose = RigidPose.FromToPose(casterPose, new RigidPose(transform));

            if (alignPosition)
            {
                offsetPose.pos = Vector3.zero;
            }
            if (alignRotation)
            {
                offsetPose.rot = Quaternion.identity;
            }

            if (!m_multipleGrabbers && eventList.Count > 0)
            {
                Release();
            }

            eventList.AddUniqueKey(eventData, offsetPose);

            if (afterGrabbed != null)
            {
                afterGrabbed.Invoke(this);
            }
        }
Exemple #8
0
        public virtual void OnColliderEventDragStart(ColliderButtonEventData eventData)
        {
            if ((gameObject.tag.IndexOf("plant") == -1) || (gameObject.tag.IndexOf("plant") != -1 && Manager.Instance.IsFruitReady(Int32.Parse(gameObject.tag[gameObject.tag.Length - 1].ToString()))))
            {
                if (eventData.button != m_grabButton)
                {
                    return;
                }

                var casterPose = GetEventPose(eventData);
                var offsetPose = RigidPose.FromToPose(casterPose, new RigidPose(transform));

                if (alignPosition)
                {
                    offsetPose.pos = Vector3.zero;
                }
                if (alignRotation)
                {
                    offsetPose.rot = Quaternion.identity;
                }

                if (eventData != grabbedEvent && beforeRelease != null)
                {
                    beforeRelease.Invoke(this);
                }

                eventList.AddUniqueKey(eventData, offsetPose);

                if (afterGrabbed != null)
                {
                    afterGrabbed.Invoke(this);
                }
            }
        }
        public virtual void OnColliderEventPressDown(ColliderButtonEventData eventData)
        {
            GrabData grabData;

            if (eventData.button != m_grabButton)
            {
                return;
            }

            if (eventList.TryGetValue(eventData, out grabData))
            {
                switch (grabData.grabState)
                {
                case EventGrabState.JustReleased:
                    eventList.Remove(eventData);
                    if (m_toggleReleaseCheckedFrame == Time.frameCount)
                    {
                        // skip when this event just released at the same frame
                        return;
                    }
                    break;

                case EventGrabState.JustGrabbed:
                case EventGrabState.Grabbing:
                default:
                    return;
                }
            }

            if (!m_multipleGrabbers)
            {
                Release();
            }

            var casterPose = GetEventPose(eventData);
            var offsetPose = RigidPose.FromToPose(casterPose, new RigidPose(transform));

            if (alignPosition)
            {
                offsetPose.pos = Vector3.zero;
            }
            if (alignRotation)
            {
                offsetPose.rot = Quaternion.identity;
            }

            grabData = new GrabData()
            {
                offset    = offsetPose,
                grabState = isToggleReleaseCheckedThisFrame ? EventGrabState.Grabbing : EventGrabState.JustGrabbed,
            };

            eventList.AddUniqueKey(eventData, grabData);

            if (afterGrabbed != null)
            {
                afterGrabbed.Invoke(this);
            }
        }
        protected override Grabber CreateGrabber(ColliderButtonEventData eventData)
        {
            var grabber = Grabber.Get(eventData);
            var offset  = RigidPose.FromToPose(grabber.grabberOrigin, new RigidPose(transform));

            if (alignPosition)
            {
                offset.pos = alignPositionOffset;
            }
            if (alignRotation)
            {
                offset.rot = Quaternion.Euler(alignRotationOffset);
            }
            grabber.grabOffset = offset;

            return(grabber);
        }
Exemple #11
0
    public virtual void OnBeginDrag(PointerEventData eventData)
    {
        var hitDistance = 0f;

        //수정한 코드
        VivePointerEventData viveEventData;

        if (eventData.TryGetViveButtonEventData(out viveEventData))
        {
            if (viveEventData.viveButton == ControllerButton.Pad)
            {
                return;
            }
        }
        /////////////////////////////////
        switch (eventData.button)
        {
        case PointerEventData.InputButton.Middle:
        case PointerEventData.InputButton.Right:
            hitDistance = Mathf.Min(eventData.pointerPressRaycast.distance, m_initGrabDistance);
            break;

        case PointerEventData.InputButton.Left:
            hitDistance = eventData.pointerPressRaycast.distance;
            break;

        default:
            return;
        }

        var grabber = Grabber.Get(eventData);

        grabber.grabber2hit = new RigidPose(new Vector3(0f, 0f, hitDistance), Quaternion.identity);
        grabber.hit2pivot   = RigidPose.FromToPose(grabber.grabberOrigin * grabber.grabber2hit, new RigidPose(transform));

        if (m_eventGrabberSet == null)
        {
            m_eventGrabberSet = new IndexedTable <PointerEventData, Grabber>();
        }
        m_eventGrabberSet.Add(eventData, grabber);

        AddGrabber(grabber);


        GameObject.Find("LocalPlayer").GetComponent <isLocalPlayer>().CmdClientAuthority(gameObject);
    }
Exemple #12
0
        public virtual void OnColliderEventPressDown(ColliderButtonEventData eventData)
        {
            if (eventData.button != m_grabButton)
            {
                return;
            }

            Grabber grabber;

            if (m_eventGrabberSet == null || !m_eventGrabberSet.TryGetValue(eventData, out grabber))
            {
                if (!m_allowMultipleGrabbers)
                {
                    ClearGrabbers(false);
                    ClearEventGrabberSet();
                }

                grabber = Grabber.Get(eventData);
                var offset = RigidPose.FromToPose(grabber.grabberOrigin, new RigidPose(transform));
                if (alignPosition)
                {
                    offset.pos = alignPositionOffset;
                }
                if (alignRotation)
                {
                    offset.rot = Quaternion.Euler(alignRotationOffset);
                }
                grabber.grabOffset = offset;
                grabber.grabFrame  = Time.frameCount;

                if (m_eventGrabberSet == null)
                {
                    m_eventGrabberSet = new IndexedTable <ColliderButtonEventData, Grabber>();
                }
                m_eventGrabberSet.Add(eventData, grabber);

                AddGrabber(grabber);
            }
            else if (toggleToRelease)
            {
                RemoveGrabber(grabber);
                m_eventGrabberSet.Remove(eventData);
                Grabber.Release(grabber);
            }
        }
    public virtual void OnBeginDrag(PointerEventData eventData)
    {
        var casterPose = GetEventPose(eventData);
        var offsetPose = new RigidPose();

        switch (eventData.button)
        {
        case PointerEventData.InputButton.Middle:
        case PointerEventData.InputButton.Right:
        {
            var hitResult = eventData.pointerPressRaycast;
            var hitPose   = new RigidPose(hitResult.worldPosition, casterPose.rot);

            var caster2hit = new RigidPose(Vector3.forward * Mathf.Min(hitResult.distance, initGrabDistance), Quaternion.identity);
            var hit2center = RigidPose.FromToPose(hitPose, new RigidPose(transform));

            offsetPose = caster2hit * hit2center;
            break;
        }

        case PointerEventData.InputButton.Left:
        default:
        {
            offsetPose = RigidPose.FromToPose(casterPose, new RigidPose(transform));
            break;
        }
        }

        if (eventData != draggedEvent && beforeRelease != null)
        {
            beforeRelease.Invoke(this);
        }

        eventList.AddUniqueKey(eventData, offsetPose);

        if (afterDragged != null)
        {
            afterDragged.Invoke(this);
        }
    }
Exemple #14
0
        public virtual void OnColliderEventDragStart(ColliderButtonEventData eventData)
        {
            if (!IsValidGrabButton(eventData))
            {
                return;
            }

            if (!m_allowMultipleGrabbers)
            {
                ClearGrabbers(false);
                ClearEventGrabberSet();
            }

            var grabber = Grabber.Get(eventData);
            var offset  = RigidPose.FromToPose(grabber.grabberOrigin, new RigidPose(transform));

            if (alignPosition)
            {
                offset.pos = alignPositionOffset;
            }
            if (alignRotation)
            {
                offset.rot = Quaternion.Euler(alignRotationOffset);
            }
            grabber.grabOffset = offset;

            if (m_eventGrabberSet == null)
            {
                m_eventGrabberSet = new IndexedTable <ColliderButtonEventData, Grabber>();
            }
            m_eventGrabberSet.Add(eventData, grabber);
            lastJoy = eventData;

            AddGrabber(grabber);
            //if (gameObject.GetComponent<PortalTraveller>() != null) gameObject.GetComponent<PortalTraveller>().readyToTeleport = false;
        }
        private void InitializeDevice(IVRModuleDeviceStateRW hmdState, IVRModuleDeviceStateRW deviceState)
        {
            switch (deviceState.deviceIndex)
            {
            case VRModule.HMD_DEVICE_INDEX:
            {
                deviceState.isConnected     = true;
                deviceState.deviceClass     = VRModuleDeviceClass.HMD;
                deviceState.serialNumber    = "VIU Simulator HMD Device";
                deviceState.modelNumber     = deviceState.serialNumber;
                deviceState.renderModelName = deviceState.serialNumber;
                deviceState.deviceModel     = VRModuleDeviceModel.ViveHMD;

                deviceState.isPoseValid = true;
                deviceState.pose        = s_initHmdPose;

                break;
            }

            case RIGHT_INDEX:
            {
                deviceState.isConnected     = true;
                deviceState.deviceClass     = VRModuleDeviceClass.Controller;
                deviceState.serialNumber    = "VIU Simulator Controller Device " + RIGHT_INDEX;
                deviceState.modelNumber     = deviceState.serialNumber;
                deviceState.renderModelName = deviceState.serialNumber;
                deviceState.deviceModel     = VRModuleDeviceModel.ViveController;

                var pose = new RigidPose(new Vector3(0.3f, -0.25f, 0.7f), Quaternion.identity);
                deviceState.isPoseValid   = true;
                deviceState.pose          = (hmdState.isConnected ? hmdState.pose : s_initHmdPose) * pose;
                s_offsetRightController   = RigidPose.FromToPose(hmdState.isConnected ? hmdState.pose : s_initHmdPose, deviceState.pose);
                deviceState.buttonPressed = 0ul;
                deviceState.buttonTouched = 0ul;
                deviceState.ResetAxisValues();
                break;
            }

            case LEFT_INDEX:
            {
                deviceState.isConnected     = true;
                deviceState.deviceClass     = VRModuleDeviceClass.Controller;
                deviceState.serialNumber    = "VIU Simulator Controller Device " + LEFT_INDEX;
                deviceState.modelNumber     = deviceState.serialNumber;
                deviceState.renderModelName = deviceState.serialNumber;
                deviceState.deviceModel     = VRModuleDeviceModel.ViveController;

                var pose = new RigidPose(new Vector3(-0.3f, -0.25f, 0.7f), Quaternion.identity);
                deviceState.isPoseValid   = true;
                deviceState.pose          = (hmdState.isConnected ? hmdState.pose : s_initHmdPose) * pose;
                s_offsetLeftController    = RigidPose.FromToPose(hmdState.isConnected ? hmdState.pose : s_initHmdPose, deviceState.pose);
                deviceState.buttonPressed = 0ul;
                deviceState.buttonTouched = 0ul;
                deviceState.ResetAxisValues();
                break;
            }

            default:
            {
                deviceState.isConnected     = true;
                deviceState.deviceClass     = VRModuleDeviceClass.GenericTracker;
                deviceState.serialNumber    = "VIU Simulator Generic Tracker Device " + deviceState.deviceIndex;
                deviceState.modelNumber     = deviceState.serialNumber;
                deviceState.renderModelName = deviceState.serialNumber;
                deviceState.deviceModel     = VRModuleDeviceModel.ViveTracker;

                var pose = new RigidPose(new Vector3(0f, -0.25f, 0.7f), Quaternion.identity);
                deviceState.isPoseValid   = true;
                deviceState.pose          = (hmdState.isConnected ? hmdState.pose : s_initHmdPose) * pose;
                s_offsetTracker           = RigidPose.FromToPose(hmdState.isConnected ? hmdState.pose : s_initHmdPose, deviceState.pose);
                deviceState.buttonPressed = 0ul;
                deviceState.buttonTouched = 0ul;
                deviceState.ResetAxisValues();
                break;
            }
            }
        }