Exemple #1
0
            new public static IndexedTable <DocumentType> Get(string directory = null)
            {
                directory = getNormalizedDirectory(directory);
                WeakReference wr;
                string        key = directory + System.IO.Path.DirectorySeparatorChar + typeof(DocumentType).Name;

                if (!tableKeys2table.TryGetValue(key, out wr) ||
                    !wr.IsAlive
                    )
                {
                    IndexedTable <DocumentType> t = new IndexedTable <DocumentType>(directory, key);
                    wr = new WeakReference(t);
                    tableKeys2table[key] = wr;
                }
                return((IndexedTable <DocumentType>)wr.Target);
            }
Exemple #2
0
        public virtual void OnColliderEventDragStart(ColliderButtonEventData eventData)
        {
            if (!IsValidGrabButton(eventData))
            {
                return;
            }
            if (singleItemGrab)
            {
                ViveColliderEventCaster caster = eventData.eventCaster as ViveColliderEventCaster;
                if (!caster.canGrab)
                {
                    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);

            if (singleItemGrab)
            {
                ViveColliderEventCaster caster = eventData.eventCaster as ViveColliderEventCaster;
                caster.canGrab = false;
            }

            AddGrabber(grabber);
        }
Exemple #3
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 #4
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 GenericInfo()
            {
                m_info = GetInfo(typeof(TRole));
                var roleEnums = m_info.RoleValues as TRole[];

                m_nameTable = new IndexedTable <string, TRole>(roleEnums.Length);
                m_roles     = new TRole[ValidRoleLength];

                for (int i = 0; i < m_roles.Length; ++i)
                {
                    m_roles[i] = InvalidRole;
                }

                for (int i = 0; i < roleEnums.Length; ++i)
                {
                    var roleValue = ToRoleValue(roleEnums[i]);

                    m_nameTable.Add(GetNameByElementIndex(i), roleEnums[i]);

                    if (roleValue == InvalidRoleValue)
                    {
                        m_invalidRole = roleEnums[i];
                    }
                    else
                    {
                        var offset = RoleValueToRoleOffset(roleValue);
                        m_roles[offset] = roleEnums[i];
                    }
                }

                m_minValidRole = ToRole(m_info.MinValidRoleValue);
                m_maxValidRole = ToRole(m_info.MaxValidRoleValue);

                if (s_instance == null)
                {
                    s_instance = this;
                }
                else
                {
                    UnityEngine.Debug.Log("redundant instance for RoleInfo<" + typeof(TRole).Name + ">");
                }
            }
Exemple #6
0
            public Map(Type roleType)
            {
                m_info = ViveRoleEnum.GetInfo(roleType);

                m_role2index = new uint[m_info.ValidRoleLength];
                m_index2role = new int[VRModule.MAX_DEVICE_COUNT];

                m_roleBoundDevices = new IndexedSet <uint> [m_info.ValidRoleLength];
                m_sn2role          = new IndexedTable <string, int>(Mathf.Min(m_info.ValidRoleLength, (int)VRModule.MAX_DEVICE_COUNT));

                for (int i = 0; i < m_role2index.Length; ++i)
                {
                    m_role2index[i] = VRModule.INVALID_DEVICE_INDEX;
                }

                for (int i = 0; i < m_index2role.Length; ++i)
                {
                    m_index2role[i] = m_info.InvalidRoleValue;
                }
            }
Exemple #7
0
    public virtual void OnBeginDrag(PointerEventData eventData)
    {
        var hitDistance = 0f;

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

        case PointerEventData.InputButton.Left:
            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);
    }
Exemple #8
0
        private static Map GetInternalMap(Type roleType)
        {
            if (s_mapTable == null)
            {
                s_mapTable = new IndexedTable <Type, Map>();
            }

            Map map;

            if (!s_mapTable.TryGetValue(roleType, out map))
            {
                var validateResult = ViveRoleEnum.ValidateViveRoleEnum(roleType);
                if (validateResult != ViveRoleEnumValidateResult.Valid)
                {
                    Debug.LogWarning(roleType.Name + " is not valid ViveRole type. " + validateResult);
                    return(null);
                }

                map = new Map(roleType);
                s_mapTable.Add(roleType, map);
            }

            return(map);
        }
