Exemplo n.º 1
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);
                    }
                }
            }
        }