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); }
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); }
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); }
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 + ">"); } }
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; } }
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); }
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); }
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); }
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; }
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; }
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; } }