Exemple #9
0
        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);

            GameObject.Find("LocalPlayer").GetComponent <isLocalPlayer>().CmdClientAuthority(gameObject);
        }
        public static IInfo GetInfo(Type roleEnumType)
        {
            if (s_infoTable == null)
            {
                s_infoTable = new IndexedTable <Type, IInfo>();
            }

            IInfo info;

            if (!s_infoTable.TryGetValue(roleEnumType, out info))
            {
                var validateResult = ValidateViveRoleEnum(roleEnumType);
                if (validateResult != ViveRoleEnumValidateResult.Valid)
                {
                    UnityEngine.Debug.LogWarning(roleEnumType.Name + " is not valid ViveRole. " + validateResult);
                    return(null);
                }

                info = new Info(roleEnumType);
                s_infoTable.Add(roleEnumType, info);
            }

            return(info);
        }
Exemple #11
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;
        }
Exemple #12
0
 public static IndexedTable <DocumentType> GetIndexedTable <DocumentType>(string directory = null) where DocumentType : IndexedDocument, new()
 {
     return(IndexedTable <DocumentType> .Get(directory));
 }
 void IIndexedColumn.Initialize(IndexedTable table, Column sourceColumn)
 {
     m_IndexedTable = table;
     m_SourceColumn = (ColumnTyped <DataT>)sourceColumn;
 }
Exemple #14
0
            public Info(Type roleEnumType)
            {
                m_roleEnumType = roleEnumType;

                var attrs = roleEnumType.GetCustomAttributes(typeof(ViveRoleEnumAttribute), false) as ViveRoleEnumAttribute[];

                m_invalidRoleValue = attrs[0].InvalidRoleValue;

                m_roleValueNames = Enum.GetNames(roleEnumType);
                m_roleValues     = Enum.GetValues(roleEnumType) as int[];
                // remove name that shares same value with others
                var tempValues = new List <EnumValues>();

                for (int i = 0, imax = m_roleValues.Length; i < imax; ++i)
                {
                    // filter out obsolete member
                    var memInfo    = m_roleEnumType.GetMember(m_roleValueNames[i]);
                    var attributes = memInfo[0].GetCustomAttributes(typeof(HideMamberAttribute), false);
                    if (attributes != null && attributes.Length > 0)
                    {
                        continue;
                    }

                    tempValues.Add(new EnumValues()
                    {
                        value = m_roleValues[i],
                        name  = m_roleValueNames[i],
                    });
                }
                // sort by value
                tempValues.Sort((e1, e2) =>
                {
                    if (e1.value < e2.value)
                    {
                        return(-1);
                    }
                    if (e1.value > e2.value)
                    {
                        return(1);
                    }
                    return(string.Compare(e1.name, e2.name));
                });

                m_roleNameSet    = new IndexedSet <string>(m_roleValues.Length);
                m_roleNameTable  = new IndexedTable <int, string>();
                m_roleValueNames = new string[tempValues.Count];
                m_roleValues     = new int[tempValues.Count];
                for (int i = 0, imax = tempValues.Count; i < imax; ++i)
                {
                    m_roleValueNames[i] = tempValues[i].name;
                    m_roleValues[i]     = tempValues[i].value;

                    m_roleNameSet.Add(tempValues[i].name);
                    m_roleNameTable.AddUniqueKey(tempValues[i].value, tempValues[i].name);
                }

                m_minRoleValue = int.MaxValue;
                m_maxRoleValue = int.MinValue;
                // find invalid role & valid role length
                for (int i = 0; i < m_roleValues.Length; ++i)
                {
                    if (m_roleValues[i] == m_invalidRoleValue)
                    {
                        m_invalidRoleValueIndex = i;
                        continue;
                    }

                    if (m_roleValues[i] < m_minRoleValue)
                    {
                        m_minRoleValue = m_roleValues[i];
                    }

                    if (m_roleValues[i] > m_maxRoleValue)
                    {
                        m_maxRoleValue = m_roleValues[i];
                    }
                }

                m_validRoleLength = m_maxRoleValue - m_minRoleValue + 1;

                // initialize role valid array, in case that the sequence of value of the enum type is not continuous
                m_roleValid = new bool[m_validRoleLength];
                for (int i = 0; i < m_roleValues.Length; ++i)
                {
                    if (m_roleValues[i] == m_invalidRoleValue)
                    {
                        continue;
                    }

                    m_roleValid[ToRoleOffset(m_roleValues[i])] = true;
                }
            }