Beispiel #1
0
        private void ActivateElements(Player player, int actionId)
        {
            float axis = player.GetAxis(actionId);

            if ((double)axis == 0.0)
            {
                return;
            }
            IList <InputActionSourceData> currentInputSources = player.GetCurrentInputSources(actionId);

            for (int index1 = 0; index1 < ((ICollection <InputActionSourceData>)currentInputSources).Count; ++index1)
            {
                InputActionSourceData actionSourceData = currentInputSources[index1];
                IGamepadTemplate      template         = (IGamepadTemplate)((InputActionSourceData) ref actionSourceData).get_controller().GetTemplate <IGamepadTemplate>();
                if (template != null)
                {
                    ((IControllerTemplate)template).GetElementTargets(ControllerElementTarget.op_Implicit(((InputActionSourceData) ref actionSourceData).get_actionElementMap()), this._tempTargetList);
                    for (int index2 = 0; index2 < ((ICollection <ControllerTemplateElementTarget>) this._tempTargetList).Count; ++index2)
                    {
                        ControllerTemplateElementTarget tempTarget = this._tempTargetList[index2];
                        int id = ((ControllerTemplateElementTarget) ref tempTarget).get_element().get_id();
                        ControllerUIElement uiElement = this._uiElements[id];
                        if (((ControllerTemplateElementTarget) ref tempTarget).get_elementType() == null)
                        {
                            uiElement.Activate(axis);
                        }
                        else if (((ControllerTemplateElementTarget) ref tempTarget).get_elementType() == 1 && (player.GetButton(actionId) || player.GetNegativeButton(actionId)))
                        {
                            uiElement.Activate(1f);
                        }
                        this.GetStick(id)?.SetAxisPosition(id, axis * 20f);
                    }
                }
Beispiel #2
0
        private void ActivateElements(Player player, int actionId)
        {
            // Get the Axis value of the Action from the Player
            float axisValue = player.GetAxis(actionId);

            if (axisValue == 0f)
            {
                return;                  // not active
            }
            // Get all the sources contributing to the Action
            IList <InputActionSourceData> sources = player.GetCurrentInputSources(actionId);

            // Check each source and activate the elements they map to
            for (int i = 0; i < sources.Count; i++)
            {
                InputActionSourceData source = sources[i];

                // Try to get the GamepadTemplate from the Controller
                IGamepadTemplate gamepad = source.controller.GetTemplate <IGamepadTemplate>();
                if (gamepad == null)
                {
                    continue;                  // does not implement the Dual Analog Gamepad Template
                }
                // Get all element targets on the template by passing in the Action Element Map
                // This gives you the Template element targets that are mapped to the Controller element target.
                gamepad.GetElementTargets(source.actionElementMap, _tempTargetList);

                // Activate Template element targets
                for (int j = 0; j < _tempTargetList.Count; j++)
                {
                    ControllerTemplateElementTarget target = _tempTargetList[j];
                    int templateElementId         = target.element.id;
                    ControllerUIElement uiElement = _uiElements[templateElementId];

                    if (target.elementType == ControllerTemplateElementType.Axis)
                    {
                        uiElement.Activate(axisValue);
                    }
                    else if (target.elementType == ControllerTemplateElementType.Button)
                    {
                        // If the target element is a Button, make sure the Button value of the Action is true before activating
                        if (player.GetButton(actionId) || player.GetNegativeButton(actionId))
                        {
                            uiElement.Activate(1f);
                        }
                    }

                    // Move the stick for stick axes
                    Stick stick = GetStick(templateElementId);
                    if (stick != null)
                    {
                        stick.SetAxisPosition(templateElementId, axisValue * stickRadius);
                    }
                }
            }
        }
Beispiel #3
0
        private void DrawLabels(Player player, InputAction action)
        {
            // Lists first Action bound to each Dual Analog Gamepad Template element

            // Get the first Controller that implements the Dual Analog Gamepad Template from the Player
            Controller controller = player.controllers.GetFirstControllerWithTemplate <IGamepadTemplate>();

            if (controller == null)
            {
                return;
            }

            // Get the first gamepad assigned to the Player
            IGamepadTemplate gamepad = controller.GetTemplate <IGamepadTemplate>();

            // Get the Controller Map in the Default category and layout for this Controller from the Player
            ControllerMap controllerMap = player.controllers.maps.GetMap(controller, "Default", "Default");

            if (controllerMap == null)
            {
                return;
            }

            // Go through each Controller Template element displayed in the UI
            for (int i = 0; i < _uiElementsArray.Length; i++)
            {
                ControllerUIElement uiElement = _uiElementsArray[i].element;
                int elementId = _uiElementsArray[i].id;

                // Get the Controller Template Element from the Controller Template
                IControllerTemplateElement element = gamepad.GetElement(elementId);

                // Draw the label
                DrawLabel(uiElement, action, controllerMap, gamepad, element);
            }
        }
Beispiel #4
0
 public UIElement(int id, ControllerUIElement element)
 {
     this.id      = id;
     this.element = element;
 }
Beispiel #5
0
        private void DrawLabel(ControllerUIElement uiElement, InputAction action, ControllerMap controllerMap,
                               IControllerTemplate template, IControllerTemplateElement element)
        {
            if (element.source == null)
            {
                return;                         // this element cannot map to a source
            }
            ActionElementMap aem;

            // A Controller Template Element Source contains Targets that each point to
            // a Controller.Element or part of a Controller.Element (such as one pole of an Axis).

            // Handle Axis-type Template Element
            if (element.source.type == ControllerTemplateElementSourceType.Axis)
            {
                // Cast the source to an Axis source so we can access the 3 possible Targets
                IControllerTemplateAxisSource source = (element.source as IControllerTemplateAxisSource);

                // A Template axis source can be either a full-axis binding or a split-axis binding

                // Handle split-axis source
                if (source.splitAxis)
                {
                    // A split-axis source has a Positive Target and a Negative Target, one for each side of the axis.

                    // Positive Target
                    aem = controllerMap.GetFirstElementMapWithElementTarget(source.positiveTarget, action.id, true);
                    if (aem != null)
                    {
                        uiElement.SetLabel(aem.actionDescriptiveName, AxisRange.Positive);
                    }

                    // Negative Target
                    aem = controllerMap.GetFirstElementMapWithElementTarget(source.negativeTarget, action.id, true);
                    if (aem != null)
                    {
                        uiElement.SetLabel(aem.actionDescriptiveName, AxisRange.Negative);
                    }

                    // Handle full-axis source
                }
                else
                {
                    // A full-axis sources has just a single full target.

                    // Full Target
                    aem = controllerMap.GetFirstElementMapWithElementTarget(source.fullTarget, action.id, true);
                    if (aem != null)
                    {
                        // a full target was mapped

                        uiElement.SetLabel(aem.actionDescriptiveName, AxisRange.Full);
                    }
                    else
                    {
                        // no full mapping was found, look for separate positive/negative mappings

                        // Positive side
                        aem = controllerMap.GetFirstElementMapWithElementTarget(
                            new ControllerElementTarget(source.fullTarget)
                        {
                            axisRange = AxisRange.Positive
                        },
                            action.id,
                            true
                            );
                        if (aem != null)
                        {
                            uiElement.SetLabel(aem.actionDescriptiveName, AxisRange.Positive);
                        }

                        // Negative side
                        aem = controllerMap.GetFirstElementMapWithElementTarget(
                            new ControllerElementTarget(source.fullTarget)
                        {
                            axisRange = AxisRange.Negative
                        },
                            action.id,
                            true
                            );
                        if (aem != null)
                        {
                            uiElement.SetLabel(aem.actionDescriptiveName, AxisRange.Negative);
                        }
                    }
                }

                // Handle Button-type Template Element
            }
            else if (element.source.type == ControllerTemplateElementSourceType.Button)
            {
                // Cast the source to an button source
                IControllerTemplateButtonSource source = (element.source as IControllerTemplateButtonSource);

                // Target
                aem = controllerMap.GetFirstElementMapWithElementTarget(source.target, action.id, true);
                if (aem != null)
                {
                    uiElement.SetLabel(aem.actionDescriptiveName, AxisRange.Full);
                }
            }
        }