コード例 #1
0
    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);
            }
        }
    }
コード例 #2
0
    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);
    }