// both roleValue and deviceIndex must be valid // ignore binding state private void InternalUnmapping(int roleValue, uint deviceIndex) { if (m_lockInternalMapping) { throw new Exception("Recursive calling InternalMapping"); } m_lockInternalMapping = true; var roleOffset = m_info.RoleValueToRoleOffset(roleValue); var eventArg = new MappingChangedEventArg() { roleValue = roleValue, previousDeviceIndex = deviceIndex, currentDeviceIndex = VRModule.INVALID_DEVICE_INDEX, }; m_role2index[roleOffset] = VRModule.INVALID_DEVICE_INDEX; m_index2role[deviceIndex] = m_info.InvalidRoleValue; if (onRoleValueMappingChanged != null) { onRoleValueMappingChanged(this, eventArg); } m_lockInternalMapping = false; }
private void OnMappingChanged(IMap map, MappingChangedEventArg arg) { if (onRoleMappingChanged != null) { onRoleMappingChanged(this, new MappingChangedEventArg <TRole>() { role = m_info.ToRole(arg.roleValue), previousDeviceIndex = arg.previousDeviceIndex, currentDeviceIndex = arg.currentDeviceIndex, }); } }
// both roleValue and deviceIndex must be valid // ignore binding state private void InternalMapping(int roleValue, uint deviceIndex) { if (m_lockInternalMapping) { throw new Exception("Recursive calling InternalMapping"); } m_lockInternalMapping = true; var previousRoleValue = m_index2role[deviceIndex]; if (roleValue == previousRoleValue) { m_lockInternalMapping = false; return; } if (m_info.IsValidRoleValue(previousRoleValue)) { m_lockInternalMapping = false; InternalUnmapping(previousRoleValue, deviceIndex); m_lockInternalMapping = true; } var roleOffset = m_info.RoleValueToRoleOffset(roleValue); var previousDeviceIndex = m_role2index[roleOffset]; var eventArg = new MappingChangedEventArg() { roleValue = roleValue, previousDeviceIndex = previousDeviceIndex, currentDeviceIndex = deviceIndex, }; m_role2index[roleOffset] = deviceIndex; m_index2role[deviceIndex] = roleValue; if (VRModule.IsValidDeviceIndex(previousDeviceIndex)) { m_index2role[previousDeviceIndex] = m_info.InvalidRoleValue; } if (onRoleValueMappingChanged != null) { onRoleValueMappingChanged(this, eventArg); } m_lockInternalMapping = false; }