public static void ImportBindings(RoleBindings roleBindings) { foreach (var roleData in roleBindings.roles) { Type roleType; if (string.IsNullOrEmpty(roleData.type) || !ViveRoleEnum.ValidViveRoleTable.TryGetValue(roleData.type, out roleType)) { continue; } var roleMap = ViveRole.GetMap(roleType); roleMap.UnbindAll(); foreach (var binding in roleData.bindings) { if (roleMap.IsRoleValueBound(binding.rv)) { continue; } if (roleMap.IsDeviceBound(binding.sn)) { continue; } roleMap.BindRoleValue(binding.rv, binding.sn); } } }
public static RoleBindings ExportRoleBindings() { var roleCount = ViveRoleEnum.ValidViveRoleTable.Count; // parse role bindings from all role maps var roleBindings = new RoleBindings(); if (roleCount > 0) { roleBindings.roles = new RoleData[roleCount]; for (int i = 0; i < roleCount; ++i) { var roleMap = ViveRole.GetMap(ViveRoleEnum.ValidViveRoleTable.GetValueByIndex(i)); var roleInfo = roleMap.RoleValueInfo; var bindingCount = roleMap.BindingCount; var roleData = new RoleData(); roleData.type = ViveRoleEnum.ValidViveRoleTable.GetKeyByIndex(i); if (bindingCount > 0) { roleData.bindings = new Binding[bindingCount]; var bindingsIndex = 0; for (int roleValue = roleInfo.MinValidRoleValue; roleValue <= roleInfo.MaxValidRoleValue; ++roleValue) { if (!roleInfo.IsValidRoleValue(roleValue)) { continue; } var boundDevice = roleMap.GetBoundDeviceByRoleValue(roleValue); if (string.IsNullOrEmpty(boundDevice)) { continue; } var binding = new Binding(); binding.rv = roleValue; binding.sn = boundDevice; roleData.bindings[bindingsIndex++] = binding; } } roleBindings.roles[i] = roleData; } } return(roleBindings); }