internal void AddPointer(PlayerPointer pointer)
 {
     if (pointer)
     {
         _pointers.Add(pointer);
     }
 }
 public override void Process()
 {
     for (var i = 0; i < _pointers.Count; i++)
     {
         PlayerPointer pointer    = _pointers[i];
         Player        player     = pointer.Player;
         InputDevice   controller = player.Controller;
         if (controller == null)
         {
             continue;
         }
         // Move the controller
         pointer.Move(new Vector2(controller[_horizontal], controller[_vertical]));
         ProcessPointerSubmit(pointer, i, controller);
         CharacterChange(player, controller);
     }
 }
 void CharacterChange(PlayerPointer pointer, Player player, InputDevice controller)
 {
     if (!player.SelectedCharacter)
     {
         return;
     }
     if (controller.GetControl(_changeLeft).WasPressed)
     {
         player.Pallete--;
     }
     if (controller.GetControl(_changeRight).WasPressed)
     {
         player.Pallete++;
     }
     if (controller.GetControl(_cancel).WasPressed)
     {
     }
 }
        void ProcessPointerSubmit(PlayerPointer pointer, int i, InputDevice controller)
        {
            GetPointerData(i, out _eventData, true);
            _eventData.position = Camera.main.WorldToScreenPoint(pointer.transform.position);
            EventSystem.current.RaycastAll(_eventData, m_RaycastResultCache);
            RaycastResult result = FindFirstRaycast(m_RaycastResultCache);

            ProcessMove(_eventData);
            var success = false;

            _eventData.clickCount = 0;
            if (controller[_submit].WasPressed)
            {
                _eventData.pressPosition       = _eventData.position;
                _eventData.clickCount          = 1;
                _eventData.clickTime           = Time.unscaledTime;
                _eventData.pointerPressRaycast = result;
                if (m_RaycastResultCache.Count > 0)
                {
                    _eventData.selectedObject = result.gameObject;
                    _eventData.pointerPress   = ExecuteEvents.ExecuteHierarchy(result.gameObject,
                                                                               _eventData,
                                                                               ExecuteEvents.submitHandler);
                    _eventData.rawPointerPress = result.gameObject;
                    foreach (IPlayerClickable clickable in
                             result.gameObject.GetComponentsInParent <IPlayerClickable>())
                    {
                        clickable.Click(pointer.Player);
                    }
                    success = true;
                }
            }
            if (!success)
            {
                _eventData.clickCount       = 0;
                _eventData.eligibleForClick = false;
                _eventData.pointerPress     = null;
                _eventData.rawPointerPress  = null;
            }
        }
 internal void RemovePointer(PlayerPointer pointer)
 {
     _pointers.Remove(pointer);
 }