Ejemplo n.º 1
0
// The following is just a wrapper for UserData.AddAction(_categoryId) since it's a little fiddly to configure.
        private static InputAction AddRewiredAction(UserData userData, string name, InputActionType type, string descriptiveName, int categoryId, bool userAssignable)
        {
            // Add an action to the data store
            userData.AddAction(categoryId);

            // Get a reference to the added action
            int[]       actionIds    = userData.GetActionIds();
            int         lastActionId = actionIds[actionIds.Length - 1];
            InputAction inputAction  = userData.GetActionById(lastActionId);

            // Configure our action according to args

            if (string.IsNullOrEmpty(name) == false)
            {
                FieldInfo _name = inputAction.GetType().GetField("_name", BindingFlags.NonPublic | BindingFlags.Instance);
                _name.SetValue(inputAction, name);
            }

            if (type != InputActionType.Button)
            {
                FieldInfo _type = inputAction.GetType().GetField("_type", BindingFlags.NonPublic | BindingFlags.Instance);
                _type.SetValue(inputAction, type);
            }

            if (string.IsNullOrEmpty(descriptiveName) == false)
            {
                FieldInfo _descriptiveName = inputAction.GetType().GetField("_descriptiveName", BindingFlags.NonPublic | BindingFlags.Instance);
                _descriptiveName.SetValue(inputAction, descriptiveName);
            }

            if (!userAssignable)
            {
                FieldInfo _userAssignable = inputAction.GetType().GetField("_userAssignable", BindingFlags.NonPublic | BindingFlags.Instance);
                _userAssignable.SetValue(inputAction, userAssignable);
            }

            /*
             * if (false) { // not used for simple keybinds
             *  FieldInfo _behaviorId = inputAction.GetType().GetField("_behaviorId", BindingFlags.NonPublic | BindingFlags.Instance);
             *  _behaviorId.SetValue(inputAction, _behaviorId);
             * }
             */

            return(inputAction);
        }
Ejemplo n.º 2
0
        // Actually add the Rewired control map

        internal static InputAction AddRewiredAction(UserData userData, string name, KeybindingsCategory category, InputType type, out int actionID)
        {
            int[] preAddIDs = userData.GetActionIds();

            // Add an action to the data store
            userData.AddAction((int)category);

            actionID = userData.GetActionIds().Where(it => !preAddIDs.Contains(it)).FirstOrDefault();

            // Get a reference to the added action
            var inputAction = userData.GetActionById(actionID);

            // Configure our action according to args
            At.SetField(inputAction, "_name", name);
            At.SetField(inputAction, "_descriptiveName", name);
            At.SetField(inputAction, "_type", (InputActionType)type);
            At.SetField(inputAction, "_userAssignable", true);
            At.SetField(inputAction, "_categoryId", (int)category);

            return(inputAction);
        }