예제 #1
0
        public static void RemoveBindingOverrides(this InputActionMap actionMap, IEnumerable <InputBinding> overrides)
        {
            if (actionMap == null)
            {
                throw new ArgumentNullException("actionMap");
            }
            actionMap.ThrowIfModifyingBindingsIsNotAllowed();

            foreach (var binding in overrides)
            {
                RemoveBindingOverride(actionMap, binding);
            }
        }
예제 #2
0
        private static void RemoveBindingOverride(this InputActionMap actionMap, InputBinding bindingOverride)
        {
            if (actionMap == null)
            {
                throw new ArgumentNullException("actionMap");
            }
            actionMap.ThrowIfModifyingBindingsIsNotAllowed();

            bindingOverride.overridePath         = null;
            bindingOverride.overrideInteractions = null;

            // Simply apply but with a null binding.
            ApplyBindingOverride(actionMap, bindingOverride);
        }
        public static BindingSyntax AddBinding(this InputActionMap actionMap, InputBinding binding)
        {
            if (actionMap == null)
            {
                throw new ArgumentNullException(nameof(actionMap));
            }
            if (string.IsNullOrEmpty(binding.path))
            {
                throw new ArgumentException("Binding path cannot be null or empty", nameof(binding));
            }
            actionMap.ThrowIfModifyingBindingsIsNotAllowed();

            var bindingIndex = AddBindingInternal(actionMap, binding);

            return(new BindingSyntax(actionMap, null, bindingIndex));
        }
예제 #4
0
        /// <summary>
        /// Restore all bindings in the map to their defaults.
        /// </summary>
        /// <param name="actionMap">Action map to remove overrides from. Must not have enabled actions.</param>
        /// <exception cref="ArgumentNullException"><paramref name="actionMap"/> is <c>null</c>.</exception>
        /// <exception cref="InvalidOperationException"><paramref name="actionMap"/> is currently enabled.</exception>
        public static void RemoveAllBindingOverrides(this InputActionMap actionMap)
        {
            if (actionMap == null)
            {
                throw new ArgumentNullException("actionMap");
            }
            actionMap.ThrowIfModifyingBindingsIsNotAllowed();

            if (actionMap.m_Bindings == null)
            {
                return; // No bindings in map.
            }
            var emptyBinding = new InputBinding();
            var bindingCount = actionMap.m_Bindings.Length;

            for (var i = 0; i < bindingCount; ++i)
            {
                ApplyBindingOverride(actionMap, i, emptyBinding);
            }
        }
예제 #5
0
        /// <summary>
        /// Apply the given binding override to all bindings in the map that are matched by the override.
        /// </summary>
        /// <param name="actionMap"></param>
        /// <param name="bindingOverride"></param>
        /// <returns>The number of bindings overridden in the given map.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="actionMap"/> is <c>null</c>.</exception>
        /// <exception cref="InvalidOperationException"><paramref name="actionMap"/> is currently enabled.</exception>
        /// <remarks>
        /// </remarks>
        public static int ApplyBindingOverride(this InputActionMap actionMap, InputBinding bindingOverride)
        {
            if (actionMap == null)
            {
                throw new ArgumentNullException("actionMap");
            }
            actionMap.ThrowIfModifyingBindingsIsNotAllowed();

            var bindings = actionMap.m_Bindings;

            if (bindings == null)
            {
                return(0);
            }

            // Go through all bindings in the map and match them to the override.
            var bindingCount = bindings.Length;
            var matchCount   = 0;

            for (var i = 0; i < bindingCount; ++i)
            {
                if (!bindingOverride.Matches(ref bindings[i]))
                {
                    continue;
                }

                // Set overrides on binding.
                bindings[i].overridePath         = bindingOverride.overridePath;
                bindings[i].overrideInteractions = bindingOverride.overrideInteractions;
                ++matchCount;
            }

            if (matchCount > 0)
            {
                actionMap.InvalidateResolvedData();
            }

            return(matchCount);
        }