SebastianLawe

Untitled

Sep 27th, 2015
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 6.02 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3. using UnityEngine.UI;
  4. using System.Collections.Generic;
  5. using XInputDotNetPure;
  6. using System.Diagnostics;
  7. using UnityEngine.EventSystems;
  8.  
  9. public class ControllerMenuSelector : MonoBehaviour {
  10.     int index = 0;
  11.     GamePadState prevState;
  12.     GamePadState currentState;
  13.     public Selectable currentItem;
  14.     ServerManager serverManager;
  15.     bool lastButtonState;
  16.     Stopwatch reactionTimer;
  17.     // Use this for initialization
  18.     void Start() {
  19.         reactionTimer = new Stopwatch();
  20.         if (serverManager == null) {
  21.             serverManager = FindObjectOfType<ServerManager>();
  22.         }
  23.         serverManager.PageChanged += delegate {
  24.             foreach (Selectable item in FindObjectsOfType<Selectable>()) {
  25.                 if (item.enabled) {
  26.                     currentItem = item;
  27.                     break;
  28.                 }
  29.             }
  30.         };
  31.         foreach (Selectable item in FindObjectsOfType<Selectable>()) {
  32.             if (item.enabled) {
  33.                 currentItem = item;
  34.                 break;
  35.             }
  36.         }
  37.     }
  38.  
  39.     // Update is called once per frame
  40.     void Update() {
  41.         currentState = GamePad.GetState(0);
  42.         if (currentItem == null) {
  43.             foreach (Selectable item in FindObjectsOfType<Selectable>()) {
  44.                 if (item.enabled) {
  45.                     currentItem = item;
  46.                     break;
  47.                 }
  48.             }
  49.         }
  50.         List<Selectable> selectableItems = new List<Selectable>();
  51.         if (reactionTimer.ElapsedMilliseconds >= 150) {
  52.             reactionTimer.Stop();
  53.             reactionTimer.Reset();
  54.         }
  55.         if (!reactionTimer.IsRunning) {
  56.             lastButtonState = (Input.GetKeyUp(KeyCode.UpArrow)
  57.                 || Input.GetKeyUp(KeyCode.DownArrow)
  58.                 || Input.GetKeyUp(KeyCode.LeftArrow)
  59.                 || Input.GetKeyUp(KeyCode.RightArrow));
  60.             if (currentItem != null) {
  61.                 if ((prevState.DPad.Up == ButtonState.Pressed
  62.                     && currentState.DPad.Up == ButtonState.Released)
  63.                     || Input.GetKey(KeyCode.UpArrow)) {
  64.                     Selectable newItem = currentItem.FindSelectableOnUp();
  65.                     if (newItem != null) {
  66.                         ExecuteEvents.Execute(currentItem.gameObject,
  67.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
  68.                         currentItem = newItem;
  69.                         ExecuteEvents.Execute(currentItem.gameObject,
  70.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
  71.                     }
  72.                     reactionTimer.Start();
  73.                 }
  74.                 if ((prevState.DPad.Down == ButtonState.Pressed
  75.                     && currentState.DPad.Down == ButtonState.Released)
  76.                     || Input.GetKey(KeyCode.DownArrow)) {
  77.                     Selectable newItem = currentItem.FindSelectableOnDown();
  78.                     if (newItem != null) {
  79.                         ExecuteEvents.Execute(currentItem.gameObject,
  80.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
  81.                         currentItem = newItem;
  82.                         ExecuteEvents.Execute(currentItem.gameObject,
  83.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
  84.                     }
  85.                     reactionTimer.Start();
  86.                 }
  87.                 if ((prevState.DPad.Left == ButtonState.Pressed
  88.                     && currentState.DPad.Left == ButtonState.Released)
  89.                     || Input.GetKey(KeyCode.LeftArrow)) {
  90.                     Selectable newItem = currentItem.FindSelectableOnLeft();
  91.                     if (newItem != null) {
  92.                         ExecuteEvents.Execute(currentItem.gameObject,
  93.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
  94.                         currentItem = newItem;
  95.                         ExecuteEvents.Execute(currentItem.gameObject,
  96.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
  97.                     }
  98.                     reactionTimer.Start();
  99.                 }
  100.                 if ((prevState.DPad.Right == ButtonState.Pressed
  101.                     && currentState.DPad.Right == ButtonState.Released)
  102.                     || Input.GetKey(KeyCode.RightArrow)) {
  103.                     Selectable newItem = currentItem.FindSelectableOnRight();
  104.                     if (newItem != null) {
  105.                         ExecuteEvents.Execute(currentItem.gameObject,
  106.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerExitHandler);
  107.                         currentItem = newItem;
  108.                         ExecuteEvents.Execute(currentItem.gameObject,
  109.                             new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
  110.                     }
  111.                     reactionTimer.Start();
  112.                 }
  113.                 if ((prevState.Buttons.A == ButtonState.Pressed
  114.                     && currentState.Buttons.A == ButtonState.Released)
  115.                     || Input.GetKey(KeyCode.Return)) {
  116.                     ExecuteEvents.Execute(currentItem.gameObject,
  117.                         new PointerEventData(EventSystem.current), ExecuteEvents.pointerDownHandler);
  118.                     ExecuteEvents.Execute(currentItem.gameObject,
  119.                         new PointerEventData(EventSystem.current), ExecuteEvents.pointerUpHandler);
  120.                 }
  121.                 if ((prevState.Buttons.B == ButtonState.Pressed
  122.                     && currentState.Buttons.B == ButtonState.Released)
  123.                     || Input.GetKey(KeyCode.Escape)) {
  124.                     serverManager.GoBack();
  125.                 }
  126.             }
  127.         }
  128.         prevState = currentState;
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment