Пример #1
0
        public static void ApplyBindingOverride(this InputActionMap actionMap, int bindingIndex, InputBinding bindingOverride)
        {
            if (actionMap == null)
            {
                throw new ArgumentNullException("actionMap");
            }
            var bindingsCount = actionMap.m_Bindings != null ? actionMap.m_Bindings.Length : 0;

            if (bindingIndex < 0 || bindingIndex >= bindingsCount)
            {
                throw new ArgumentOutOfRangeException(
                          string.Format("Cannot apply override to binding at index {0} in map '{1}' with only {2} bindings",
                                        bindingIndex, actionMap, bindingsCount), "bindingIndex");
            }

            actionMap.m_Bindings[bindingIndex].overridePath         = bindingOverride.overridePath;
            actionMap.m_Bindings[bindingIndex].overrideInteractions = bindingOverride.overrideInteractions;
            actionMap.InvalidateResolvedData();
        }
Пример #2
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);
        }